iodine 0.7.59 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +15 -0
  3. data/.rspec +1 -0
  4. data/.yardopts +1 -3
  5. data/CHANGELOG.md +132 -12
  6. data/Gemfile +5 -7
  7. data/LICENSE.txt +1 -1
  8. data/README.md +147 -671
  9. data/Rakefile +9 -16
  10. data/examples/chatroom.nru +9 -0
  11. data/examples/client +74 -0
  12. data/examples/config-hello.nru +9 -0
  13. data/examples/config-hello.ru +11 -0
  14. data/examples/config-hijack.ru +13 -0
  15. data/examples/config-shootout.ru +43 -0
  16. data/examples/config.nru +120 -0
  17. data/examples/config.rb +37 -0
  18. data/examples/config.ru +42 -53
  19. data/examples/fake +24 -0
  20. data/examples/hello_neorack +137 -0
  21. data/examples/routes.nru +29 -0
  22. data/examples/routes.ru +42 -0
  23. data/exe/iodine +218 -258
  24. data/ext/iodine/extconf.rb +27 -100
  25. data/ext/iodine/fio-stl.h +128336 -0
  26. data/ext/iodine/fio-stl.md +26396 -0
  27. data/ext/iodine/iodine.c +213 -1393
  28. data/ext/iodine/iodine.h +250 -55
  29. data/ext/iodine/iodine_arg_helper.h +329 -0
  30. data/ext/iodine/iodine_caller.h +234 -25
  31. data/ext/iodine/iodine_cli.h +434 -0
  32. data/ext/iodine/iodine_compression.h +312 -0
  33. data/ext/iodine/iodine_connection.h +3484 -34
  34. data/ext/iodine/iodine_core.h +363 -0
  35. data/ext/iodine/iodine_crypto.h +1441 -0
  36. data/ext/iodine/iodine_defer.h +225 -4
  37. data/ext/iodine/iodine_json.h +738 -4
  38. data/ext/iodine/iodine_listener.h +263 -0
  39. data/ext/iodine/iodine_log.h +297 -0
  40. data/ext/iodine/iodine_minimap.h +543 -0
  41. data/ext/iodine/iodine_mustache.h +461 -4
  42. data/ext/iodine/iodine_pubsub_eng.h +729 -0
  43. data/ext/iodine/iodine_pubsub_history.h +547 -0
  44. data/ext/iodine/iodine_pubsub_msg.h +228 -0
  45. data/ext/iodine/iodine_redis.h +322 -0
  46. data/ext/iodine/iodine_store.h +418 -16
  47. data/ext/iodine/iodine_threads.h +279 -0
  48. data/ext/iodine/iodine_tls.h +515 -6
  49. data/ext/iodine/iodine_utils.h +923 -0
  50. data/iodine.gemspec +37 -42
  51. data/lib/iodine/benchmark.rb +1690 -0
  52. data/lib/iodine/documentation.rb +3085 -0
  53. data/lib/iodine/version.rb +17 -1
  54. data/lib/iodine.rb +54 -255
  55. data/logo.svg +36 -0
  56. data/mustache.md +55 -0
  57. data/sig/iodine.rbs +4 -0
  58. metadata +58 -184
  59. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  60. data/.github/workflows/ruby.yml +0 -42
  61. data/.gitignore +0 -20
  62. data/LIMITS.md +0 -41
  63. data/SPEC-PubSub-Draft.md +0 -159
  64. data/SPEC-WebSocket-Draft.md +0 -239
  65. data/bin/console +0 -22
  66. data/bin/info.md +0 -353
  67. data/bin/mustache_bench.rb +0 -100
  68. data/bin/poc/Gemfile.lock +0 -23
  69. data/bin/poc/README.md +0 -37
  70. data/bin/poc/config.ru +0 -66
  71. data/bin/poc/gemfile +0 -1
  72. data/bin/poc/www/index.html +0 -57
  73. data/examples/async_task.ru +0 -92
  74. data/examples/bates/README.md +0 -3
  75. data/examples/bates/config.ru +0 -342
  76. data/examples/bates/david+bold.pdf +0 -0
  77. data/examples/bates/public/drop-pdf.png +0 -0
  78. data/examples/bates/public/index.html +0 -600
  79. data/examples/echo.ru +0 -59
  80. data/examples/etag.ru +0 -16
  81. data/examples/hello.ru +0 -29
  82. data/examples/pubsub_engine.ru +0 -81
  83. data/examples/rack3.ru +0 -12
  84. data/examples/redis.ru +0 -70
  85. data/examples/shootout.ru +0 -73
  86. data/examples/sub-protocols.ru +0 -90
  87. data/examples/tcp_client.rb +0 -66
  88. data/examples/x-sendfile.ru +0 -14
  89. data/ext/iodine/fio.c +0 -11995
  90. data/ext/iodine/fio.h +0 -6371
  91. data/ext/iodine/fio_cli.c +0 -431
  92. data/ext/iodine/fio_cli.h +0 -189
  93. data/ext/iodine/fio_json_parser.h +0 -688
  94. data/ext/iodine/fio_siphash.c +0 -157
  95. data/ext/iodine/fio_siphash.h +0 -37
  96. data/ext/iodine/fio_tls.h +0 -129
  97. data/ext/iodine/fio_tls_missing.c +0 -649
  98. data/ext/iodine/fio_tls_openssl.c +0 -1106
  99. data/ext/iodine/fio_tmpfile.h +0 -50
  100. data/ext/iodine/fiobj.h +0 -44
  101. data/ext/iodine/fiobj4fio.h +0 -21
  102. data/ext/iodine/fiobj_ary.c +0 -333
  103. data/ext/iodine/fiobj_ary.h +0 -139
  104. data/ext/iodine/fiobj_data.c +0 -1187
  105. data/ext/iodine/fiobj_data.h +0 -167
  106. data/ext/iodine/fiobj_hash.c +0 -409
  107. data/ext/iodine/fiobj_hash.h +0 -176
  108. data/ext/iodine/fiobj_json.c +0 -622
  109. data/ext/iodine/fiobj_json.h +0 -68
  110. data/ext/iodine/fiobj_mem.h +0 -71
  111. data/ext/iodine/fiobj_mustache.c +0 -317
  112. data/ext/iodine/fiobj_mustache.h +0 -62
  113. data/ext/iodine/fiobj_numbers.c +0 -344
  114. data/ext/iodine/fiobj_numbers.h +0 -127
  115. data/ext/iodine/fiobj_str.c +0 -433
  116. data/ext/iodine/fiobj_str.h +0 -172
  117. data/ext/iodine/fiobject.c +0 -620
  118. data/ext/iodine/fiobject.h +0 -655
  119. data/ext/iodine/hpack.h +0 -1923
  120. data/ext/iodine/http.c +0 -2743
  121. data/ext/iodine/http.h +0 -1002
  122. data/ext/iodine/http1.c +0 -910
  123. data/ext/iodine/http1.h +0 -29
  124. data/ext/iodine/http1_parser.h +0 -878
  125. data/ext/iodine/http_internal.c +0 -1279
  126. data/ext/iodine/http_internal.h +0 -237
  127. data/ext/iodine/http_mime_parser.h +0 -350
  128. data/ext/iodine/iodine_caller.c +0 -230
  129. data/ext/iodine/iodine_connection.c +0 -941
  130. data/ext/iodine/iodine_defer.c +0 -420
  131. data/ext/iodine/iodine_fiobj2rb.h +0 -120
  132. data/ext/iodine/iodine_helpers.c +0 -282
  133. data/ext/iodine/iodine_helpers.h +0 -12
  134. data/ext/iodine/iodine_http.c +0 -1181
  135. data/ext/iodine/iodine_http.h +0 -23
  136. data/ext/iodine/iodine_json.c +0 -302
  137. data/ext/iodine/iodine_mustache.c +0 -567
  138. data/ext/iodine/iodine_pubsub.c +0 -580
  139. data/ext/iodine/iodine_pubsub.h +0 -26
  140. data/ext/iodine/iodine_rack_io.c +0 -273
  141. data/ext/iodine/iodine_rack_io.h +0 -20
  142. data/ext/iodine/iodine_store.c +0 -146
  143. data/ext/iodine/iodine_tcp.c +0 -346
  144. data/ext/iodine/iodine_tcp.h +0 -13
  145. data/ext/iodine/iodine_tls.c +0 -261
  146. data/ext/iodine/mustache_parser.h +0 -1546
  147. data/ext/iodine/redis_engine.c +0 -957
  148. data/ext/iodine/redis_engine.h +0 -79
  149. data/ext/iodine/resp_parser.h +0 -317
  150. data/ext/iodine/websocket_parser.h +0 -506
  151. data/ext/iodine/websockets.c +0 -743
  152. data/ext/iodine/websockets.h +0 -185
  153. data/lib/iodine/connection.rb +0 -61
  154. data/lib/iodine/json.rb +0 -42
  155. data/lib/iodine/mustache.rb +0 -113
  156. data/lib/iodine/pubsub.rb +0 -55
  157. data/lib/iodine/rack_utils.rb +0 -43
  158. data/lib/iodine/tls.rb +0 -16
  159. data/lib/rack/handler/iodine.rb +0 -33
  160. data/logo.png +0 -0
@@ -1,176 +0,0 @@
1
- /*
2
- Copyright: Boaz Segev, 2017-2019
3
- License: MIT
4
- */
5
- #ifndef H_FIOBJ_HASH_H
6
- /**
7
- * The facil.io Hash object is an ordered Hash Table implementation.
8
- *
9
- * By compromising some of the HashMap's collision resistance (comparing only
10
- * the Hash values rather than comparing key data), memory comparison can be
11
- * avoided and performance increased.
12
- *
13
- * By being ordered it's possible to iterate over key-value pairs in the order
14
- * in which they were added to the Hash table, making it possible to output JSON
15
- * in a controlled manner.
16
- */
17
- #define H_FIOBJ_HASH_H
18
-
19
- #include <fiobject.h>
20
-
21
- #include <fio_siphash.h>
22
- #include <fiobj_str.h>
23
-
24
- #include <errno.h>
25
-
26
- #ifdef __cplusplus
27
- extern "C" {
28
- #endif
29
-
30
- /* MUST be a power of 2 */
31
- #define HASH_INITIAL_CAPACITY 16
32
-
33
- /** attempts to rehash the hashmap. */
34
- void fiobj_hash_rehash(FIOBJ h);
35
-
36
- /* *****************************************************************************
37
- Hash Creation
38
- ***************************************************************************** */
39
-
40
- /**
41
- * Creates a mutable empty Hash object. Use `fiobj_free` when done.
42
- *
43
- * Notice that these Hash objects are optimized for smaller collections and
44
- * retain order of object insertion.
45
- */
46
- FIOBJ fiobj_hash_new(void);
47
-
48
- /**
49
- * Creates a mutable empty Hash object with an initial capacity of `capa`. Use
50
- * `fiobj_free` when done.
51
- *
52
- * This allows optimizations for larger (or smaller) collections.
53
- */
54
- FIOBJ fiobj_hash_new2(size_t capa);
55
-
56
- /* *****************************************************************************
57
- Hash properties and state
58
- ***************************************************************************** */
59
-
60
- /**
61
- * Returns a temporary theoretical Hash map capacity.
62
- * This could be used for testing performance and memory consumption.
63
- */
64
- size_t fiobj_hash_capa(const FIOBJ hash);
65
-
66
- /** Returns the number of elements in the Hash. */
67
- size_t fiobj_hash_count(const FIOBJ hash);
68
-
69
- /** Returns the key for the object in the current `fiobj_each` loop (if any). */
70
- FIOBJ fiobj_hash_key_in_loop(void);
71
-
72
- /* *****************************************************************************
73
- Populating the Hash
74
- ***************************************************************************** */
75
-
76
- /**
77
- * Sets a key-value pair in the Hash, duplicating the Symbol and **moving**
78
- * the ownership of the object to the Hash.
79
- *
80
- * Returns -1 on error.
81
- */
82
- int fiobj_hash_set(FIOBJ hash, FIOBJ key, FIOBJ obj);
83
-
84
- /**
85
- * Allows the Hash to be used as a stack.
86
- *
87
- * If a pointer `key` is provided, it will receive ownership of the key
88
- * (remember to free).
89
- *
90
- * Returns FIOBJ_INVALID on error.
91
- *
92
- * Returns and object if successful (remember to free).
93
- */
94
- FIOBJ fiobj_hash_pop(FIOBJ hash, FIOBJ *key);
95
-
96
- /**
97
- * Replaces the value in a key-value pair, returning the old value (and it's
98
- * ownership) to the caller.
99
- *
100
- * A return value of FIOBJ_INVALID indicates that no previous object existed
101
- * (but a new key-value pair was created.
102
- *
103
- * Errors are silently ignored.
104
- *
105
- * Remember to free the returned object.
106
- */
107
- FIOBJ fiobj_hash_replace(FIOBJ hash, FIOBJ key, FIOBJ obj);
108
-
109
- /**
110
- * Removes a key-value pair from the Hash, if it exists, returning the old
111
- * object (instead of freeing it).
112
- */
113
- FIOBJ fiobj_hash_remove(FIOBJ hash, FIOBJ key);
114
-
115
- /**
116
- * Removes a key-value pair from the Hash, if it exists, returning the old
117
- * object (instead of freeing it).
118
- */
119
- FIOBJ fiobj_hash_remove2(FIOBJ hash, uint64_t key_hash);
120
-
121
- /**
122
- * Deletes a key-value pair from the Hash, if it exists, freeing the
123
- * associated object.
124
- *
125
- * Returns -1 on type error or if the object never existed.
126
- */
127
- int fiobj_hash_delete(FIOBJ hash, FIOBJ key);
128
-
129
- /**
130
- * Deletes a key-value pair from the Hash, if it exists, freeing the
131
- * associated object.
132
- *
133
- * This function takes a `uint64_t` Hash value (see `fio_siphash`) to
134
- * perform a lookup in the HashMap, which is slightly faster than the other
135
- * variations.
136
- *
137
- * Returns -1 on type error or if the object never existed.
138
- */
139
- int fiobj_hash_delete2(FIOBJ hash, uint64_t key_hash);
140
-
141
- /**
142
- * Returns a temporary handle to the object associated with the Symbol,
143
- * FIOBJ_INVALID if none.
144
- */
145
- FIOBJ fiobj_hash_get(const FIOBJ hash, FIOBJ key);
146
-
147
- /**
148
- * Returns a temporary handle to the object associated hashed key value.
149
- *
150
- * This function takes a `uint64_t` Hash value (see `fio_siphash`) to
151
- * perform a lookup in the HashMap, which is slightly faster than the other
152
- * variations.
153
- *
154
- * Returns FIOBJ_INVALID if no object is associated with this hashed key value.
155
- */
156
- FIOBJ fiobj_hash_get2(const FIOBJ hash, uint64_t key_hash);
157
-
158
- /**
159
- * Returns 1 if the key (Symbol) exists in the Hash, even if it's value is NULL.
160
- */
161
- int fiobj_hash_haskey(const FIOBJ hash, FIOBJ key);
162
-
163
- /**
164
- * Empties the Hash.
165
- */
166
- void fiobj_hash_clear(const FIOBJ hash);
167
-
168
- #if DEBUG
169
- void fiobj_test_hash(void);
170
- #endif
171
-
172
- #ifdef __cplusplus
173
- } /* extern "C" */
174
- #endif
175
-
176
- #endif