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,109 +0,0 @@
|
|
1
|
-
// Copyright (c) 2016-2018 Dr. Colin Hirsch and Daniel Frey
|
2
|
-
// Please see LICENSE for license or visit https://github.com/taocpp/json/
|
3
|
-
|
4
|
-
#ifndef TAO_JSON_INCLUDE_CONTRIB_NLOHMANN_TO_VALUE_HPP
|
5
|
-
#define TAO_JSON_INCLUDE_CONTRIB_NLOHMANN_TO_VALUE_HPP
|
6
|
-
|
7
|
-
#include <cstdint>
|
8
|
-
#include <string>
|
9
|
-
#include <utility>
|
10
|
-
#include <vector>
|
11
|
-
|
12
|
-
namespace tao::json::nlohmann
|
13
|
-
{
|
14
|
-
// Events consumer to build an nlohmann/json value.
|
15
|
-
|
16
|
-
template< typename Value >
|
17
|
-
class to_value
|
18
|
-
{
|
19
|
-
private:
|
20
|
-
std::vector< Value > stack_;
|
21
|
-
std::vector< std::string > keys_;
|
22
|
-
|
23
|
-
public:
|
24
|
-
Value value;
|
25
|
-
|
26
|
-
void null()
|
27
|
-
{
|
28
|
-
value = nullptr;
|
29
|
-
}
|
30
|
-
|
31
|
-
void boolean( const bool v )
|
32
|
-
{
|
33
|
-
value = v;
|
34
|
-
}
|
35
|
-
|
36
|
-
void number( const std::int64_t v )
|
37
|
-
{
|
38
|
-
value = v;
|
39
|
-
}
|
40
|
-
|
41
|
-
void number( const std::uint64_t v )
|
42
|
-
{
|
43
|
-
value = v;
|
44
|
-
}
|
45
|
-
|
46
|
-
void number( const double v )
|
47
|
-
{
|
48
|
-
value = v;
|
49
|
-
}
|
50
|
-
|
51
|
-
void string( const std::string& v )
|
52
|
-
{
|
53
|
-
value = v;
|
54
|
-
}
|
55
|
-
|
56
|
-
void string( std::string&& v )
|
57
|
-
{
|
58
|
-
value = std::move( v );
|
59
|
-
}
|
60
|
-
|
61
|
-
// array
|
62
|
-
void begin_array()
|
63
|
-
{
|
64
|
-
stack_.push_back( Value::array() );
|
65
|
-
}
|
66
|
-
|
67
|
-
void element()
|
68
|
-
{
|
69
|
-
stack_.back().push_back( std::move( value ) );
|
70
|
-
}
|
71
|
-
|
72
|
-
void end_array()
|
73
|
-
{
|
74
|
-
value = std::move( stack_.back() );
|
75
|
-
stack_.pop_back();
|
76
|
-
}
|
77
|
-
|
78
|
-
// object
|
79
|
-
void begin_object()
|
80
|
-
{
|
81
|
-
stack_.push_back( Value::object() );
|
82
|
-
}
|
83
|
-
|
84
|
-
void key( const std::string& v )
|
85
|
-
{
|
86
|
-
keys_.push_back( v );
|
87
|
-
}
|
88
|
-
|
89
|
-
void key( std::string&& v )
|
90
|
-
{
|
91
|
-
keys_.push_back( std::move( v ) );
|
92
|
-
}
|
93
|
-
|
94
|
-
void member()
|
95
|
-
{
|
96
|
-
stack_.back().push_back( typename Value::object_t::value_type( std::move( keys_.back() ), std::move( value ) ) );
|
97
|
-
keys_.pop_back();
|
98
|
-
}
|
99
|
-
|
100
|
-
void end_object()
|
101
|
-
{
|
102
|
-
value = std::move( stack_.back() );
|
103
|
-
stack_.pop_back();
|
104
|
-
}
|
105
|
-
};
|
106
|
-
|
107
|
-
} // namespace tao::json::nlohmann
|
108
|
-
|
109
|
-
#endif
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# Advanced Use Cases
|
2
|
-
|
3
|
-
* [Custom Base Class for Values](#custom-base-class-for-values)
|
4
|
-
* [Annotate with filename and line number](#annotate-with-filename-and-line-number)
|
5
|
-
|
6
|
-
## Custom Base Class for Values
|
7
|
-
|
8
|
-
By default, `tao::json::basic_value<>` uses `tao::json::internal::empty_base`, an empty dummy class, as public base class.
|
9
|
-
This can be changed to a custom public base class, allowing applications to add arbitrary custom member variables or member functions to every single JSON Value instance, including, recursively, all nested sub-values contained in Arrays and Objects.
|
10
|
-
|
11
|
-
To set up a custom public base class it is necessary to use custom [traits](Type-Traits.md) where the specialisation for `void` defines a different `public_base`.
|
12
|
-
|
13
|
-
```c++
|
14
|
-
template< typename T >
|
15
|
-
struct my_traits
|
16
|
-
: tao::json::traits< T >
|
17
|
-
{};
|
18
|
-
|
19
|
-
struct my_base
|
20
|
-
{};
|
21
|
-
|
22
|
-
template<>
|
23
|
-
struct my_traits< void >
|
24
|
-
: tao::json::traits< void >
|
25
|
-
{
|
26
|
-
template< typename > using public_base = my_base;
|
27
|
-
};
|
28
|
-
```
|
29
|
-
|
30
|
-
Note that `public_base` is a template, and `tao::json::value< my_traits >` will use `my_traits< void >::public_base< tao::json::value< my_traits > >` as public base class.
|
31
|
-
This design pattern is also known as CRTP, the *curiously recurring template pattern*.
|
32
|
-
|
33
|
-
In the example `my_base` is not a template and the template parameter to `my_traits< void >::public_base<>` is ignored, however it is possible and to let `my_base` use the `tao::json::value< my_traits >` template parameter when necessary.
|
34
|
-
|
35
|
-
The library preserves the contents of the public base class, and otherwise ignores it.
|
36
|
-
More precisely:
|
37
|
-
|
38
|
-
* The base is copied when the value is copy constructed or assigned.
|
39
|
-
* The base is moved when the value is move constructed or assigned.
|
40
|
-
* Otherwise the base is default initialised when constructing a value.
|
41
|
-
* The base is ignored by the default comparison operators.
|
42
|
-
|
43
|
-
Access to the public base class instance of a value is given through two accessor functions named `public_base()`.
|
44
|
-
|
45
|
-
```c++
|
46
|
-
template< template< typename... > class Traits >
|
47
|
-
Traits< void >::public_base< basic_value< Traits > >& basic_value< Traits >::public_base() noexcept;
|
48
|
-
|
49
|
-
template< template< typename... > class Traits, class Base >
|
50
|
-
const Traits< void >::public_base< basic_value< Traits > >& basic_value< Traits, Base >::public_base() const noexcept;
|
51
|
-
```
|
52
|
-
|
53
|
-
The application can use the public base for whatever it wants, for example to add filenames and line numbers to parsed values as [shown below](#annotate-with-filename-and-line-number), or to add new public member functions to all values.
|
54
|
-
|
55
|
-
## Annotate with filename and line number
|
56
|
-
|
57
|
-
A natural use case for [custom base classes for Values](#custom-base-class-for-values) is to add the filename, line number, and starting byte position to every (sub-)value during parsing.
|
58
|
-
|
59
|
-
The two functions `tao::json::from_file_with_position()` and `tao::json::basic_from_file_with_position()` in `include/tao/json/contrib/position.hpp` do just that and can be directly used, or customised as required.
|
60
|
-
|
61
|
-
The public base class of type `tao::json::position`, and a helper to add the base class definition to any traits class template, is defined in the same header.
|
62
|
-
The following example shows how to read a filename, and, if the file contains a JSON array, prints the line numbers each array element starts on.
|
63
|
-
|
64
|
-
```c++
|
65
|
-
#include <iostream>
|
66
|
-
|
67
|
-
#include <tao/json.hpp>
|
68
|
-
#include <tao/json/contrib/position.hpp>
|
69
|
-
|
70
|
-
void example( const std::string& filename )
|
71
|
-
{
|
72
|
-
const auto v = tao::json::from_file_with_position( filename );
|
73
|
-
if( v.is_array() ) {
|
74
|
-
for( const auto& i : v.get_array() ) {
|
75
|
-
std::cout << "element on line " << i.base().line << std::endl;
|
76
|
-
}
|
77
|
-
}
|
78
|
-
}
|
79
|
-
```
|
80
|
-
|
81
|
-
Writing a recursive function that takes any value with positions and prints the types and line numbers of all sub-values is left as an exercise to the reader.
|
82
|
-
|
83
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,212 +0,0 @@
|
|
1
|
-
# Batteries Included
|
2
|
-
|
3
|
-
* [Default Traits](#default-traits)
|
4
|
-
* [Additional Traits](#additional-traits)
|
5
|
-
* [Binding Traits](Binding-Traits.md)
|
6
|
-
* [Events Producers](#events-producers)
|
7
|
-
* [Events Consumers](#events-consumers)
|
8
|
-
* [Events Transformers](#events-transformers)
|
9
|
-
* [Convenience Functions](#convenience-functions)
|
10
|
-
* [Conversion Utilities](#conversion-utilities)
|
11
|
-
|
12
|
-
## Default Traits
|
13
|
-
|
14
|
-
The included Type Traits contain (partial) specialisations for the following types.
|
15
|
-
|
16
|
-
| Specialised for | Remarks |
|
17
|
-
| -------------- | -------- |
|
18
|
-
| `null_t` | |
|
19
|
-
| `bool` | |
|
20
|
-
| *signed integers* | |
|
21
|
-
| *unsigned integers* | |
|
22
|
-
| `double`, `float` | |
|
23
|
-
| `empty_binary_t` | |
|
24
|
-
| `empty_array_t` | |
|
25
|
-
| `empty_object_t` | |
|
26
|
-
| `std::string` | |
|
27
|
-
| `tao::string_view` | |
|
28
|
-
| `const char*` | |
|
29
|
-
| `const std::string&` | |
|
30
|
-
| `std::vector< tao::byte >` | |
|
31
|
-
| `tao::binary_view` | |
|
32
|
-
| `const std::vector< tao::byte >&` | |
|
33
|
-
| `std::vector< basic_value< Traits, Base > >` | Corresponds to JSON Array. |
|
34
|
-
| `basic_value< Traits, Base >*` | Creates Value Pointer; must not be `nullptr`. |
|
35
|
-
| `const basic_value< Traits, Base >*` | Creates Value Pointer; must not be `nullptr`. |
|
36
|
-
| `std::map< std::string, basic_value< Traits, Base > >` | Corresponds to JSON Object. |
|
37
|
-
| `tao::optional< T >` | Empty optional corresponds to JSON Null. |
|
38
|
-
|
39
|
-
## Additional Traits
|
40
|
-
|
41
|
-
The following additional specialisations are part of various additional traits classes.
|
42
|
-
These classes are defined in various headers in `tao/json/contrib`.
|
43
|
-
It is also possible to include `tao/json/contrib/traits.hpp` which adds appropriate specialisations to the default traits `tao::json::traits<>`.
|
44
|
-
|
45
|
-
| Implementation for | Header |
|
46
|
-
| -------------- | -------- |
|
47
|
-
| `std::array< T, N >` | `tao/json/contrib/array_traits.hpp` |
|
48
|
-
| `std::deque< T >` | `tao/json/contrib/deque_traits.hpp` |
|
49
|
-
| `std::list< T >` | `tao/json/contrib/list_traits.hpp` |
|
50
|
-
| `std::map< std::string, T >` | `tao/json/contrib/map_traits.hpp` |
|
51
|
-
| `std::pair< U, V >` | `tao/json/contrib/pair_traits.hpp` |
|
52
|
-
| `std::set< T >` | `tao/json/contrib/set_traits.hpp` |
|
53
|
-
| `std::shared_ptr< T >` | `tao/json/contrib/shared_ptr_traits.hpp` |
|
54
|
-
| `std::tuple< Ts... >` | `tao/json/contrib/tuple_traits.hpp` |
|
55
|
-
| `std::unique_ptr< T >` | `tao/json/contrib/unique_ptr_traits.hpp` |
|
56
|
-
| `std::unordered_map< std::string, T >` | `tao/json/contrib/unordered_map_traits.hpp` |
|
57
|
-
| `std::unordered_set< T >` | `tao/json/contrib/unordered_set_traits.hpp` |
|
58
|
-
| `std::vector< T >` | `tao/json/contrib/vector_traits.hpp` |
|
59
|
-
|
60
|
-
## Events Producers
|
61
|
-
|
62
|
-
Events Producers are functions that take some input from which they generate Events function calls on a provided Consumer.
|
63
|
-
|
64
|
-
**The common namespace prefix `tao::json::` is omitted.**
|
65
|
-
|
66
|
-
| Producer | Description |
|
67
|
-
| -------- | ----------- |
|
68
|
-
| `events::from_stream` | Reads JSON from a `std::istream`. |
|
69
|
-
| `events::from_string` | Reads JSON from a `std::string`. |
|
70
|
-
| `events::from_value` | Generates Events for a `basic_value<>`. |
|
71
|
-
| `events::from_file` | Reads JSON from the file. |
|
72
|
-
| `jaxn::events::from_stream` | Reads JAXN from a `std::istream`. |
|
73
|
-
| `jaxn::events::from_string` | Reads JAXN from a `std::string`. |
|
74
|
-
| `jaxn::events::from_file` | Reads JAXN from the file. |
|
75
|
-
| `cbor::events::from_string` | Reads CBOR from a `std::string`. |
|
76
|
-
| `cbor::events::from_file` | Reads CBOR from the file. |
|
77
|
-
| `msgpack::events::from_string` | Reads MSGPACK from a `std::string`. |
|
78
|
-
| `msgpack::events::from_file` | Reads MSGPACK from the file. |
|
79
|
-
| `ubjson::events::from_string` | Reads UBJSON from a `std::string`. |
|
80
|
-
| `ubjson::events::from_file` | Reads UBJSON from the file. |
|
81
|
-
|
82
|
-
## Events Consumers
|
83
|
-
|
84
|
-
Events Consumers are structs or classes that implement (a complete subset of) the Events Interface.
|
85
|
-
Consumers are usually instantiated and then passed to an Events Producer function as argument.
|
86
|
-
|
87
|
-
**The common namespace prefix `tao::json::` is omitted.**
|
88
|
-
|
89
|
-
| Consumer | Description |
|
90
|
-
| -------- | ----------- |
|
91
|
-
| `events::debug` | Writes all Events to a `std::ostream` in human-readable form. |
|
92
|
-
| `events::discard` | Does nothing with the Events it receives. |
|
93
|
-
| `events::hash` | Calculates a SHA-256 hash for the received Events. |
|
94
|
-
| `events::statistics` | Counts Events, and string and binary lengths. |
|
95
|
-
| `events::to_pretty_stream` | Writes nicely formatted JSON to a `std::ostream`. |
|
96
|
-
| `events::to_stream` | Writes compact JSON to a `std::ostream`. |
|
97
|
-
| `events::to_string` | Writes compact JSON to a `std::string`. |
|
98
|
-
| `events::to_value` | Builds a Value with the received Events. |
|
99
|
-
| `events::validate_event_order` | Checks whether the order of received Events is consistent. |
|
100
|
-
| `jaxn::events::to_pretty_stream` | Writes nicely formatted JAXN to a `std::ostream`. |
|
101
|
-
| `jaxn::events::to_stream` | Writes compact JAXN to a `std::ostream`. |
|
102
|
-
| `jaxn::events::to_string` | Writes compact JAXN to a `std::string`. |
|
103
|
-
| `cbor::events::to_stream` | Writes CBOR to a `std::ostream`. |
|
104
|
-
| `cbor::events::to_string` | Writes CBOR to a `std::string`. |
|
105
|
-
| `msgpack::events::to_stream` | Writes MSGPACK to a `std::ostream`. |
|
106
|
-
| `msgpack::events::to_string` | Writes MSGPACK to a `std::string`. |
|
107
|
-
| `ubjson::events::to_stream` | Writes UBJSON to a `std::ostream`. |
|
108
|
-
| `ubjson::events::to_string` | Writes UBJSON to a `std::string`. |
|
109
|
-
|
110
|
-
## Events Transformers
|
111
|
-
|
112
|
-
Transformers are structs or classes that are both Event Consumers that implement the Events Interface functions, and Event Producers that call the Events Interface functions on one or more other Events Consumers.
|
113
|
-
|
114
|
-
**The common namespace prefix `tao::json::` is omitted.**
|
115
|
-
|
116
|
-
| Transformer | Description |
|
117
|
-
| ----------- | ----------- |
|
118
|
-
| `events::binary_to_base64` | Passes through all Events except for binary data which is converted to base64-encoded strings. |
|
119
|
-
| `events::binary_to_base64url` | Passes through all Events except for binary data which is converted to URL-safe base64-encoded strings. |
|
120
|
-
| `events::binary_to_exception` | Passes through all Events except for binary data which provokes an exception. |
|
121
|
-
| `events::binary_to_hex` | Passes through all Events except for binary data which is is converted to hex-dumped strings. |
|
122
|
-
| `events::key_camel_case_to_snake_case` | Passes through all Events except for keys in Objects which are converted from "CamelCaseStyle" to "snake_case_style". |
|
123
|
-
| `events::key_snake_case_to_camel_case` | Passes through all Events except for keys in Objects which are converted from "snake_case_style" to "CamelCaseStyle". |
|
124
|
-
| `events::limit_nesting_depth` | Passes through all Events but throws an exception when the nesting of Arrays and Objects exceeds a limit. |
|
125
|
-
| `events::limit_value_count` | Passes through all Events but throws an exception when the total number of (sub)-value exceeds a limit. |
|
126
|
-
| `events::events::non_finite_to_exception` | Passes through all Events except for numbers of type `double` which contain non-finite values which provoke an exception. |
|
127
|
-
| `events::non_finite_to_null` | Passes through all Events except for numbers of type `double` which contain non-finite values which are passed on as `null()`. |
|
128
|
-
| `events::non_finite_to_string` | Passes through all Events except for numbers of type `double` which contain non-finite values which are passed on as appropriate `string()`. |
|
129
|
-
| `events::prefer_signed` | Passes through all Events except for numbers of type `std::uint64_t` which fit into a `std::int64_t` and are passed on as such. |
|
130
|
-
| `events::prefer_unsigned` | Passes through all Events except for numbers of type `std::int64_t` which fit into a `std::uint64_t` and are passed on as such. |
|
131
|
-
| `events::ref` | Passes all Events to another Consumer or Transformer to which it holds a C++ reference. |
|
132
|
-
| `events::tee` | Passes all Events to an arbitrary number of other Consumers or Transformers which it holds in a `std::tuple<>`. |
|
133
|
-
| `events::validate_keys` | Passes through all Events except for keys which are first validated against a provided PEGTL grammar rule. |
|
134
|
-
| `events::virtual_ref` | Like `ref`, but implements the virtual Event functions from `virtual_base`. |
|
135
|
-
|
136
|
-
## Convenience Functions
|
137
|
-
|
138
|
-
Functions that combine the similarly named Events Producer from above with an Events Consumer to return a corresponding Value.
|
139
|
-
|
140
|
-
**The common namespace prefix `tao::json::` is omitted.**
|
141
|
-
|
142
|
-
| Function | Description |
|
143
|
-
| -------- | ----------- |
|
144
|
-
| `from_stream` | Reads JSON from a `std::istream`. |
|
145
|
-
| `from_string` | Reads JSON from a `std::string`. |
|
146
|
-
| `from_file` | Reads JSON from the file. |
|
147
|
-
| `jaxn::from_stream` | Reads JAXN from a `std::istream`. |
|
148
|
-
| `jaxn::from_string` | Reads JAXN from a `std::string`. |
|
149
|
-
| `jaxn::from_file` | Reads JAXN from the file. |
|
150
|
-
| `cbor::from_string` | Reads CBOR from a `std::string`. |
|
151
|
-
| `cbor::from_file` | Reads CBOR from the file. |
|
152
|
-
| `msgpack::from_string` | Reads MSGPACK from a `std::string`. |
|
153
|
-
| `msgpack::from_file` | Reads MSGPACK from the file. |
|
154
|
-
| `ubjson::from_string` | Reads UBJSON from a `std::string`. |
|
155
|
-
| `ubjson::from_file` | Reads UBJSON from the file. |
|
156
|
-
|
157
|
-
Functions that combine the similarly named Events Consumers with a Producer that generates Events from a Value.
|
158
|
-
|
159
|
-
**The common namespace prefix `tao::json::` is omitted.**
|
160
|
-
|
161
|
-
| Function | Description |
|
162
|
-
| -------- | ----------- |
|
163
|
-
| `to_stream` | Writes compact or nicely formatted JSON to a `std::ostream`. |
|
164
|
-
| `to_string` | Writes compact or nicely formatted JSON to a `std::string`. |
|
165
|
-
| `jaxn::to_stream` | Writes compact or nicely formatted JAXN to a `std::ostream`. |
|
166
|
-
| `jaxn::to_string` | Writes compact or nicely formatted JAXN to a `std::string`. |
|
167
|
-
| `jaxn::to_stream` | Writes CBOR to a `std::ostream`. |
|
168
|
-
| `jaxn::to_string` | Writes CBOR to a `std::string`. |
|
169
|
-
| `msgpack::to_stream` | Writes MSGPACK to a `std::ostream`. |
|
170
|
-
| `msgpack::to_string` | Writes MSGPACK to a `std::string`. |
|
171
|
-
| `ubjson::to_stream` | Writes UBJSON to a `std::ostream`. |
|
172
|
-
| `ubjson::to_string` | Writes UBJSON to a `std::string`. |
|
173
|
-
|
174
|
-
These functions optionally apply an arbitrary list of [Transformers](#events-transformers) given as additional template parameters.
|
175
|
-
|
176
|
-
## Conversion Utilities
|
177
|
-
|
178
|
-
The following conversion utilities are included in the `src/examples/json` directory.
|
179
|
-
Note that they convert between formats on-the-fly, i.e. without creating any intermediate in-memory representation.
|
180
|
-
|
181
|
-
```
|
182
|
-
cbor_to_jaxn
|
183
|
-
cbor_to_json
|
184
|
-
cbor_to_msgpack
|
185
|
-
cbor_to_pretty_jaxn
|
186
|
-
cbor_to_pretty_json
|
187
|
-
cbor_to_ubjson
|
188
|
-
jaxn_to_cbor
|
189
|
-
jaxn_to_jaxn
|
190
|
-
jaxn_to_msgpack
|
191
|
-
jaxn_to_pretty_jaxn
|
192
|
-
jaxn_to_ubjson
|
193
|
-
json_to_cbor
|
194
|
-
json_to_json
|
195
|
-
json_to_msgpack
|
196
|
-
json_to_pretty_json
|
197
|
-
json_to_ubjson
|
198
|
-
msgpack_to_cbor
|
199
|
-
msgpack_to_jaxn
|
200
|
-
msgpack_to_json
|
201
|
-
msgpack_to_pretty_jaxn
|
202
|
-
msgpack_to_pretty_json
|
203
|
-
msgpack_to_ubjson
|
204
|
-
ubjson_to_cbor
|
205
|
-
ubjson_to_jaxn
|
206
|
-
ubjson_to_json
|
207
|
-
ubjson_to_msgpack
|
208
|
-
ubjson_to_prety_jaxn
|
209
|
-
ubjson_to_prety_json
|
210
|
-
```
|
211
|
-
|
212
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|
@@ -1,319 +0,0 @@
|
|
1
|
-
# Binding Traits
|
2
|
-
|
3
|
-
The Binding Traits facilities are used to "bind" existing [Type Traits](Type-Traits.md) together to create [Type Traits](Type-Traits.md) for new types or with new features.
|
4
|
-
|
5
|
-
They thereby offer rather convenient ways of automatically creating Traits functions for many common use cases.
|
6
|
-
|
7
|
-
* [Types as Arrays](#types-as-arrays)
|
8
|
-
* [Types as Objects](#types-as-objects)
|
9
|
-
* [Polymorphic Factory](#polymorphic-factory)
|
10
|
-
* [Multiple Versions](#multiple-versions)
|
11
|
-
|
12
|
-
## Types as Arrays
|
13
|
-
|
14
|
-
The class template `binding::array` can be used to easily create Traits for types that are to be represented by Arrays.
|
15
|
-
|
16
|
-
It takes arbitrary many template arguments that are usually created by invoking the macro `TAO_JSON_BIND_ELEMENT` with a member object pointer, i.e. a pointer to a member object of the type for which the Traits are to be created.
|
17
|
-
|
18
|
-
For example consider the following hypothetical `my_traits` specialisation for `std::pair`, similar to the Traits defined in `tao/json/contrib/pair_traits.hpp`.
|
19
|
-
|
20
|
-
```c++
|
21
|
-
#include <utility>
|
22
|
-
#include <tao/json.hpp>
|
23
|
-
|
24
|
-
template< typename T >
|
25
|
-
struct my_traits;
|
26
|
-
|
27
|
-
template< typename U, typename V >
|
28
|
-
struct my_traits< std::pair< U, V > >
|
29
|
-
: public tao::json::binding::array< TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::first ),
|
30
|
-
TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::second ) >
|
31
|
-
{
|
32
|
-
};
|
33
|
-
```
|
34
|
-
|
35
|
-
Note that variadic macros are used to correctly pass the member pointer even though the type `std::pair< U, V >` contains a comma.
|
36
|
-
|
37
|
-
The `assign()` and `produce()` functions of these Traits for `std::pair` will always create Arrays with two elements, and conversely the `to()` and `consume()` functions will expect Arrays with two elements.
|
38
|
-
|
39
|
-
Handling of the two member objects `first` and `second` is delegated to the Traits' specialisations for their respective types.
|
40
|
-
|
41
|
-
The order in the serialisation will always correspond to the order of the template parameter to `binding::array` (which need not coincide with the order in the `class` or `struct`).
|
42
|
-
|
43
|
-
### Constants
|
44
|
-
|
45
|
-
It is also possible to add constant elements that are purely defined in the Traits.
|
46
|
-
|
47
|
-
These constants are currently limited to boolean values, signed and unsigned integers, and strings.
|
48
|
-
|
49
|
-
When generating an encoding, the constants behave "as if" there was a binding to a variable of the corresponding type with the predefined value.
|
50
|
-
|
51
|
-
When parsing an encoding, the constants verify that the value read from the input is equal to their predefined value.
|
52
|
-
|
53
|
-
Constants are added to an Array binding with the macros `TAO_JSON_BIND_ELEMENT_BOOL()`, `TAO_JSON_BIND_ELEMENT_SIGNED()`, `TAO_JSON_BIND_ELEMENT_UNSIGNED()` and `TAO_JSON_BIND_ELEMENT_STRING()`.
|
54
|
-
|
55
|
-
```c++
|
56
|
-
template< typename U, typename V >
|
57
|
-
struct my_traits< std::pair< U, V > >
|
58
|
-
: public tao::json::binding::array< TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::first ),
|
59
|
-
TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::second ),
|
60
|
-
TAO_JSON_BIND_ELEMENT_UNSIGNED( 42 ), >
|
61
|
-
TAO_JSON_BIND_ELEMENT_STRING( "hallo" ) >
|
62
|
-
{
|
63
|
-
};
|
64
|
-
|
65
|
-
const auto p = std::pair( 1, 2 );
|
66
|
-
const tao::json::basic_value< my_traits > v = p;
|
67
|
-
// v is [ 1, 2, 42, "hallo" ]
|
68
|
-
```
|
69
|
-
|
70
|
-
### Inheritance
|
71
|
-
|
72
|
-
When a derived class' Array-based binding is supposed to extend the base class' binding it is possible to indicate the base class to an Array binding in order to not repeat the bindings for the inherited member objects.
|
73
|
-
|
74
|
-
For example consider the following class that extends a pair to a triple (instead of using a `std::tuple`).
|
75
|
-
|
76
|
-
```c++
|
77
|
-
template< typename U, typename V, typename W >
|
78
|
-
struct triple
|
79
|
-
: std::pair< U, V >
|
80
|
-
{
|
81
|
-
W third;
|
82
|
-
};
|
83
|
-
```
|
84
|
-
|
85
|
-
The corresponding specialisation of the hypothetical `my_traits` can then be implemented as follows.
|
86
|
-
|
87
|
-
```c++
|
88
|
-
template< typename U, typename V, typename W >
|
89
|
-
struct my_traits< triple< U, V, W > >
|
90
|
-
: public tao::json::binding::array< tao::json::binding::inherits< my_traits< std::pair< U, V > > >,
|
91
|
-
TAO_JSON_BIND_ELEMENT( &triple< U, V, W >::third ) >
|
92
|
-
{
|
93
|
-
};
|
94
|
-
```
|
95
|
-
|
96
|
-
Note that while the example shows what is probably the most common use case with the `binding::inherits` as first template argumen to `binding::array`, it can be used anywhere, i.e. before, in the middle of, or after any occurrences of `TAO_JSON_BIND_ELEMENT`.
|
97
|
-
|
98
|
-
### Indirect
|
99
|
-
|
100
|
-
TODO: `element` with getter, and `element2` with getter and setter.
|
101
|
-
|
102
|
-
## Types as Objects
|
103
|
-
|
104
|
-
The class template `binding::object` can be used to easily create Traits for types that are to be represented by Objects.
|
105
|
-
|
106
|
-
Compared to the Array binding explained above the Object binding has the advantages of being more expressive and flexible, and the disadvantage of being less efficient, both in terms of time and space.
|
107
|
-
|
108
|
-
Here is an alternative implementation of Type Traits for `std::pair`, this time using `binding::object`, wherefore the `std::pair` will encode from and to Objects with two members, one called `first` and one called `second`.
|
109
|
-
|
110
|
-
```c++
|
111
|
-
template< typename U, typename V >
|
112
|
-
struct my_traits< std::pair< U, V > >
|
113
|
-
: public tao::json::binding::object< TAO_JSON_BIND_REQUIRED( "first", &std::pair< U, V >::first ),
|
114
|
-
TAO_JSON_BIND_REQUIRED( "second", &std::pair< U, V >::second ) >
|
115
|
-
{
|
116
|
-
};
|
117
|
-
```
|
118
|
-
|
119
|
-
### Optional Members
|
120
|
-
|
121
|
-
Unlike with `binding::array`, it is possible to make individual members optional by using the macro `TAO_JSON_BIND_OPTIONAL` instead of `TAO_JSON_BIND_REQUIRED`.
|
122
|
-
This works particularly well when the bound member is a `std::optional< T >`, but it can also be used when the previous or default-constructed value of the member is acceptable in the absence of said member from the input.
|
123
|
-
|
124
|
-
### Default Keys
|
125
|
-
|
126
|
-
The following alternative forms of the binding macros use the [default key](Type-Traits.md#default-key-for-objects) instead of a string supplied to the macro.
|
127
|
-
|
128
|
-
```c++
|
129
|
-
TAO_JSON_BIND_REQUIRED1( &type::member1 );
|
130
|
-
TAO_JSON_BIND_OPTIONAL1( &type::member2 );
|
131
|
-
```
|
132
|
-
|
133
|
-
Of course the macros with key as first argument can also be used for members whose type defines a default key.
|
134
|
-
This is even necessary to prevent collisions when there are two occurrences of the same member type.
|
135
|
-
|
136
|
-
### Constants
|
137
|
-
|
138
|
-
Constants works for Objects just like for Arrays, though of course a string with the key needs to be supplied in addition to the constant value.
|
139
|
-
|
140
|
-
Constants are added to an Object binding with the macros `TAO_JSON_BIND_REQUIRED_BOOL()`, `TAO_JSON_BIND_REQUIRED_SIGNED()`, `TAO_JSON_BIND_REQUIRED_UNSIGNED()` and `TAO_JSON_BIND_REQUIRED_STRING()`.
|
141
|
-
There are again variants with `optional` in place of `required` that are always encoded, but are not flagged as error when missing.
|
142
|
-
|
143
|
-
```c++
|
144
|
-
template< typename U, typename V >
|
145
|
-
struct my_traits< std::pair< U, V > >
|
146
|
-
: public tao::json::binding::object< TAO_JSON_BIND_REQUIRED( "first", &std::pair< U, V >::first ),
|
147
|
-
TAO_JSON_BIND_REQUIRED( "second", &std::pair< U, V >::second ),
|
148
|
-
TAO_JSON_BIND_REQUIRED_SIGNED( "foo", -5 ) >
|
149
|
-
{
|
150
|
-
};
|
151
|
-
```
|
152
|
-
|
153
|
-
### Inheritance
|
154
|
-
|
155
|
-
Inheritance works for Objects just like for Arrays, though "mixing and matching" is not supported:
|
156
|
-
Array bindings can "inherit" a base class' Array bindings, and Object bindings can "inherit" a base class' Object bindings.
|
157
|
-
|
158
|
-
### Unknown Keys
|
159
|
-
|
160
|
-
By default, the Object traits' `to()` and `consume()` functions will throw an exception when they encounter an unknown Object key while converting a Value, or parsing some input, respectively.
|
161
|
-
|
162
|
-
This can be changed by using `tao::json::binding::basic_object` instead of `tao::json::binding::object`, and passing `tao::json::binding::for_unknown_key::skip` as template parameter in the appropriate place (instead of `tao::json::binding::for_unknown_key::fail`).
|
163
|
-
|
164
|
-
With this change, unknown keys will be ignored.
|
165
|
-
|
166
|
-
### Nothing Values
|
167
|
-
|
168
|
-
By default, the Object traits' `assign()` and `produce()` functions will encode all variables that it knows about, including those that might be considered "nothing".
|
169
|
-
|
170
|
-
This can be changed by again using `tao::json::binding::basic_object` instead of `tao::json::binding::object`, and passing `tao::json::binding::for_nothing_value::suppress` as template parameter in the appropriate place (instead of `tao::json::binding::for_nothing_value::ENCODE`).
|
171
|
-
|
172
|
-
To determine whether something is to be considered "nothing", the Traits' optional `is_nothing()` function is used.
|
173
|
-
|
174
|
-
```c++
|
175
|
-
template<>
|
176
|
-
class my_traits< some_type >
|
177
|
-
{
|
178
|
-
template< template< typename... > class Traits >
|
179
|
-
static bool is_nothing( const some_type& c ) noexcept
|
180
|
-
{
|
181
|
-
return whether c is to be considered "nothing";
|
182
|
-
}
|
183
|
-
};
|
184
|
-
```
|
185
|
-
|
186
|
-
If the Traits specialisation for the bound member variable does not implement an `is_nothing()` function then the assumption is that there is something (to encode).
|
187
|
-
|
188
|
-
## Polymorphic Factory
|
189
|
-
|
190
|
-
The class template `binding::factory` combines Traits for a set of derived classes to form Traits for a common base class.
|
191
|
-
|
192
|
-
The `assign()` and `produce()` methods use RTTI to determine the dynamic type of the pointee and delegate to the approriate derived class' Traits.
|
193
|
-
|
194
|
-
The `as()` and `consume()` methods expect an encoding as Object with a single member whose key must correspond to one of the types registered with the factory.
|
195
|
-
|
196
|
-
Factory Traits must be used as specialisations for a pointer class like `std::shared_ptr` or `std::unique_ptr`.
|
197
|
-
|
198
|
-
```c++
|
199
|
-
struct base
|
200
|
-
{
|
201
|
-
base( const base& ) = delete;
|
202
|
-
void operator=( const base& ) = delete;
|
203
|
-
|
204
|
-
virtual void foo() = 0; // Need one virtual function for RTTI, and for a base class to really make sense.
|
205
|
-
|
206
|
-
protected:
|
207
|
-
base() = default;
|
208
|
-
~base() = default; // Has to be public and virtual when using std::unique_ptr instead of std::shared_ptr.
|
209
|
-
};
|
210
|
-
|
211
|
-
struct fobble
|
212
|
-
: public base
|
213
|
-
{
|
214
|
-
// Constructors etc.
|
215
|
-
|
216
|
-
private:
|
217
|
-
void foo() override
|
218
|
-
{
|
219
|
-
}
|
220
|
-
};
|
221
|
-
|
222
|
-
struct fraggle
|
223
|
-
: public base
|
224
|
-
{
|
225
|
-
// Constructors etc.
|
226
|
-
|
227
|
-
private:
|
228
|
-
void foo() override
|
229
|
-
{
|
230
|
-
}
|
231
|
-
};
|
232
|
-
|
233
|
-
```
|
234
|
-
|
235
|
-
Assuming that there are appropriate specialisations of `my_traits` for the classes `fobble` and `fraggle`, i.e. that they implement all functions that are required by the application, and assuming suitable Traits for `std::shared_ptr`, the actual Factory Traits are implemented as follows.
|
236
|
-
|
237
|
-
Note that when using the Traits for `std::shared_ptr` and `std::unique_ptr` from `tao/json/contrib/shared_ptr_traits.hpp` and `tao/json/contrib/unique_ptr_traits.hpp`, possibly via `tao/json/contrib/traits.hpp`, then the Traits for a derived clas need not implement an `as()` or `to()` function when said derived class has a constructor that can create an instance from a Value.
|
238
|
-
|
239
|
-
```c++
|
240
|
-
template<>
|
241
|
-
struct my_traits< std::shared_ptr< base > >
|
242
|
-
: public tao::json::binding::factory< TAO_JSON_FACTORY_BIND( "fobble", fobble ),
|
243
|
-
TAO_JSON_FACTORY_BIND( "fraggle", fraggle ) >
|
244
|
-
{
|
245
|
-
};
|
246
|
-
```
|
247
|
-
|
248
|
-
### Default Keys
|
249
|
-
|
250
|
-
For types with a default key, the macro `TAO_JSON_FACTORY_BIND1` can be used instead of `TAO_JSON_FACTORY_BIND`.
|
251
|
-
Like for Object bindings, it removes the key as argument and uses the default key instead.
|
252
|
-
|
253
|
-
## Multiple Versions
|
254
|
-
|
255
|
-
The class template `binding::versions` can be used when there are multiple encodings for the same type.
|
256
|
-
|
257
|
-
A typical use case is when an old legacy encoding needs to be supported for compatibility, while a new preferred encoding already exists.
|
258
|
-
|
259
|
-
With `binding::versions`, arbitrary many different traits can be supported simultaneously with the following behaviour:
|
260
|
-
|
261
|
-
* For `as()` and `consume()`, all given Traits are tried, in order, until one succeeds (i.e. doesn't throw an exception).
|
262
|
-
* All other Traits functions are taken from the **first** Traits supplied to `binding::versions`.
|
263
|
-
|
264
|
-
Here is another Traits specialisation for `std::pair`, this time it combines both the Array-based and the Object-based version.
|
265
|
-
Since the Object-based Traits are given first, the encodings created by `assign()` and `produce()` will be Objects.
|
266
|
-
In the other direction both Arrays and Objects will be accepted (with Objects being attempted first).
|
267
|
-
|
268
|
-
```c++
|
269
|
-
template< typename U, typename V >
|
270
|
-
using pair_array_traits = tao::json::binding::array< TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::first ),
|
271
|
-
TAO_JSON_BIND_ELEMENT( &std::pair< U, V >::second ) >;
|
272
|
-
|
273
|
-
template< typename U, typename V >
|
274
|
-
using pair_object_traits = tao::json::binding::object< TAO_JSON_BIND_REQUIRED( "first", &std::pair< U, V >::first ),
|
275
|
-
TAO_JSON_BIND_REQUIRED( "second", &std::pair< U, V >::second ) >;
|
276
|
-
|
277
|
-
template< typename U, typename V >
|
278
|
-
struct my_traits< std::pair< U, V > >
|
279
|
-
: public tao::json::binding::versions< pair_object_traits,
|
280
|
-
pair_array_traits >
|
281
|
-
{
|
282
|
-
};
|
283
|
-
```
|
284
|
-
|
285
|
-
Note that `binding::versions` is a context in which using constants in Arrays or Objects can be useful in order to distinguish between different encodings without changing the definition of the type being represented.
|
286
|
-
|
287
|
-
```c++
|
288
|
-
struct person
|
289
|
-
{
|
290
|
-
std::string name;
|
291
|
-
std::string number;
|
292
|
-
};
|
293
|
-
|
294
|
-
template<>
|
295
|
-
struct old_person_traits
|
296
|
-
: public tao::json::binding::object< TAO_JSON_BIND_REQUIRED( "name", &person::name ),
|
297
|
-
TAO_JSON_BIND_OPTIONAL( "number", &person::number ) >
|
298
|
-
{
|
299
|
-
};
|
300
|
-
|
301
|
-
template<>
|
302
|
-
struct new_person_traits
|
303
|
-
: public tao::json::binding::object< TAO_JSON_BIND_REQUIRED_UNSIGNED( "version", 2 ),
|
304
|
-
TAO_JSON_BIND_REQUIRED( "name", &person::name ),
|
305
|
-
TAO_JSON_BIND_REQUIRED( "number", &person::number ) >
|
306
|
-
{
|
307
|
-
};
|
308
|
-
|
309
|
-
template<>
|
310
|
-
struct my_traits< person >
|
311
|
-
: public tao::json::binding::versions< new_person_traits,
|
312
|
-
old_person_traits >
|
313
|
-
{
|
314
|
-
};
|
315
|
-
```
|
316
|
-
|
317
|
-
Note that `binding::versions` uses the traits' `to()` method to fill-in an existing or default-constructed object, and that it does *not* clear or reset the target object between attempts!
|
318
|
-
|
319
|
-
Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
|