couchbase 3.0.0.alpha.4 → 3.0.0.alpha.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/fetch-stats +19 -0
- data/bin/init-cluster +24 -24
- data/bin/jenkins/build-extension +35 -0
- data/bin/jenkins/install-dependencies +47 -0
- data/bin/jenkins/test-with-cbdyncluster +58 -0
- data/couchbase.gemspec +27 -1
- data/examples/subdocument.rb +2 -2
- data/ext/build_version.hxx.in +1 -1
- data/ext/couchbase/cluster.hxx +41 -40
- data/ext/couchbase/couchbase.cxx +174 -61
- data/ext/couchbase/io/dns_message.hxx +3 -6
- data/ext/couchbase/io/http_session.hxx +31 -26
- data/ext/couchbase/io/{session_manager.hxx → http_session_manager.hxx} +3 -3
- data/ext/couchbase/io/mcbp_message.hxx +19 -2
- data/ext/couchbase/io/mcbp_session.hxx +89 -47
- data/ext/couchbase/operations/command.hxx +18 -7
- data/ext/couchbase/operations/document_analytics.hxx +5 -6
- data/ext/couchbase/operations/document_decrement.hxx +2 -1
- data/ext/couchbase/operations/document_exists.hxx +2 -1
- data/ext/couchbase/operations/document_get.hxx +2 -1
- data/ext/couchbase/operations/document_get_and_lock.hxx +2 -1
- data/ext/couchbase/operations/document_get_and_touch.hxx +2 -1
- data/ext/couchbase/operations/document_get_projected.hxx +2 -1
- data/ext/couchbase/operations/document_increment.hxx +2 -1
- data/ext/couchbase/operations/document_insert.hxx +2 -1
- data/ext/couchbase/operations/document_lookup_in.hxx +21 -1
- data/ext/couchbase/operations/document_mutate_in.hxx +44 -2
- data/ext/couchbase/operations/document_query.hxx +6 -7
- data/ext/couchbase/operations/document_remove.hxx +2 -1
- data/ext/couchbase/operations/document_replace.hxx +2 -1
- data/ext/couchbase/operations/document_search.hxx +3 -2
- data/ext/couchbase/operations/document_touch.hxx +2 -1
- data/ext/couchbase/operations/document_unlock.hxx +2 -1
- data/ext/couchbase/operations/document_upsert.hxx +2 -1
- data/ext/couchbase/operations/document_view.hxx +2 -1
- data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
- data/ext/couchbase/protocol/client_opcode.hxx +7 -3
- data/ext/couchbase/protocol/client_response.hxx +1 -1
- data/ext/couchbase/protocol/cmd_hello.hxx +10 -0
- data/ext/couchbase/protocol/cmd_lookup_in.hxx +1 -0
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +53 -5
- data/ext/couchbase/version.hxx +1 -1
- data/ext/extconf.rb +1 -1
- data/lib/couchbase/bucket.rb +3 -0
- data/lib/couchbase/cluster.rb +5 -0
- data/lib/couchbase/collection.rb +18 -6
- data/lib/couchbase/collection_options.rb +50 -7
- data/lib/couchbase/errors.rb +2 -2
- data/lib/couchbase/subdoc.rb +80 -19
- data/lib/couchbase/version.rb +1 -1
- metadata +7 -705
- data/ext/third_party/asio/asio/src/examples/cpp03/Makefile.am +0 -251
- data/ext/third_party/asio/asio/src/examples/cpp03/allocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/allocation/server.cpp +0 -285
- data/ext/third_party/asio/asio/src/examples/cpp03/buffers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/buffers/reference_counted.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_client.cpp +0 -177
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_message.hpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/chat_server.cpp +0 -249
- data/ext/third_party/asio/asio/src/examples/cpp03/chat/posix_chat_client.cpp +0 -204
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/async_tcp_echo_server.cpp +0 -137
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/async_udp_echo_server.cpp +0 -92
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_tcp_echo_server.cpp +0 -79
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp03/echo/blocking_udp_echo_server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/daemon.cpp +0 -190
- data/ext/third_party/asio/asio/src/examples/cpp03/fork/process_per_connection.cpp +0 -161
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/async_client.cpp +0 -204
- data/ext/third_party/asio/asio/src/examples/cpp03/http/client/sync_client.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_1K.html +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_2K.html +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_4K.html +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp03/http/doc_root/data_8K.html +0 -175
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection.cpp +0 -99
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection.hpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection_manager.cpp +0 -38
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/connection_manager.hpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/main.cpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/server.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server/server.hpp +0 -69
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/connection.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/connection.hpp +0 -75
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/io_context_pool.cpp +0 -69
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/io_context_pool.hpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/main.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/server.cpp +0 -77
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server2/server.hpp +0 -68
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/connection.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/connection.hpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/main.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_handler.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/request_parser.hpp +0 -95
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/server.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server3/server.hpp +0 -70
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/file_handler.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/file_handler.hpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/main.cpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/mime_types.cpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/reply.cpp +0 -256
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request.hpp +0 -46
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request_parser.cpp +0 -226
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/request_parser.hpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/server.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/http/server4/server.hpp +0 -73
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/icmp_header.hpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/ipv4_header.hpp +0 -102
- data/ext/third_party/asio/asio/src/examples/cpp03/icmp/ping.cpp +0 -163
- data/ext/third_party/asio/asio/src/examples/cpp03/invocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/invocation/prioritised_handlers.cpp +0 -171
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/daytime_client.cpp +0 -44
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/daytime_server.cpp +0 -51
- data/ext/third_party/asio/asio/src/examples/cpp03/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp03/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/examples/cpp03/local/connect_pair.cpp +0 -141
- data/ext/third_party/asio/asio/src/examples/cpp03/local/iostream_client.cpp +0 -62
- data/ext/third_party/asio/asio/src/examples/cpp03/local/stream_client.cpp +0 -61
- data/ext/third_party/asio/asio/src/examples/cpp03/local/stream_server.cpp +0 -141
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/receiver.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp03/multicast/sender.cpp +0 -98
- data/ext/third_party/asio/asio/src/examples/cpp03/nonblocking/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/nonblocking/third_party_lib.cpp +0 -240
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/client.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/protocol.hpp +0 -156
- data/ext/third_party/asio/asio/src/examples/cpp03/porthopper/server.cpp +0 -187
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/client.cpp +0 -125
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/connection.hpp +0 -188
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/server.cpp +0 -123
- data/ext/third_party/asio/asio/src/examples/cpp03/serialization/stock.hpp +0 -50
- data/ext/third_party/asio/asio/src/examples/cpp03/services/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/services/basic_logger.hpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp03/services/daytime_client.cpp +0 -97
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger.hpp +0 -24
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger_service.cpp +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/services/logger_service.hpp +0 -145
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/socks4.hpp +0 -144
- data/ext/third_party/asio/asio/src/examples/cpp03/socks4/sync_client.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/.gitignore +0 -12
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/echo_server.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp03/spawn/parallel_grep.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/README +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/ca.pem +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/client.cpp +0 -157
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/dh2048.pem +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/server.cpp +0 -170
- data/ext/third_party/asio/asio/src/examples/cpp03/ssl/server.pem +0 -71
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/async_tcp_client.cpp +0 -311
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_tcp_client.cpp +0 -191
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_token_tcp_client.cpp +0 -200
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/blocking_udp_client.cpp +0 -154
- data/ext/third_party/asio/asio/src/examples/cpp03/timeouts/server.cpp +0 -433
- data/ext/third_party/asio/asio/src/examples/cpp03/timers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/timers/time_t_timer.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime1/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime1/client.cpp +0 -57
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime2/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime2/server.cpp +0 -50
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime3/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime3/server.cpp +0 -119
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime4/client.cpp +0 -52
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime5/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime5/server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime6/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime6/server.cpp +0 -89
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime7/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime7/server.cpp +0 -160
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/daytime_dox.txt +0 -500
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/index_dox.txt +0 -48
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer1/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer1/timer.cpp +0 -24
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer2/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer2/timer.cpp +0 -29
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer3/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer3/timer.cpp +0 -43
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer4/timer.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer5/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer5/timer.cpp +0 -80
- data/ext/third_party/asio/asio/src/examples/cpp03/tutorial/timer_dox.txt +0 -378
- data/ext/third_party/asio/asio/src/examples/cpp03/windows/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp03/windows/transmit_file.cpp +0 -177
- data/ext/third_party/asio/asio/src/examples/cpp11/Makefile.am +0 -161
- data/ext/third_party/asio/asio/src/examples/cpp11/allocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/allocation/server.cpp +0 -255
- data/ext/third_party/asio/asio/src/examples/cpp11/buffers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/buffers/reference_counted.cpp +0 -122
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_client.cpp +0 -167
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_message.hpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/chat/chat_server.cpp +0 -227
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/async_tcp_echo_server.cpp +0 -114
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/async_udp_echo_server.cpp +0 -82
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_client.cpp +0 -55
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_tcp_echo_server.cpp +0 -74
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_client.cpp +0 -58
- data/ext/third_party/asio/asio/src/examples/cpp11/echo/blocking_udp_echo_server.cpp +0 -52
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/.gitignore +0 -5
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/actor.cpp +0 -286
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/bank_account_1.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/bank_account_2.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/fork_join.cpp +0 -328
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/pipeline.cpp +0 -299
- data/ext/third_party/asio/asio/src/examples/cpp11/executors/priority_scheduler.cpp +0 -174
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/daemon.cpp +0 -189
- data/ext/third_party/asio/asio/src/examples/cpp11/fork/process_per_connection.cpp +0 -162
- data/ext/third_party/asio/asio/src/examples/cpp11/futures/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/futures/daytime_client.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/handler_tracking/custom_tracking.hpp +0 -201
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection.hpp +0 -79
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection_manager.cpp +0 -40
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/connection_manager.hpp +0 -48
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/header.hpp +0 -28
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/main.cpp +0 -43
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/mime_types.cpp +0 -45
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/mime_types.hpp +0 -27
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/reply.cpp +0 -255
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/reply.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request.hpp +0 -34
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_handler.cpp +0 -121
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_handler.hpp +0 -47
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_parser.cpp +0 -315
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/request_parser.hpp +0 -96
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/server.cpp +0 -94
- data/ext/third_party/asio/asio/src/examples/cpp11/http/server/server.hpp +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp11/invocation/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/invocation/prioritised_handlers.cpp +0 -202
- data/ext/third_party/asio/asio/src/examples/cpp11/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/examples/cpp11/local/connect_pair.cpp +0 -129
- data/ext/third_party/asio/asio/src/examples/cpp11/local/iostream_client.cpp +0 -61
- data/ext/third_party/asio/asio/src/examples/cpp11/local/stream_client.cpp +0 -60
- data/ext/third_party/asio/asio/src/examples/cpp11/local/stream_server.cpp +0 -121
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/receiver.cpp +0 -88
- data/ext/third_party/asio/asio/src/examples/cpp11/multicast/sender.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp11/nonblocking/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/nonblocking/third_party_lib.cpp +0 -212
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_1.cpp +0 -113
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_2.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_3.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_4.cpp +0 -207
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_5.cpp +0 -243
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_6.cpp +0 -302
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_7.cpp +0 -222
- data/ext/third_party/asio/asio/src/examples/cpp11/operations/composed_8.cpp +0 -217
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/socks4.hpp +0 -143
- data/ext/third_party/asio/asio/src/examples/cpp11/socks4/sync_client.cpp +0 -93
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/.gitignore +0 -12
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/echo_server.cpp +0 -111
- data/ext/third_party/asio/asio/src/examples/cpp11/spawn/parallel_grep.cpp +0 -84
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/README +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/ca.pem +0 -49
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/client.cpp +0 -165
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/dh2048.pem +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/server.cpp +0 -143
- data/ext/third_party/asio/asio/src/examples/cpp11/ssl/server.pem +0 -71
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/async_tcp_client.cpp +0 -311
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_tcp_client.cpp +0 -192
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_token_tcp_client.cpp +0 -197
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/blocking_udp_client.cpp +0 -155
- data/ext/third_party/asio/asio/src/examples/cpp11/timeouts/server.cpp +0 -433
- data/ext/third_party/asio/asio/src/examples/cpp11/timers/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp11/timers/time_t_timer.cpp +0 -106
- data/ext/third_party/asio/asio/src/examples/cpp14/Makefile.am +0 -64
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/async_tcp_echo_server.cpp +0 -117
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/async_udp_echo_server.cpp +0 -83
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_client.cpp +0 -55
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_tcp_echo_server.cpp +0 -77
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_client.cpp +0 -59
- data/ext/third_party/asio/asio/src/examples/cpp14/echo/blocking_udp_echo_server.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/.gitignore +0 -6
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/actor.cpp +0 -281
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/async_1.cpp +0 -47
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/async_2.cpp +0 -68
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/bank_account_1.cpp +0 -54
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/bank_account_2.cpp +0 -53
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/fork_join.cpp +0 -327
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/pipeline.cpp +0 -294
- data/ext/third_party/asio/asio/src/examples/cpp14/executors/priority_scheduler.cpp +0 -173
- data/ext/third_party/asio/asio/src/examples/cpp14/iostreams/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/examples/cpp14/iostreams/http_client.cpp +0 -91
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/.gitignore +0 -10
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_1.cpp +0 -113
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_2.cpp +0 -131
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_3.cpp +0 -186
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_4.cpp +0 -201
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_5.cpp +0 -238
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_6.cpp +0 -298
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_7.cpp +0 -219
- data/ext/third_party/asio/asio/src/examples/cpp14/operations/composed_8.cpp +0 -212
- data/ext/third_party/asio/asio/src/examples/cpp17/Makefile.am +0 -8
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/chat_server.cpp +0 -225
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/echo_server.cpp +0 -76
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/echo_server_with_default.cpp +0 -78
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/range_based_for.cpp +0 -107
- data/ext/third_party/asio/asio/src/examples/cpp17/coroutines_ts/refactored_echo_server.cpp +0 -85
- data/ext/third_party/asio/asio/src/tests/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/Makefile.am +0 -432
- data/ext/third_party/asio/asio/src/tests/latency/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/latency/allocator.hpp +0 -52
- data/ext/third_party/asio/asio/src/tests/latency/high_res_clock.hpp +0 -53
- data/ext/third_party/asio/asio/src/tests/latency/tcp_client.cpp +0 -124
- data/ext/third_party/asio/asio/src/tests/latency/tcp_server.cpp +0 -114
- data/ext/third_party/asio/asio/src/tests/latency/udp_client.cpp +0 -104
- data/ext/third_party/asio/asio/src/tests/latency/udp_server.cpp +0 -125
- data/ext/third_party/asio/asio/src/tests/performance/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/tests/performance/client.cpp +0 -286
- data/ext/third_party/asio/asio/src/tests/performance/handler_allocator.hpp +0 -112
- data/ext/third_party/asio/asio/src/tests/performance/server.cpp +0 -233
- data/ext/third_party/asio/asio/src/tests/unit/.gitignore +0 -75
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/async_ops.hpp +0 -415
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/async_result.hpp +0 -94
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/gettable_socket_option.hpp +0 -54
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/io_control_command.hpp +0 -32
- data/ext/third_party/asio/asio/src/tests/unit/archetypes/settable_socket_option.hpp +0 -49
- data/ext/third_party/asio/asio/src/tests/unit/associated_allocator.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/associated_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/async_result.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/awaitable.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_datagram_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_deadline_timer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_raw_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_seq_packet_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_serial_port.cpp +0 -26
- data/ext/third_party/asio/asio/src/tests/unit/basic_signal_set.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_socket_acceptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_stream_socket.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_streambuf.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/basic_waitable_timer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/bind_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/buffer.cpp +0 -830
- data/ext/third_party/asio/asio/src/tests/unit/buffered_read_stream.cpp +0 -338
- data/ext/third_party/asio/asio/src/tests/unit/buffered_stream.cpp +0 -364
- data/ext/third_party/asio/asio/src/tests/unit/buffered_write_stream.cpp +0 -353
- data/ext/third_party/asio/asio/src/tests/unit/buffers_iterator.cpp +0 -292
- data/ext/third_party/asio/asio/src/tests/unit/co_spawn.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/completion_condition.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/compose.cpp +0 -185
- data/ext/third_party/asio/asio/src/tests/unit/connect.cpp +0 -1190
- data/ext/third_party/asio/asio/src/tests/unit/coroutine.cpp +0 -112
- data/ext/third_party/asio/asio/src/tests/unit/deadline_timer.cpp +0 -392
- data/ext/third_party/asio/asio/src/tests/unit/defer.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/detached.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/dispatch.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/error.cpp +0 -89
- data/ext/third_party/asio/asio/src/tests/unit/execution_context.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/executor_work_guard.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/generic/.gitignore +0 -14
- data/ext/third_party/asio/asio/src/tests/unit/generic/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/generic/datagram_protocol.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/generic/raw_protocol.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/generic/seq_packet_protocol.cpp +0 -205
- data/ext/third_party/asio/asio/src/tests/unit/generic/stream_protocol.cpp +0 -248
- data/ext/third_party/asio/asio/src/tests/unit/high_resolution_timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/io_context.cpp +0 -362
- data/ext/third_party/asio/asio/src/tests/unit/io_context_strand.cpp +0 -325
- data/ext/third_party/asio/asio/src/tests/unit/ip/.gitignore +0 -27
- data/ext/third_party/asio/asio/src/tests/unit/ip/address.cpp +0 -144
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_entry.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_iterator.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/basic_resolver_query.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/host_name.cpp +0 -55
- data/ext/third_party/asio/asio/src/tests/unit/ip/icmp.cpp +0 -577
- data/ext/third_party/asio/asio/src/tests/unit/ip/multicast.cpp +0 -363
- data/ext/third_party/asio/asio/src/tests/unit/ip/network_v4.cpp +0 -314
- data/ext/third_party/asio/asio/src/tests/unit/ip/network_v6.cpp +0 -238
- data/ext/third_party/asio/asio/src/tests/unit/ip/resolver_query_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ip/tcp.cpp +0 -1346
- data/ext/third_party/asio/asio/src/tests/unit/ip/udp.cpp +0 -673
- data/ext/third_party/asio/asio/src/tests/unit/ip/unicast.cpp +0 -171
- data/ext/third_party/asio/asio/src/tests/unit/ip/v6_only.cpp +0 -135
- data/ext/third_party/asio/asio/src/tests/unit/is_read_buffered.cpp +0 -129
- data/ext/third_party/asio/asio/src/tests/unit/is_write_buffered.cpp +0 -129
- data/ext/third_party/asio/asio/src/tests/unit/local/.gitignore +0 -13
- data/ext/third_party/asio/asio/src/tests/unit/local/basic_endpoint.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/local/connect_pair.cpp +0 -76
- data/ext/third_party/asio/asio/src/tests/unit/local/datagram_protocol.cpp +0 -242
- data/ext/third_party/asio/asio/src/tests/unit/local/stream_protocol.cpp +0 -219
- data/ext/third_party/asio/asio/src/tests/unit/packaged_task.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/placeholders.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/.gitignore +0 -14
- data/ext/third_party/asio/asio/src/tests/unit/posix/basic_descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/basic_stream_descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/descriptor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/descriptor_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/posix/stream_descriptor.cpp +0 -183
- data/ext/third_party/asio/asio/src/tests/unit/post.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/read.cpp +0 -4997
- data/ext/third_party/asio/asio/src/tests/unit/read_at.cpp +0 -7502
- data/ext/third_party/asio/asio/src/tests/unit/read_until.cpp +0 -1658
- data/ext/third_party/asio/asio/src/tests/unit/redirect_error.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/serial_port.cpp +0 -173
- data/ext/third_party/asio/asio/src/tests/unit/serial_port_base.cpp +0 -99
- data/ext/third_party/asio/asio/src/tests/unit/signal_set.cpp +0 -95
- data/ext/third_party/asio/asio/src/tests/unit/socket_base.cpp +0 -650
- data/ext/third_party/asio/asio/src/tests/unit/ssl/.gitignore +0 -15
- data/ext/third_party/asio/asio/src/tests/unit/ssl/context.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/context_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/error.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/host_name_verification.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/rfc2818_verification.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ssl/stream.cpp +0 -191
- data/ext/third_party/asio/asio/src/tests/unit/ssl/stream_base.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/steady_timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/strand.cpp +0 -263
- data/ext/third_party/asio/asio/src/tests/unit/streambuf.cpp +0 -62
- data/ext/third_party/asio/asio/src/tests/unit/system_context.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/system_executor.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/system_timer.cpp +0 -399
- data/ext/third_party/asio/asio/src/tests/unit/this_coro.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/thread.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/time_traits.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/ts/.gitignore +0 -17
- data/ext/third_party/asio/asio/src/tests/unit/ts/buffer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/executor.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/internet.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/io_context.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/net.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/netfwd.cpp +0 -33
- data/ext/third_party/asio/asio/src/tests/unit/ts/socket.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/ts/timer.cpp +0 -30
- data/ext/third_party/asio/asio/src/tests/unit/unit_test.hpp +0 -175
- data/ext/third_party/asio/asio/src/tests/unit/use_awaitable.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/use_future.cpp +0 -670
- data/ext/third_party/asio/asio/src/tests/unit/uses_executor.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/wait_traits.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/.gitignore +0 -18
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_object_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_overlapped_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_random_access_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/basic_stream_handle.cpp +0 -25
- data/ext/third_party/asio/asio/src/tests/unit/windows/object_handle.cpp +0 -130
- data/ext/third_party/asio/asio/src/tests/unit/windows/overlapped_handle.cpp +0 -26
- data/ext/third_party/asio/asio/src/tests/unit/windows/overlapped_ptr.cpp +0 -107
- data/ext/third_party/asio/asio/src/tests/unit/windows/random_access_handle.cpp +0 -155
- data/ext/third_party/asio/asio/src/tests/unit/windows/stream_handle.cpp +0 -148
- data/ext/third_party/asio/asio/src/tests/unit/write.cpp +0 -4904
- data/ext/third_party/asio/asio/src/tests/unit/write_at.cpp +0 -7563
- data/ext/third_party/asio/asio/src/tools/handlerviz.pl +0 -299
- data/ext/third_party/gsl/tests/CMakeLists.txt +0 -267
- data/ext/third_party/gsl/tests/CMakeLists.txt.in +0 -14
- data/ext/third_party/gsl/tests/algorithm_tests.cpp +0 -227
- data/ext/third_party/gsl/tests/assertion_tests.cpp +0 -61
- data/ext/third_party/gsl/tests/at_tests.cpp +0 -135
- data/ext/third_party/gsl/tests/bounds_tests.cpp +0 -102
- data/ext/third_party/gsl/tests/byte_tests.cpp +0 -129
- data/ext/third_party/gsl/tests/multi_span_tests.cpp +0 -1866
- data/ext/third_party/gsl/tests/no_exception_ensure_tests.cpp +0 -48
- data/ext/third_party/gsl/tests/notnull_tests.cpp +0 -535
- data/ext/third_party/gsl/tests/owner_tests.cpp +0 -43
- data/ext/third_party/gsl/tests/span_compatibility_tests.cpp +0 -1021
- data/ext/third_party/gsl/tests/span_ext_tests.cpp +0 -360
- data/ext/third_party/gsl/tests/span_tests.cpp +0 -1244
- data/ext/third_party/gsl/tests/strict_notnull_tests.cpp +0 -190
- data/ext/third_party/gsl/tests/strided_span_tests.cpp +0 -790
- data/ext/third_party/gsl/tests/string_span_tests.cpp +0 -1217
- data/ext/third_party/gsl/tests/utils_tests.cpp +0 -129
- data/ext/third_party/http_parser/contrib/parsertrace.c +0 -157
- data/ext/third_party/http_parser/contrib/url_parser.c +0 -47
- data/ext/third_party/http_parser/fuzzers/fuzz_parser.c +0 -26
- data/ext/third_party/http_parser/fuzzers/fuzz_url.c +0 -14
- data/ext/third_party/json/contrib/nlohmann.cpp +0 -48
- data/ext/third_party/json/contrib/nlohmann/from_value.hpp +0 -62
- data/ext/third_party/json/contrib/nlohmann/json.hpp +0 -18928
- data/ext/third_party/json/contrib/nlohmann/to_value.hpp +0 -109
- data/ext/third_party/json/doc/Advanced-Use-Cases.md +0 -83
- data/ext/third_party/json/doc/Batteries-Included.md +0 -212
- data/ext/third_party/json/doc/Binding-Traits.md +0 -319
- data/ext/third_party/json/doc/Changelog.md +0 -31
- data/ext/third_party/json/doc/Common-Use-Cases.md +0 -148
- data/ext/third_party/json/doc/Design-Decisions.md +0 -36
- data/ext/third_party/json/doc/Events-Interface.md +0 -140
- data/ext/third_party/json/doc/Getting-Started.md +0 -19
- data/ext/third_party/json/doc/Instance-Sharing.md +0 -163
- data/ext/third_party/json/doc/Interoperability.md +0 -75
- data/ext/third_party/json/doc/Overview.md +0 -24
- data/ext/third_party/json/doc/Overview.png +0 -0
- data/ext/third_party/json/doc/Parser-Interface.md +0 -84
- data/ext/third_party/json/doc/README.md +0 -78
- data/ext/third_party/json/doc/Scratchpad.md +0 -25
- data/ext/third_party/json/doc/Type-Traits.md +0 -364
- data/ext/third_party/json/doc/Types.png +0 -0
- data/ext/third_party/json/doc/Value-Class.md +0 -525
- data/ext/third_party/json/src/example/json/CMakeLists.txt +0 -67
- data/ext/third_party/json/src/example/json/cbor_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/cbor_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_cplusplus.cpp +0 -249
- data/ext/third_party/json/src/example/json/jaxn_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/jaxn_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/json_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/msgpack_to_ubjson.cpp +0 -18
- data/ext/third_party/json/src/example/json/printf_doubles.cpp +0 -51
- data/ext/third_party/json/src/example/json/ubjson_to_cbor.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_msgpack.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_pretty_jaxn.cpp +0 -18
- data/ext/third_party/json/src/example/json/ubjson_to_pretty_json.cpp +0 -18
- data/ext/third_party/json/src/example/json/validate_event_order.cpp +0 -27
- data/ext/third_party/json/src/example/json/validate_integer.cpp +0 -56
- data/ext/third_party/json/src/perf/json/bench_mark.hpp +0 -43
- data/ext/third_party/json/src/perf/json/benchmark.cpp +0 -34
- data/ext/third_party/json/src/perf/json/parse_file.cpp +0 -17
- data/ext/third_party/json/src/perf/json/pretty_print_file.cpp +0 -19
- data/ext/third_party/json/src/perf/json/print_double.cpp +0 -34
- data/ext/third_party/json/src/perf/json/print_file.cpp +0 -19
- data/ext/third_party/json/src/perf/json/sizes.cpp +0 -24
- data/ext/third_party/json/src/perf/json/syntax_only.cpp +0 -27
- data/ext/third_party/json/src/test/json/CMakeLists.txt +0 -97
- data/ext/third_party/json/src/test/json/big_list_of_naughty_strings.cpp +0 -43
- data/ext/third_party/json/src/test/json/binding_array.cpp +0 -549
- data/ext/third_party/json/src/test/json/binding_factory.cpp +0 -265
- data/ext/third_party/json/src/test/json/binding_object.cpp +0 -208
- data/ext/third_party/json/src/test/json/binding_versions.cpp +0 -95
- data/ext/third_party/json/src/test/json/cbor.cpp +0 -149
- data/ext/third_party/json/src/test/json/cbor_parts_parser.cpp +0 -36
- data/ext/third_party/json/src/test/json/contrib_diff.cpp +0 -43
- data/ext/third_party/json/src/test/json/contrib_get.cpp +0 -42
- data/ext/third_party/json/src/test/json/contrib_patch_add.cpp +0 -75
- data/ext/third_party/json/src/test/json/contrib_patch_copy.cpp +0 -113
- data/ext/third_party/json/src/test/json/contrib_patch_move.cpp +0 -97
- data/ext/third_party/json/src/test/json/contrib_patch_remove.cpp +0 -85
- data/ext/third_party/json/src/test/json/contrib_patch_replace.cpp +0 -79
- data/ext/third_party/json/src/test/json/contrib_patch_test.cpp +0 -69
- data/ext/third_party/json/src/test/json/contrib_position.cpp +0 -48
- data/ext/third_party/json/src/test/json/contrib_reference.cpp +0 -44
- data/ext/third_party/json/src/test/json/contrib_schema.cpp +0 -132
- data/ext/third_party/json/src/test/json/contrib_traits.cpp +0 -258
- data/ext/third_party/json/src/test/json/double.cpp +0 -182
- data/ext/third_party/json/src/test/json/enable_implicit_constructor.cpp +0 -54
- data/ext/third_party/json/src/test/json/escape.cpp +0 -42
- data/ext/third_party/json/src/test/json/events_binary_to.cpp +0 -56
- data/ext/third_party/json/src/test/json/events_compare.cpp +0 -433
- data/ext/third_party/json/src/test/json/events_debug.cpp +0 -24
- data/ext/third_party/json/src/test/json/events_hash.cpp +0 -65
- data/ext/third_party/json/src/test/json/events_to_stream.cpp +0 -28
- data/ext/third_party/json/src/test/json/events_to_string.cpp +0 -25
- data/ext/third_party/json/src/test/json/include_json.cpp +0 -14
- data/ext/third_party/json/src/test/json/integer.cpp +0 -118
- data/ext/third_party/json/src/test/json/jaxn_ostream.cpp +0 -76
- data/ext/third_party/json/src/test/json/jaxn_parse.cpp +0 -239
- data/ext/third_party/json/src/test/json/jaxn_parts_parser.cpp +0 -220
- data/ext/third_party/json/src/test/json/json_ostream.cpp +0 -102
- data/ext/third_party/json/src/test/json/json_parse.cpp +0 -153
- data/ext/third_party/json/src/test/json/json_parts_parser.cpp +0 -124
- data/ext/third_party/json/src/test/json/json_pointer.cpp +0 -176
- data/ext/third_party/json/src/test/json/key_camel_case_to_snake_case.cpp +0 -38
- data/ext/third_party/json/src/test/json/key_snake_case_to_camel_case.cpp +0 -33
- data/ext/third_party/json/src/test/json/literal.cpp +0 -18
- data/ext/third_party/json/src/test/json/main.hpp +0 -20
- data/ext/third_party/json/src/test/json/make_events.hpp +0 -362
- data/ext/third_party/json/src/test/json/msgpack.cpp +0 -136
- data/ext/third_party/json/src/test/json/object_construction.cpp +0 -167
- data/ext/third_party/json/src/test/json/opaque_pointer.cpp +0 -192
- data/ext/third_party/json/src/test/json/operators.cpp +0 -494
- data/ext/third_party/json/src/test/json/optional.cpp +0 -79
- data/ext/third_party/json/src/test/json/public_base.cpp +0 -142
- data/ext/third_party/json/src/test/json/self_contained.cpp +0 -106
- data/ext/third_party/json/src/test/json/sha256.cpp +0 -38
- data/ext/third_party/json/src/test/json/string_view.cpp +0 -70
- data/ext/third_party/json/src/test/json/temporary_parsing.cpp +0 -339
- data/ext/third_party/json/src/test/json/test.hpp +0 -74
- data/ext/third_party/json/src/test/json/test_events.hpp +0 -250
- data/ext/third_party/json/src/test/json/test_types.hpp +0 -557
- data/ext/third_party/json/src/test/json/test_unhex.hpp +0 -42
- data/ext/third_party/json/src/test/json/type.cpp +0 -35
- data/ext/third_party/json/src/test/json/ubjson.cpp +0 -119
- data/ext/third_party/json/src/test/json/uri_fragment.cpp +0 -52
- data/ext/third_party/json/src/test/json/validate_event_interfaces.cpp +0 -177
- data/ext/third_party/json/src/test/json/validate_utf8.cpp +0 -37
- data/ext/third_party/json/src/test/json/value_access.cpp +0 -144
- data/ext/third_party/json/src/test/json/value_basics.cpp +0 -241
- data/ext/third_party/json/src/test/json/value_create.cpp +0 -372
- data/ext/third_party/json/src/test/json/value_ptr.cpp +0 -33
- data/ext/third_party/json/src/test/json/value_subscript.cpp +0 -89
- data/ext/third_party/json/src/test/json/with_arguments.cpp +0 -98
- data/ext/third_party/json/tests/blns.json +0 -496
- data/ext/third_party/json/tests/canada.json +0 -9
- data/ext/third_party/json/tests/citm_catalog.json +0 -50469
- data/ext/third_party/json/tests/draft4/additionalItems.json +0 -82
- data/ext/third_party/json/tests/draft4/additionalProperties.json +0 -88
- data/ext/third_party/json/tests/draft4/allOf.json +0 -112
- data/ext/third_party/json/tests/draft4/anyOf.json +0 -68
- data/ext/third_party/json/tests/draft4/default.json +0 -49
- data/ext/third_party/json/tests/draft4/definitions.json +0 -32
- data/ext/third_party/json/tests/draft4/dependencies.json +0 -113
- data/ext/third_party/json/tests/draft4/enum.json +0 -72
- data/ext/third_party/json/tests/draft4/items.json +0 -46
- data/ext/third_party/json/tests/draft4/maxItems.json +0 -28
- data/ext/third_party/json/tests/draft4/maxLength.json +0 -33
- data/ext/third_party/json/tests/draft4/maxProperties.json +0 -28
- data/ext/third_party/json/tests/draft4/maximum.json +0 -42
- data/ext/third_party/json/tests/draft4/minItems.json +0 -28
- data/ext/third_party/json/tests/draft4/minLength.json +0 -33
- data/ext/third_party/json/tests/draft4/minProperties.json +0 -28
- data/ext/third_party/json/tests/draft4/minimum.json +0 -42
- data/ext/third_party/json/tests/draft4/multipleOf.json +0 -60
- data/ext/third_party/json/tests/draft4/not.json +0 -96
- data/ext/third_party/json/tests/draft4/oneOf.json +0 -68
- data/ext/third_party/json/tests/draft4/optional/bignum.json +0 -107
- data/ext/third_party/json/tests/draft4/optional/format.json +0 -148
- data/ext/third_party/json/tests/draft4/optional/zeroTerminatedFloats.json +0 -15
- data/ext/third_party/json/tests/draft4/pattern.json +0 -34
- data/ext/third_party/json/tests/draft4/patternProperties.json +0 -110
- data/ext/third_party/json/tests/draft4/properties.json +0 -92
- data/ext/third_party/json/tests/draft4/ref.json +0 -179
- data/ext/third_party/json/tests/draft4/refRemote.json +0 -74
- data/ext/third_party/json/tests/draft4/required.json +0 -44
- data/ext/third_party/json/tests/draft4/type.json +0 -345
- data/ext/third_party/json/tests/draft4/uniqueItems.json +0 -79
- data/ext/third_party/json/tests/taocpp/binary.jaxn +0 -4
- data/ext/third_party/json/tests/taocpp/dateTime.json +0 -108
- data/ext/third_party/json/tests/taocpp/make_events.cbor +0 -0
- data/ext/third_party/json/tests/taocpp/number.json +0 -682
- data/ext/third_party/json/tests/taocpp/position.json +0 -8
- data/ext/third_party/json/tests/taocpp/schema.json +0 -378
- data/ext/third_party/json/tests/twitter.json +0 -15482
- data/ext/third_party/snappy/testdata/alice29.txt +0 -3609
- data/ext/third_party/snappy/testdata/asyoulik.txt +0 -4122
- data/ext/third_party/snappy/testdata/baddata1.snappy +0 -0
- data/ext/third_party/snappy/testdata/baddata2.snappy +0 -0
- data/ext/third_party/snappy/testdata/baddata3.snappy +0 -0
- data/ext/third_party/snappy/testdata/fireworks.jpeg +0 -0
- data/ext/third_party/snappy/testdata/geo.protodata +0 -0
- data/ext/third_party/snappy/testdata/html +0 -1
- data/ext/third_party/snappy/testdata/html_x_4 +0 -1
- data/ext/third_party/snappy/testdata/kppkn.gtb +0 -0
- data/ext/third_party/snappy/testdata/lcet10.txt +0 -7519
- data/ext/third_party/snappy/testdata/paper-100k.pdf +2 -600
- data/ext/third_party/snappy/testdata/plrabn12.txt +0 -10699
- data/ext/third_party/snappy/testdata/urls.10K +0 -10000
- data/ext/third_party/spdlog/bench/CMakeLists.txt +0 -25
- data/ext/third_party/spdlog/bench/async_bench.cpp +0 -179
- data/ext/third_party/spdlog/bench/bench.cpp +0 -238
- data/ext/third_party/spdlog/bench/formatter-bench.cpp +0 -80
- data/ext/third_party/spdlog/bench/latency.cpp +0 -166
- data/ext/third_party/spdlog/bench/utils.h +0 -34
- data/ext/third_party/spdlog/example/CMakeLists.txt +0 -23
- data/ext/third_party/spdlog/example/example.cpp +0 -282
- data/ext/third_party/spdlog/logos/jetbrains-variant-4.svg +0 -43
- data/ext/third_party/spdlog/scripts/extract_version.py +0 -17
- data/ext/third_party/spdlog/scripts/format.sh +0 -16
- data/ext/third_party/spdlog/tests/CMakeLists.txt +0 -70
- data/ext/third_party/spdlog/tests/catch.hpp +0 -15372
- data/ext/third_party/spdlog/tests/catch.license +0 -23
- data/ext/third_party/spdlog/tests/includes.h +0 -26
- data/ext/third_party/spdlog/tests/main.cpp +0 -2
- data/ext/third_party/spdlog/tests/test_async.cpp +0 -188
- data/ext/third_party/spdlog/tests/test_backtrace.cpp +0 -65
- data/ext/third_party/spdlog/tests/test_cfg.cpp +0 -93
- data/ext/third_party/spdlog/tests/test_create_dir.cpp +0 -80
- data/ext/third_party/spdlog/tests/test_daily_logger.cpp +0 -149
- data/ext/third_party/spdlog/tests/test_dup_filter.cpp +0 -88
- data/ext/third_party/spdlog/tests/test_errors.cpp +0 -118
- data/ext/third_party/spdlog/tests/test_eventlog.cpp +0 -71
- data/ext/third_party/spdlog/tests/test_file_helper.cpp +0 -102
- data/ext/third_party/spdlog/tests/test_file_logging.cpp +0 -98
- data/ext/third_party/spdlog/tests/test_fmt_helper.cpp +0 -86
- data/ext/third_party/spdlog/tests/test_macros.cpp +0 -60
- data/ext/third_party/spdlog/tests/test_misc.cpp +0 -271
- data/ext/third_party/spdlog/tests/test_mpmc_q.cpp +0 -106
- data/ext/third_party/spdlog/tests/test_pattern_formatter.cpp +0 -443
- data/ext/third_party/spdlog/tests/test_registry.cpp +0 -116
- data/ext/third_party/spdlog/tests/test_sink.h +0 -79
- data/ext/third_party/spdlog/tests/test_stdout_api.cpp +0 -98
- data/ext/third_party/spdlog/tests/test_systemd.cpp +0 -15
- data/ext/third_party/spdlog/tests/test_time_point.cpp +0 -36
- data/ext/third_party/spdlog/tests/utils.cpp +0 -125
- data/ext/third_party/spdlog/tests/utils.h +0 -18
@@ -1,75 +0,0 @@
|
|
1
|
-
# Interoperability
|
2
|
-
|
3
|
-
* [General Notes](#general-notes)
|
4
|
-
* [Specific Notes](#specific-notes)
|
5
|
-
* [JSON](#json)
|
6
|
-
* [JAXN](#jaxn)
|
7
|
-
* [CBOR](#cbor)
|
8
|
-
* [MsgPack](#msgpack)
|
9
|
-
* [UBJSON](#ubjson)
|
10
|
-
* [Unsupported Formats](#unsupported-formats)
|
11
|
-
|
12
|
-
## General Notes
|
13
|
-
|
14
|
-
The following properties and limitations are a consequence of the internal data model and apply to the internal representation as well as all data formats.
|
15
|
-
|
16
|
-
Numbers are stored and handled as `std::int64_t`, `std::uint64_t` or `double`, and most (all?) parsers will throw an exception when encountering a number that exceeds the combined range of these types.
|
17
|
-
|
18
|
-
For binary formats, floating-point values are always written as 64-bit `double`.
|
19
|
-
Decoding 16- and 32bit floating-point values, where defined, is of course supported.
|
20
|
-
|
21
|
-
All string values, and, for text-based formats, the entire Value representation, have to be valid UTF-8.
|
22
|
-
The binary format parsers can optionally trust the input which disables UTF-8 validation of strings.
|
23
|
-
|
24
|
-
The Value Class uses a `std::map` for Objects and does not support multiple occurrences of the same key.
|
25
|
-
The Events Interface processes keys individually and does not have this limitation.
|
26
|
-
|
27
|
-
## Specific Notes
|
28
|
-
|
29
|
-
The following properties and limitations are specific to the interaction with particular file formats.
|
30
|
-
|
31
|
-
### JSON
|
32
|
-
|
33
|
-
When serialising to JSON, Values that go beyond the JSON data model, i.e. binary data and non-finite floating point values, must be [transformed](Events-Interface.md#included-transformers) to something compatible with JSON.
|
34
|
-
|
35
|
-
### JAXN
|
36
|
-
|
37
|
-
* Work-in-progress...
|
38
|
-
|
39
|
-
### CBOR
|
40
|
-
|
41
|
-
CBOR allows arbitrary Values as keys in Objects, the data model of this library only supports strings.
|
42
|
-
The CBOR parsers throw an exception whey they encounter an Object key that is not a string.
|
43
|
-
|
44
|
-
Semantic tags are currently not supported, the CBOR parsers ignore and skip them.
|
45
|
-
|
46
|
-
The CBOR Parts Parser returns strings as `std::string`, rather than `tao::string_view`, in order to support multi-part indefinite length strings.
|
47
|
-
An alternative parser function `string_view()` only works for strings with a single top-level part and returns a `tao::string_view`.
|
48
|
-
|
49
|
-
### MsgPack
|
50
|
-
|
51
|
-
MsgPack only has Arrays and Objects that contain a count of the number of sub-values at the beginning.
|
52
|
-
The Events Consumers that encode MsgPack will throw an exception when either of the `begin_array()` or `begin_object()` functions is called without a size.
|
53
|
-
|
54
|
-
Extension types are currently not supported, the MsgPack parsers throw an exception when they encounter an extension type.
|
55
|
-
|
56
|
-
### UBJSON
|
57
|
-
|
58
|
-
* The No-Op value `N` is only supported as top-level padding.
|
59
|
-
* Does not currently encode strongly typed Arrays or Objects, except:
|
60
|
-
* Supports encoding and decoding of strongly typed Arrays of type `U` for binary data, and:
|
61
|
-
* Supports decoding of all Arrays and Objects, including with size and strongly typed.
|
62
|
-
|
63
|
-
## Unsupported Formats
|
64
|
-
|
65
|
-
The following JSON-esque formats are currently unsupported.
|
66
|
-
|
67
|
-
* BSON
|
68
|
-
* BJSON
|
69
|
-
* jsonb
|
70
|
-
* JSONx
|
71
|
-
* TOML
|
72
|
-
* YAML
|
73
|
-
* VelocyPack
|
74
|
-
|
75
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# Overview
|
2
|
-
|
3
|
-
The main parts of the JSON library are
|
4
|
-
|
5
|
-
* the [Value Class](Value-Class.md) to handle (extended) JSON data ([JAXN](https://github.com/stand-art/jaxn) data) in memory,
|
6
|
-
* the [Events Interface](Events-Interface.md) as universal adapter between different parts of the library (and other libraries), and
|
7
|
-
* the [Type Traits](Type-Traits.md) to control the interaction between C++ data types and the Value Class and Events Interface.
|
8
|
-
|
9
|
-
![Overview](Overview.png)
|
10
|
-
|
11
|
-
* The [Value Class](Value-Class.md) can be customised with [Type Traits](Type-Traits.md) and a [custom Base class](Advanced-Use-Cases.md#custom-base-class-for-values).
|
12
|
-
* The [Events Interface](Events-Interface.md) is used to convert the [Value Class](Value-Class.md) from and to external representations.
|
13
|
-
* One or more [Events Transformers](Events-Interface.md#included-transformers) can be used to modify, filter, ... Events and to send them to multiple Consumers.
|
14
|
-
* The [Type Traits](Type-Traits.md) are used to convert the [Value Class](Value-Class.md) from and to arbitrary C++ data types.
|
15
|
-
* The [Type Traits](Type-Traits.md) also generate Events, and thus external representations, directly from C++ data types, and
|
16
|
-
* are used to directly and efficiently parse external representations into arbitrary C++ data types.
|
17
|
-
|
18
|
-
![Types](Types.png)
|
19
|
-
|
20
|
-
* The [Value Class](Value-Class.md) can use views to strings and binary data to prevent memory allocations and copying.
|
21
|
-
* The [Value Class](Value-Class.md) can use pointers to other Value Class instances to re-use (parts of) other Values.
|
22
|
-
* The [Value Class](Value-Class.md) can use pointers to arbitrary objects (restricts the set of functions on the Value).
|
23
|
-
|
24
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
Binary file
|
@@ -1,84 +0,0 @@
|
|
1
|
-
# Parser Interface
|
2
|
-
|
3
|
-
*Work in progress*
|
4
|
-
|
5
|
-
This interface is used when parsing directly into a C++ data type (without using an intermediate Value) *and not* using the [Binding Traits Facilities](Type-Traits.md#binding-traits-facilities) to auto-generate the [Traits](Type-Traits.md).
|
6
|
-
|
7
|
-
The public interface of a parts parser, an object that unconditionally attempts to read parts of an encoded Value from the input that it was supplied in the constructor.
|
8
|
-
|
9
|
-
```c++
|
10
|
-
struct parts_parser
|
11
|
-
{
|
12
|
-
bool empty();
|
13
|
-
|
14
|
-
bool null(); // Returns 'false' when next value is not a JSON Null.
|
15
|
-
bool boolean();
|
16
|
-
|
17
|
-
string_t string(); // Returns std::string or tao::string_view.
|
18
|
-
binary_t binary(); // Returns std::vector< tao::byte > or tao::binary_view.
|
19
|
-
string_t key(); // Returns std::string or tao::string_view.
|
20
|
-
|
21
|
-
std::int64_t number_signed();
|
22
|
-
std::uint64_t number_unsigned();
|
23
|
-
double number_double();
|
24
|
-
|
25
|
-
unknown_1 begin_array();
|
26
|
-
void end_array( unknown_1& );
|
27
|
-
void element( unknown_1& );
|
28
|
-
bool element_or_end_array( unknown_1& ); // Returns 'false' at end of array.
|
29
|
-
|
30
|
-
unknown_2 begin_object();
|
31
|
-
void end_object( unknown_2& );
|
32
|
-
void member( unknown_2& );
|
33
|
-
bool member_or_end_object( unknown_2& ); // Returns 'false' at end of object.
|
34
|
-
|
35
|
-
void skip_value(); // Skips one complete value in the input, whatever it is.
|
36
|
-
|
37
|
-
unknown_3 mark(); // TODO: Explain, with reference to PEGTL markers and when/how to use them.
|
38
|
-
|
39
|
-
void throw_parse_error( TBD ) const; // TODO: Decide whether this is part of the public interface.
|
40
|
-
};
|
41
|
-
```
|
42
|
-
|
43
|
-
There are two patterns for how to use the Array and Object functions depending on whether the size is implicitly known by the code using the parser, or whether the code adapts to the size found in the parsed data.
|
44
|
-
|
45
|
-
In the following example we show the implicit form for Arrays, and the adaptive form for Objects, however both interfaces are available for both kinds of containers.
|
46
|
-
|
47
|
-
```c++
|
48
|
-
void implicit( parts_parser& p )
|
49
|
-
{
|
50
|
-
auto state = p.begin_array()
|
51
|
-
|
52
|
-
p.element( state ); // Throws when no further element available.
|
53
|
-
do_something_with( p.read_unsigned() ); // Or read some other value.
|
54
|
-
|
55
|
-
// ...read as many elements as desired...
|
56
|
-
|
57
|
-
p.end_array( state ); // Throws when not at end of array.
|
58
|
-
}
|
59
|
-
|
60
|
-
void adaptive( parts_parser& p )
|
61
|
-
{
|
62
|
-
auto state = p.begin_object();
|
63
|
-
|
64
|
-
while( !p.member_or_end_object( p ) ) {
|
65
|
-
const auto key = p.read_key();
|
66
|
-
const auto value = p.read_string(); // Or read some other value.
|
67
|
-
do_something_with( key, value );
|
68
|
-
}
|
69
|
-
}
|
70
|
-
```
|
71
|
-
|
72
|
-
The individual values of an Array or Object can of course themselves be Arrays or Objects.
|
73
|
-
|
74
|
-
Remember to **not** write `do_something_with( p.read_key(), p.read_double() )` because the order of evaluation of function arguments in C++ is not defined.
|
75
|
-
|
76
|
-
Additional functions for the CBOR parts parser that throw when they encounter an indefinite-length string.
|
77
|
-
|
78
|
-
```c++
|
79
|
-
tao::string_view string_view();
|
80
|
-
tao::binary_view binary_view();
|
81
|
-
tao::string_view key_view();
|
82
|
-
```
|
83
|
-
|
84
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,78 +0,0 @@
|
|
1
|
-
# taocpp/json Documentation
|
2
|
-
|
3
|
-
*Work-in-Progress - will be finished for 1.0 release*
|
4
|
-
|
5
|
-
* [Project](https://github.com/taocpp/json)
|
6
|
-
* [Overview](Overview.md)
|
7
|
-
* [Getting Started](Getting-Started.md)
|
8
|
-
* Installing and Using - TODO: Similar to PEGTL; merge with Getting Started?
|
9
|
-
* [Common Use Cases](Common-Use-Cases.md)
|
10
|
-
* [Include the right header](Common-Use-Cases.md#include-the-right-header)
|
11
|
-
* [Read any JSON file](Common-Use-Cases.md#read-any-json-file)
|
12
|
-
* [Parse any JSON string](Common-Use-Cases.md#parse-any-json-string)
|
13
|
-
* [Serialise a JSON Value to a string](Common-Use-Cases.md#serialise-a-json-value-to-a-string)
|
14
|
-
* [Serialise with base64 strings for binary data](Common-Use-Cases.md#serialise-with-base64-strings-for-binary-data)
|
15
|
-
* [Serialise a JSON Value to an ostream](Common-Use-Cases.md#serialise-a-json-value-to-an-ostream)
|
16
|
-
* [Create a Value with a JSON object](Common-Use-Cases.md#create-a-value-with-a-json-object)
|
17
|
-
* [Value Class](Value-Class.md)
|
18
|
-
* [Overview](Value-Class.md#overview)
|
19
|
-
* [Value and Data Types](Value-Class.md#value-and-data-types)
|
20
|
-
* [Creating Values](Value-Class.md#creating-values)
|
21
|
-
* [Accessing Values](Value-Class.md#accessing-values)
|
22
|
-
* [Manipulating Values](Value-Class.md#manipulating-values)
|
23
|
-
* [Container Functions](Value-Class.md#container-functions)
|
24
|
-
* [Comparing Values](Value-Class.md#comparing-values)
|
25
|
-
* [Type Traits](Type-Traits.md)
|
26
|
-
* [Overview](Type-Traits.md#overview)
|
27
|
-
* [Create JSON Value from (custom) type](Type-Traits.md#create-value-from-type)
|
28
|
-
* [Convert JSON Value into (custom) type](Type-Traits.md#convert-value-into-type)
|
29
|
-
* [Compare JSON Value to (custom) type](Type-Traits.md#compare-value-with-type)
|
30
|
-
* [Produce JSON Events from (custom) type](Type-Traits.md#produce-events-from-type)
|
31
|
-
* [Consume a (custom) type from a parser](Type-Traits.md#consume-type-from-parser)
|
32
|
-
* [Default Key for Objects](Type-Traits.md#default-key-for-objects)
|
33
|
-
* [Batteries Included](Type-Traits.md#batteries-included)
|
34
|
-
* [Binding Traits](Binding-Traits.md)
|
35
|
-
* [Types as Arrays](Binding-Traits.md#types-as-arrays)
|
36
|
-
* [Types as Objects](Binding-Traits.md#types-as-objects)
|
37
|
-
* [Polymorphic Factory](Binding-Traits.md#polymorphic-factory)
|
38
|
-
* [Multiple Versions](Binding-Traits.md#multiple-versions)
|
39
|
-
* [Events Interface](Events-Interface.md)
|
40
|
-
* [Overview](Events-Interface.md#overview)
|
41
|
-
* [Consumer Interface](Events-Interface.md#consumer-interface)
|
42
|
-
* [Arrays and Objects](Events-Interface.md#arrays-and-objects)
|
43
|
-
* [Reduced Interface](Events-Interface.md#reduced-interface)
|
44
|
-
* [Batteries Included](Events-Interface.md#batteries-included)
|
45
|
-
* [Batteries Included](Batteries-Included.md)
|
46
|
-
* [Default Traits](Batteries-Included.md#default-traits)
|
47
|
-
* [Additional Traits](Batteries-Included.md#additional-traits)
|
48
|
-
* [Binding Traits](Binding-Traits.md)
|
49
|
-
* [Events Producers](Batteries-Included.md#events-producers)
|
50
|
-
* [Events Consumers](Batteries-Included.md#events-consumers)
|
51
|
-
* [Events Transformers](Batteries-Included.md#events-transformers)
|
52
|
-
* [Convenience Functions](Batteries-Included.md#convenience-functions)
|
53
|
-
* [Conversion Utilities](Batteries-Included.md#conversion-utilities)
|
54
|
-
* [Advanced Use Cases](Advanced-Use-Cases.md)
|
55
|
-
* [Custom Base Class for Values](Advanced-Use-Cases.md#custom-base-class-for-values)
|
56
|
-
* [Annotate with filename and line number](Advanced-Use-Cases.md#annotate-with-filename-and-line-number)
|
57
|
-
* [Instance Sharing](Instance-Sharing.md)
|
58
|
-
* [String Views](Instance-Sharing.md#string-views)
|
59
|
-
* [Binary Views](Instance-Sharing.md#binary-views)
|
60
|
-
* [Value Pointers](Instance-Sharing.md#value-pointers)
|
61
|
-
* [Opaque Pointers](Instance-Sharing.md#opaque-pointers)
|
62
|
-
* [Self Contained](Instance-Sharing.md#self-contained)
|
63
|
-
* [Unsafe Functions](Instance-Sharing.md#unsafe-functions)
|
64
|
-
* [Interoperability](Interoperability.md)
|
65
|
-
* [General Notes](Interoperability.md#general-notes)
|
66
|
-
* [Specific Notes](Interoperability.md#specific-notes)
|
67
|
-
* [JSON](Interoperability.md#json)
|
68
|
-
* [JAXN](Interoperability.md#jaxn)
|
69
|
-
* [CBOR](Interoperability.md#cbor)
|
70
|
-
* [MsgPack](Interoperability.md#msgpack)
|
71
|
-
* [UBJSON](Interoperability.md#ubjson)
|
72
|
-
* [Unsupported Formats](Interoperability.md#unsupported-formats)
|
73
|
-
* [Parser Interface](Parser-Interface.md)
|
74
|
-
* [Design Decisions](Design-Decisions.md)
|
75
|
-
* [Scratchpad](Scratchpad.md)
|
76
|
-
* [Changelog](Changelog.md)
|
77
|
-
|
78
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# Scratchpad
|
2
|
-
|
3
|
-
TODO!
|
4
|
-
|
5
|
-
## JSON Pointer
|
6
|
-
|
7
|
-
###### `<tao/json/contrib/get.hpp>`
|
8
|
-
|
9
|
-
###### `<tao/json/contrib/patch.hpp>`
|
10
|
-
|
11
|
-
###### `<tao/json/contrib/refefence.hpp>`
|
12
|
-
|
13
|
-
###### `<tao/json/contrib/schema.hpp>`
|
14
|
-
|
15
|
-
## Still Need Description
|
16
|
-
|
17
|
-
* `events::apply`
|
18
|
-
* `events::basic_compare`
|
19
|
-
* `events::compare`
|
20
|
-
* `events::transformer`
|
21
|
-
* `nlohmann::from_value`
|
22
|
-
* `nlohmann::to_value`
|
23
|
-
* TODO: Anything missing?
|
24
|
-
|
25
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,364 +0,0 @@
|
|
1
|
-
# Type Traits
|
2
|
-
|
3
|
-
* [Overview](#overview)
|
4
|
-
* [Create JSON Value from (custom) type](#create-value-from-type)
|
5
|
-
* [Convert JSON Value into (custom) type](#convert-value-into-type)
|
6
|
-
* [Compare JSON Value to (custom) type](#compare-value-with-type)
|
7
|
-
* [Produce JSON Events from (custom) type](#produce-events-from-type)
|
8
|
-
* [Consume a (custom) type from a parser](#consume-type-from-parser)
|
9
|
-
* [Default Key for Objects](#default-key-for-objects)
|
10
|
-
* [Batteries Included](#batteries-included)
|
11
|
-
|
12
|
-
For brevity we will often write "the traits" instead of "the (corresponding/appropriate/whatever) specialisation of the traits class template".
|
13
|
-
|
14
|
-
## Overview
|
15
|
-
|
16
|
-
The class template passed as `Traits` template parameter, most prominently to `tao::json::basic_value<>`, controls the interaction between the JSON library and other C++ types.
|
17
|
-
|
18
|
-
The library includes the Type Traits class template `tao::json::traits<>` with [many specialisations](Batteries-Included.md#default-traits) that is used throughout the library as default.
|
19
|
-
A custom Traits class (more precisely: class template) can be used to change the behaviour of the default Traits, and/or to add support for new types.
|
20
|
-
|
21
|
-
* In the first case it is necessary to create a new Traits class template.
|
22
|
-
* In the second case it is also possible to (partially) specialise `tao::json::traits<>` for the new types.
|
23
|
-
|
24
|
-
As is common, for any type `T`, the Type Traits class template instantiated with `T` as template argument is used as Type Traits class for `T`.
|
25
|
-
|
26
|
-
The default Type Traits use a second template parameter that defaults to `void` to selective enable or disable a particular (partial) specialisation via SFINAE.
|
27
|
-
For this reason, any template that takes a Type Traits class template as template parameter should be templated over `template< typename... > class Traits`, rather than the more obvious `template< typename > class Traits`.
|
28
|
-
|
29
|
-
We will use the following class in the example implementations of the Type Traits functions.
|
30
|
-
|
31
|
-
```c++
|
32
|
-
struct my_type
|
33
|
-
{
|
34
|
-
std::string title;
|
35
|
-
std::vector< int > values;
|
36
|
-
};
|
37
|
-
```
|
38
|
-
|
39
|
-
While we could simply specialise `tao::json::traits<>` for `my_type`, we will prefer to define a new Type Traits class, an approach that also works when redefining Traits for types that the default Type Traits already cover.
|
40
|
-
|
41
|
-
```c++
|
42
|
-
template< typename T >
|
43
|
-
struct my_traits
|
44
|
-
: public tao::json::traits< T >
|
45
|
-
{
|
46
|
-
// Inherit the default traits by default,
|
47
|
-
// otherwise we would have to implement
|
48
|
-
// specialisations for ALL types (that we
|
49
|
-
// want to use).
|
50
|
-
};
|
51
|
-
```
|
52
|
-
|
53
|
-
For convenience, we might add a `using` for the JSON Value class with the new Type Traits.
|
54
|
-
|
55
|
-
```c++
|
56
|
-
using my_value = tao::json::basic_value< my_traits >;
|
57
|
-
```
|
58
|
-
|
59
|
-
Note that all Type Traits functions are `static` member functions, and that, depending on the use cases, it is not necessary for a traits specialisation to implement *all* traits functions.
|
60
|
-
|
61
|
-
**For many common use cases it is not necessary to manually implement the Traits functions, instead the [Binding Traits](Binding-Traits.md) can be used to generate them automatically.**
|
62
|
-
|
63
|
-
## Create Value from Type
|
64
|
-
|
65
|
-
The traits' `assign()` functions are used to create Value instances from any type `T`. We will use the implementation of `assign()` in the specialisation of `my_traits` for `my_type` as example.
|
66
|
-
|
67
|
-
```c++
|
68
|
-
template<>
|
69
|
-
struct my_traits< my_type >
|
70
|
-
{
|
71
|
-
template< template< typename... > class Traits >
|
72
|
-
static void assign( tao::json::basic_value< Traits >& v, const my_type& t )
|
73
|
-
{
|
74
|
-
v = {
|
75
|
-
{ "title", t.title },
|
76
|
-
{ "values", t.values }
|
77
|
-
};
|
78
|
-
}
|
79
|
-
};
|
80
|
-
```
|
81
|
-
|
82
|
-
The first thing to note is that `assign()` is "templated over" the traits class template.
|
83
|
-
If it weren't templated over the traits, the `assign()` function would only work with `my_traits`, but not when using a third traits class template that inherits from `my_traits` by default without changing the specialisation for `my_type`.
|
84
|
-
|
85
|
-
For greater flexibility and future compatibility, we recommend to *always* template over the traits, regardless of whether creating other traits class templates based on the traits in question is planned or not.
|
86
|
-
|
87
|
-
The second point of interest is that we have chosen to encode `my_type` as JSON Object with two sub-values, one for the title and one for the values, using the [initialiser-list syntax for Objects as explained in the documentation of the Value class](Value-Class.md).
|
88
|
-
|
89
|
-
Nothing more needs to be done for `t.title` and `t.values` since the default traits already know how to create Values from `std::string`, `std::vector<>`, and `int`, and therefore also `std::vector< int >`.
|
90
|
-
The default traits use JSON Arrays for vectors, lists and sets.
|
91
|
-
|
92
|
-
Given the above traits specialisation for `my_type` it is now possible to write all of the following.
|
93
|
-
|
94
|
-
```c++
|
95
|
-
const my_type a = make_my_type();
|
96
|
-
const my_value v1 = a;
|
97
|
-
const my_value v2 = {
|
98
|
-
{ "it's my type", a }
|
99
|
-
};
|
100
|
-
|
101
|
-
const std::list< my_type > l = make_list_of_my_type();
|
102
|
-
const my_value v3 = l;
|
103
|
-
```
|
104
|
-
|
105
|
-
As a performance optimisation it is possible to provide an additional overload of `assign()` for the case that the source `my_type` instance is `move()`-able.
|
106
|
-
The moving `assign()` is of course only beneficial when there is data that can actually be moved, like `title` in the example.
|
107
|
-
The vector `values` can not be moved to the JSON Value since it is a `std::vector< int >`, not one of the types used to represent data in a JSON Value.
|
108
|
-
|
109
|
-
```c++
|
110
|
-
template<>
|
111
|
-
struct my_traits< my_type >
|
112
|
-
{
|
113
|
-
template< template< typename... > class Traits >
|
114
|
-
static void assign( tao::json::basic_value< Traits >& v, my_type&& t )
|
115
|
-
{
|
116
|
-
v = {
|
117
|
-
{ "title", std::move( t.title ) },
|
118
|
-
{ "values", t.values }
|
119
|
-
};
|
120
|
-
}
|
121
|
-
};
|
122
|
-
```
|
123
|
-
|
124
|
-
There are of course other possibilities for the JSON structure for `my_type`, for example it would be possible to create a flat JSON Array with the title as first element followed by the integers from `values`.
|
125
|
-
In the following we will assume the implementation from above.
|
126
|
-
|
127
|
-
## Convert Value into Type
|
128
|
-
|
129
|
-
The traits' `as()` and/or `to()` functions are used to convert Values into any type `T`.
|
130
|
-
|
131
|
-
If not particularly awkward or slow it is recommended to implement `as()`, which returns the `T`, rather than `to()`.
|
132
|
-
|
133
|
-
The user-facing functions `tao::json::basic_value<>::as()/to()` are all available, regardless of which function(s) the traits implement, subject to the following limitation:
|
134
|
-
|
135
|
-
* `T` needs to be copy-assignable to use the front-end `to()` when the traits only implement `as()`.
|
136
|
-
* `T` needs to be default-constructible to use the front-end `as()` when the traits only implement `to()`.
|
137
|
-
|
138
|
-
Here both functions are shown even though a real-world traits class will typically only implement either one of them.
|
139
|
-
|
140
|
-
```c++
|
141
|
-
template<>
|
142
|
-
struct my_traits< my_type >
|
143
|
-
{
|
144
|
-
template< template< typename... > class Traits >
|
145
|
-
static void to( const tao::json::basic_value< Traits >& v, my_type& d )
|
146
|
-
{
|
147
|
-
const auto& object = v.get_object();
|
148
|
-
d.title = v.at( "title" ).template as< std::string >();
|
149
|
-
d.values = v.at( "values" ).template as< std::vector< int > >();
|
150
|
-
}
|
151
|
-
|
152
|
-
template< template< typename... > class Traits >
|
153
|
-
static my_type as( const tao::json::basic_value< Traits >& v )
|
154
|
-
{
|
155
|
-
my_type result;
|
156
|
-
const auto& object = v.get_object();
|
157
|
-
result.title = v.at( "title" ).template as< std::string >();
|
158
|
-
result.values = v.at( "values" ).template as< std::vector< int > >();
|
159
|
-
return result;
|
160
|
-
}
|
161
|
-
};
|
162
|
-
```
|
163
|
-
|
164
|
-
The `as<>()` and `to()` functions again template over the traits class, just like `assign()`, and for the same reasons.
|
165
|
-
|
166
|
-
The employed `get_object()`, `as<>()`, `to<>()` and `at()` functions will all throw an exception when something goes wrong, i.e. when the accessed JSON Value is not of the correct type, or when the indexed key does not exist.
|
167
|
-
|
168
|
-
Instead of manually calling the Traits' `as()`- and `to()`-functions it is recommended to use one of the following to create a `T` from a Value.
|
169
|
-
|
170
|
-
```c++
|
171
|
-
const tao::json::value v = ...;
|
172
|
-
const my_type mt = v.as< my_type >();
|
173
|
-
```
|
174
|
-
|
175
|
-
Or alternatively:
|
176
|
-
|
177
|
-
```c++
|
178
|
-
const tao::json::value v = ...;
|
179
|
-
my_type mt;
|
180
|
-
v.to( mt );
|
181
|
-
```
|
182
|
-
|
183
|
-
In this example no error is thrown when the top-level JSON Object contains additional keys beyond `"title"` and `"values"`.
|
184
|
-
|
185
|
-
## Compare Value with Type
|
186
|
-
|
187
|
-
The comparison operators `==`, `!=`, `<`, `<=`, `>` and `>=` in namespace `tao::json` that compare instances of `basic_value<>` with other types *ideally* use the traits' `equal()`, `greater_than()` and `less_than()` functions.
|
188
|
-
|
189
|
-
That is "ideally", because as long as the traits for the type in question have an `assign()` function, the comparison operators will still work -- by creating a temporary JSON Value and then compare the two Values.
|
190
|
-
In other words, adding `equal()`, `greater_than()` and `less_than()` functions to traits is "only" a performance optimisation, it prevents the creation of the temporary JSON Value from the non-Value argument.
|
191
|
-
|
192
|
-
The `equal()` function has to check whether an instance `d` of the type for which the traits are specialised is equal to a Value.
|
193
|
-
This check should be consistent with the other traits functions, i.e. the check should return `true` if and only if comparing the Value to a Value created with the traits' `assign()` function (or the traits' `produce()` function together with `tao::json::events::to_value`) would also return `true`.
|
194
|
-
|
195
|
-
```c++
|
196
|
-
template<>
|
197
|
-
struct my_traits< my_type >
|
198
|
-
{
|
199
|
-
template< template< typename... > class Traits >
|
200
|
-
static bool equal( const tao::json::basic_value< Traits >& v, const my_type& d ) noexcept
|
201
|
-
{
|
202
|
-
if( !v.is_object() ) {
|
203
|
-
return false;
|
204
|
-
}
|
205
|
-
const auto& o = v.get_object();
|
206
|
-
const auto i = o.find( "title" );
|
207
|
-
const auto j = o.find( "values" );
|
208
|
-
return ( o.size() == 2 )
|
209
|
-
&& ( i != o.end() )
|
210
|
-
&& ( i->second == d.title )
|
211
|
-
&& ( j != o.end() )
|
212
|
-
&& ( j->second == d.values );
|
213
|
-
}
|
214
|
-
};
|
215
|
-
```
|
216
|
-
|
217
|
-
The other two functions, `less_than()` and `greater_than()`, have the same signature, and need to return whether the first argument is less than, or greater than the second, respectively.
|
218
|
-
The same consistency conditions as for `equal()` should be applied.
|
219
|
-
When all traits functions are consistent which each other then the following assertions will never fail, regardless of the values of `m` and `d`.
|
220
|
-
|
221
|
-
```c++
|
222
|
-
const my_value m = some_value();
|
223
|
-
|
224
|
-
const my_type d = make_my_type();
|
225
|
-
const my_value v = d;
|
226
|
-
|
227
|
-
assert( ( d == m ) == ( v == m ) );
|
228
|
-
assert( ( d != m ) == ( v != m ) );
|
229
|
-
assert( ( d < m ) == ( v < m ) );
|
230
|
-
assert( ( d <= m ) == ( v <= m ) );
|
231
|
-
assert( ( d > m ) == ( v > m ) );
|
232
|
-
assert( ( d >= m ) == ( v >= m ) );
|
233
|
-
|
234
|
-
// When the traits have a produce() function:
|
235
|
-
|
236
|
-
const auto e = tao::json::produce::to_value< my_traits >( d );
|
237
|
-
|
238
|
-
assert( ( d == m ) == ( e == m ) );
|
239
|
-
assert( ( d != m ) == ( e != m ) );
|
240
|
-
assert( ( d < m ) == ( e < m ) );
|
241
|
-
assert( ( d <= m ) == ( e <= m ) );
|
242
|
-
assert( ( d > m ) == ( e > m ) );
|
243
|
-
assert( ( d >= m ) == ( e >= m ) );
|
244
|
-
```
|
245
|
-
|
246
|
-
## Produce Events from Type
|
247
|
-
|
248
|
-
Producing [JSON Events](Events-Interface.md) from a type is performed by the type's Traits' `produce()` function.
|
249
|
-
|
250
|
-
Implementing the `produce()` function is only required for some optimisation techniques, namely:
|
251
|
-
|
252
|
-
1. To directly serialise any type to JSON or another supported external representation format.
|
253
|
-
2. To create an [Opaque pointer JSON Value](Advanced-Use-Cases.md#instance-sharing-with-opaque-pointers) instead of using building the JSON data structure for a type.
|
254
|
-
|
255
|
-
The `produce()` function receives an arbitrary [Events Consumer](Events-Interface.md) as first argument, and can call any [Events Functions](Events-Interface.md) on it.
|
256
|
-
|
257
|
-
It should/must again template over their traits, and, since there is no `basic_value<>` instance from which the traits can be derived, the traits `produce()` functions and the functions in namespace `tao::json::produce` need to be called with the traits class template as explicit template parameter.
|
258
|
-
|
259
|
-
```c++
|
260
|
-
template<>
|
261
|
-
struct my_traits< my_type >
|
262
|
-
{
|
263
|
-
template< template< typename... > class Traits, typename Consumer >
|
264
|
-
static void produce( Consumer& c, const my_type& d )
|
265
|
-
{
|
266
|
-
c.begin_object( 2 );
|
267
|
-
c.key( "title" );
|
268
|
-
tao::json::produce< Traits >( c, d.title );
|
269
|
-
c.member();
|
270
|
-
c.key( "values" );
|
271
|
-
tao::json::produce< Traits >( c, d.values );
|
272
|
-
c.member();
|
273
|
-
c.end_object( 2 );
|
274
|
-
}
|
275
|
-
};
|
276
|
-
```
|
277
|
-
|
278
|
-
For the first use case mentioned above, the following code snippet directly and efficiently generates the JSON representation of a `my_type` instance without creating any JSON Values along the way.
|
279
|
-
|
280
|
-
```c++
|
281
|
-
const my_type d = make_my_type();
|
282
|
-
const std::string json = tao::json::produce::to_string< my_traits >( d );
|
283
|
-
```
|
284
|
-
|
285
|
-
As with the `assign()` functions, and depending on which Events Consumers are used, it might be beneficial to provide a moving-version of `produce()` that moves strings and binary data.
|
286
|
-
|
287
|
-
## Consume Type from Parser
|
288
|
-
|
289
|
-
Directly creating an instance of a type from a parser is performed by the type's Traits' `consume()` function.
|
290
|
-
|
291
|
-
Unlike all other similar parts of the library the `consume()` interface is *not* based on the Events Interface!
|
292
|
-
|
293
|
-
Instead ... TODO: Explain pull-interface of the parts parsers.
|
294
|
-
|
295
|
-
Similar to the Traits' `as()`-function there are two possibilities on how to implement this function, one that returns the value, and one that takes a mutable reference as second argument.
|
296
|
-
Again it is not *necessary* to implement both functions, either one is sufficient, and when all is equal preference should be given to the version that returns the value.
|
297
|
-
|
298
|
-
```c++
|
299
|
-
template<>
|
300
|
-
struct my_traits< my_type >
|
301
|
-
{
|
302
|
-
template< template< typename... > class Traits, typename Producer >
|
303
|
-
static void consume( Producer& p, my_type& mt )
|
304
|
-
{
|
305
|
-
// Easier to use the Binding Facilities to generate this function...
|
306
|
-
}
|
307
|
-
|
308
|
-
template< template< typename... > class Traits, typename Producer >
|
309
|
-
static my_type consume( Producer& p )
|
310
|
-
{
|
311
|
-
// ...and not implement this one.
|
312
|
-
}
|
313
|
-
};
|
314
|
-
```
|
315
|
-
|
316
|
-
Creating instances of `my_type` can then be achieved by manually calling the Traits' `consume()` function, or more conveniently by using one of the global `consume()` functions.
|
317
|
-
Both the one- and two-argument version of the global `consume()` function can be called regardless of which version the Traits implement.
|
318
|
-
|
319
|
-
```c++
|
320
|
-
const std::string json = ...;
|
321
|
-
tao::json::parts_parser pp( json, "source" );
|
322
|
-
const my_type mt = tao::json::consume< my_type, Traits >( pp );
|
323
|
-
```
|
324
|
-
|
325
|
-
Or alternatively:
|
326
|
-
|
327
|
-
```c++
|
328
|
-
const std::string json = ...;
|
329
|
-
tao::json::parts_parser pp( json, "source" );
|
330
|
-
my_type mt;
|
331
|
-
tao::json::consume< Traits>( pp, mt );
|
332
|
-
```
|
333
|
-
|
334
|
-
## Default Key for Objects
|
335
|
-
|
336
|
-
The use of default keys is [shown in the section on creating Values](Value-Class.md#creating-values).
|
337
|
-
|
338
|
-
The default key for a type is a compile-time string that needs to be declared in the Traits specialisation.
|
339
|
-
|
340
|
-
```c++
|
341
|
-
template<>
|
342
|
-
struct my_traits< my_type >
|
343
|
-
{
|
344
|
-
TAO_JSON_DEFAULT_KEY( "fraggle" );
|
345
|
-
};
|
346
|
-
```
|
347
|
-
|
348
|
-
Further uses of the default key are for object bindings and the polymorphic object factory (TODO: Links).
|
349
|
-
|
350
|
-
The default Traits supplied with the library do not define a default key for any type.
|
351
|
-
|
352
|
-
## Batteries Included
|
353
|
-
|
354
|
-
* [Default Traits](Batteries-Included.md#default-traits)
|
355
|
-
* [Additional Traits](Batteries-Included.md#additional-traits)
|
356
|
-
|
357
|
-
The Type Traits correctly work with nested/composed types.
|
358
|
-
Given that `std::string`, `int`, `std::tuple`, `std::vector`, `std::shared_ptr`, and `std::map` with `std::string` as `key_type` are supported (when including the additional Traits), so is for example the following type:
|
359
|
-
|
360
|
-
```c++
|
361
|
-
std::map< std::string, std::shared_ptr< std::vector< std::tuple< int, int, int > > >
|
362
|
-
```
|
363
|
-
|
364
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|