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.
- checksums.yaml +4 -4
- data/.clang-format +15 -0
- data/.rspec +1 -0
- data/.yardopts +1 -3
- data/CHANGELOG.md +132 -12
- data/Gemfile +5 -7
- data/LICENSE.txt +1 -1
- data/README.md +147 -671
- data/Rakefile +9 -16
- data/examples/chatroom.nru +9 -0
- data/examples/client +74 -0
- data/examples/config-hello.nru +9 -0
- data/examples/config-hello.ru +11 -0
- data/examples/config-hijack.ru +13 -0
- data/examples/config-shootout.ru +43 -0
- data/examples/config.nru +120 -0
- data/examples/config.rb +37 -0
- data/examples/config.ru +42 -53
- data/examples/fake +24 -0
- data/examples/hello_neorack +137 -0
- data/examples/routes.nru +29 -0
- data/examples/routes.ru +42 -0
- data/exe/iodine +218 -258
- data/ext/iodine/extconf.rb +27 -100
- data/ext/iodine/fio-stl.h +128336 -0
- data/ext/iodine/fio-stl.md +26396 -0
- data/ext/iodine/iodine.c +213 -1393
- data/ext/iodine/iodine.h +250 -55
- data/ext/iodine/iodine_arg_helper.h +329 -0
- data/ext/iodine/iodine_caller.h +234 -25
- data/ext/iodine/iodine_cli.h +434 -0
- data/ext/iodine/iodine_compression.h +312 -0
- data/ext/iodine/iodine_connection.h +3484 -34
- data/ext/iodine/iodine_core.h +363 -0
- data/ext/iodine/iodine_crypto.h +1441 -0
- data/ext/iodine/iodine_defer.h +225 -4
- data/ext/iodine/iodine_json.h +738 -4
- data/ext/iodine/iodine_listener.h +263 -0
- data/ext/iodine/iodine_log.h +297 -0
- data/ext/iodine/iodine_minimap.h +543 -0
- data/ext/iodine/iodine_mustache.h +461 -4
- data/ext/iodine/iodine_pubsub_eng.h +729 -0
- data/ext/iodine/iodine_pubsub_history.h +547 -0
- data/ext/iodine/iodine_pubsub_msg.h +228 -0
- data/ext/iodine/iodine_redis.h +322 -0
- data/ext/iodine/iodine_store.h +418 -16
- data/ext/iodine/iodine_threads.h +279 -0
- data/ext/iodine/iodine_tls.h +515 -6
- data/ext/iodine/iodine_utils.h +923 -0
- data/iodine.gemspec +37 -42
- data/lib/iodine/benchmark.rb +1690 -0
- data/lib/iodine/documentation.rb +3085 -0
- data/lib/iodine/version.rb +17 -1
- data/lib/iodine.rb +54 -255
- data/logo.svg +36 -0
- data/mustache.md +55 -0
- data/sig/iodine.rbs +4 -0
- metadata +58 -184
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
- data/.github/workflows/ruby.yml +0 -42
- data/.gitignore +0 -20
- data/LIMITS.md +0 -41
- data/SPEC-PubSub-Draft.md +0 -159
- data/SPEC-WebSocket-Draft.md +0 -239
- data/bin/console +0 -22
- data/bin/info.md +0 -353
- data/bin/mustache_bench.rb +0 -100
- data/bin/poc/Gemfile.lock +0 -23
- data/bin/poc/README.md +0 -37
- data/bin/poc/config.ru +0 -66
- data/bin/poc/gemfile +0 -1
- data/bin/poc/www/index.html +0 -57
- data/examples/async_task.ru +0 -92
- data/examples/bates/README.md +0 -3
- data/examples/bates/config.ru +0 -342
- data/examples/bates/david+bold.pdf +0 -0
- data/examples/bates/public/drop-pdf.png +0 -0
- data/examples/bates/public/index.html +0 -600
- data/examples/echo.ru +0 -59
- data/examples/etag.ru +0 -16
- data/examples/hello.ru +0 -29
- data/examples/pubsub_engine.ru +0 -81
- data/examples/rack3.ru +0 -12
- data/examples/redis.ru +0 -70
- data/examples/shootout.ru +0 -73
- data/examples/sub-protocols.ru +0 -90
- data/examples/tcp_client.rb +0 -66
- data/examples/x-sendfile.ru +0 -14
- data/ext/iodine/fio.c +0 -11995
- data/ext/iodine/fio.h +0 -6371
- data/ext/iodine/fio_cli.c +0 -431
- data/ext/iodine/fio_cli.h +0 -189
- data/ext/iodine/fio_json_parser.h +0 -688
- data/ext/iodine/fio_siphash.c +0 -157
- data/ext/iodine/fio_siphash.h +0 -37
- data/ext/iodine/fio_tls.h +0 -129
- data/ext/iodine/fio_tls_missing.c +0 -649
- data/ext/iodine/fio_tls_openssl.c +0 -1106
- data/ext/iodine/fio_tmpfile.h +0 -50
- data/ext/iodine/fiobj.h +0 -44
- data/ext/iodine/fiobj4fio.h +0 -21
- data/ext/iodine/fiobj_ary.c +0 -333
- data/ext/iodine/fiobj_ary.h +0 -139
- data/ext/iodine/fiobj_data.c +0 -1187
- data/ext/iodine/fiobj_data.h +0 -167
- data/ext/iodine/fiobj_hash.c +0 -409
- data/ext/iodine/fiobj_hash.h +0 -176
- data/ext/iodine/fiobj_json.c +0 -622
- data/ext/iodine/fiobj_json.h +0 -68
- data/ext/iodine/fiobj_mem.h +0 -71
- data/ext/iodine/fiobj_mustache.c +0 -317
- data/ext/iodine/fiobj_mustache.h +0 -62
- data/ext/iodine/fiobj_numbers.c +0 -344
- data/ext/iodine/fiobj_numbers.h +0 -127
- data/ext/iodine/fiobj_str.c +0 -433
- data/ext/iodine/fiobj_str.h +0 -172
- data/ext/iodine/fiobject.c +0 -620
- data/ext/iodine/fiobject.h +0 -655
- data/ext/iodine/hpack.h +0 -1923
- data/ext/iodine/http.c +0 -2743
- data/ext/iodine/http.h +0 -1002
- data/ext/iodine/http1.c +0 -910
- data/ext/iodine/http1.h +0 -29
- data/ext/iodine/http1_parser.h +0 -878
- data/ext/iodine/http_internal.c +0 -1279
- data/ext/iodine/http_internal.h +0 -237
- data/ext/iodine/http_mime_parser.h +0 -350
- data/ext/iodine/iodine_caller.c +0 -230
- data/ext/iodine/iodine_connection.c +0 -941
- data/ext/iodine/iodine_defer.c +0 -420
- data/ext/iodine/iodine_fiobj2rb.h +0 -120
- data/ext/iodine/iodine_helpers.c +0 -282
- data/ext/iodine/iodine_helpers.h +0 -12
- data/ext/iodine/iodine_http.c +0 -1181
- data/ext/iodine/iodine_http.h +0 -23
- data/ext/iodine/iodine_json.c +0 -302
- data/ext/iodine/iodine_mustache.c +0 -567
- data/ext/iodine/iodine_pubsub.c +0 -580
- data/ext/iodine/iodine_pubsub.h +0 -26
- data/ext/iodine/iodine_rack_io.c +0 -273
- data/ext/iodine/iodine_rack_io.h +0 -20
- data/ext/iodine/iodine_store.c +0 -146
- data/ext/iodine/iodine_tcp.c +0 -346
- data/ext/iodine/iodine_tcp.h +0 -13
- data/ext/iodine/iodine_tls.c +0 -261
- data/ext/iodine/mustache_parser.h +0 -1546
- data/ext/iodine/redis_engine.c +0 -957
- data/ext/iodine/redis_engine.h +0 -79
- data/ext/iodine/resp_parser.h +0 -317
- data/ext/iodine/websocket_parser.h +0 -506
- data/ext/iodine/websockets.c +0 -743
- data/ext/iodine/websockets.h +0 -185
- data/lib/iodine/connection.rb +0 -61
- data/lib/iodine/json.rb +0 -42
- data/lib/iodine/mustache.rb +0 -113
- data/lib/iodine/pubsub.rb +0 -55
- data/lib/iodine/rack_utils.rb +0 -43
- data/lib/iodine/tls.rb +0 -16
- data/lib/rack/handler/iodine.rb +0 -33
- data/logo.png +0 -0
data/ext/iodine/fiobj_hash.h
DELETED
|
@@ -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
|