mt-libcouchbase 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +38 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +445 -0
- data/Rakefile +76 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +19 -0
- data/ext/libcouchbase/.gitignore +132 -0
- data/ext/libcouchbase/CMakeLists.txt +455 -0
- data/ext/libcouchbase/CONTRIBUTING.md +105 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +195 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +3523 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +52 -0
- data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
- data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +18 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +54 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +57 -0
- data/ext/libcouchbase/cmake/Modules/FindProfiler.cmake +16 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +49 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +142 -0
- data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
- data/ext/libcouchbase/cmake/config-cmake.h.in +80 -0
- data/ext/libcouchbase/cmake/configure +355 -0
- data/ext/libcouchbase/cmake/defs.mk.in +6 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +51 -0
- data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
- data/ext/libcouchbase/cmake/source_files.cmake +104 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +1022 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +25 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +259 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +419 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +50 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
- data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.c +500 -0
- data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -0
- data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +938 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +610 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +371 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +241 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
- data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
- data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
- data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4893 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +7 -0
- data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
- data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
- data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +75 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +100 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1312 -0
- data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
- data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
- data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
- data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
- data/ext/libcouchbase/doc/Doxyfile +2495 -0
- data/ext/libcouchbase/doc/DoxygenLayout.xml +109 -0
- data/ext/libcouchbase/doc/Makefile +44 -0
- data/ext/libcouchbase/doc/apiattr.h +117 -0
- data/ext/libcouchbase/doc/cbc-n1qlback.markdown +88 -0
- data/ext/libcouchbase/doc/cbc-pillowfight.markdown +296 -0
- data/ext/libcouchbase/doc/cbc-subdoc.markdown +299 -0
- data/ext/libcouchbase/doc/cbc.markdown +763 -0
- data/ext/libcouchbase/doc/cbcrc.markdown +52 -0
- data/ext/libcouchbase/doc/common-additional-options.markdown +82 -0
- data/ext/libcouchbase/doc/common-options.markdown +71 -0
- data/ext/libcouchbase/doc/environment.h +93 -0
- data/ext/libcouchbase/doc/example/threads.c +77 -0
- data/ext/libcouchbase/doc/footer.html +22 -0
- data/ext/libcouchbase/doc/genman.sh +25 -0
- data/ext/libcouchbase/doc/header.html +52 -0
- data/ext/libcouchbase/doc/intro.h +130 -0
- data/ext/libcouchbase/doc/mainpage.h +136 -0
- data/ext/libcouchbase/doc/man/cbc-admin.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-bucket-create.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-bucket-delete.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-cat.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-connstr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-cp.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-create.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-decr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-flush.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-hash.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-incr.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-lock.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-mcflush.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-mcversion.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-n1ql.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-n1qlback.1 +198 -0
- data/ext/libcouchbase/doc/man/cbc-observe.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-pillowfight.1 +499 -0
- data/ext/libcouchbase/doc/man/cbc-ping.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-rm.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-role-list.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-stats.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-subdoc.1 +494 -0
- data/ext/libcouchbase/doc/man/cbc-unlock.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-delete.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-list.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-user-upsert.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-verbosity.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-version.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-view.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc-watch.1 +1 -0
- data/ext/libcouchbase/doc/man/cbc.1 +1035 -0
- data/ext/libcouchbase/doc/man/cbcrc.4 +71 -0
- data/ext/libcouchbase/doc/style.css +1162 -0
- data/ext/libcouchbase/example/CMakeLists.txt +52 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/analytics/.gitignore +1 -0
- data/ext/libcouchbase/example/analytics/analytics.c +158 -0
- data/ext/libcouchbase/example/analytics/build-queries.rb +34 -0
- data/ext/libcouchbase/example/analytics/cJSON.c +1 -0
- data/ext/libcouchbase/example/analytics/cJSON.h +1 -0
- data/ext/libcouchbase/example/analytics/queries/00-show-dataverse.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/01-setup-dataset-breweries.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/02-setup-dataset-beers.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/03-initiate-shadow.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/04-list-datasets.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/05-count-breweries.json +5 -0
- data/ext/libcouchbase/example/analytics/queries/06-first-brewery.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/07-key-based-lookup.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/08-exact-match-lookup.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/09-exact-match-lookup-different-shape.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/10-other-query-filters.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/11-equijoin.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/12-equijoin-select-star.json +10 -0
- data/ext/libcouchbase/example/analytics/queries/13-ansi-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/14-join-select-values.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/15-nested-outer-join.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/16-theta-join.json +8 -0
- data/ext/libcouchbase/example/analytics/queries/17-existential-quantification.json +9 -0
- data/ext/libcouchbase/example/analytics/queries/18-universal-quantification.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/19-simple-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/20-simple-aggregation-unwrapped-value.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/21-simple-aggregation-explicit.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/22-grouping-and-aggregation.json +6 -0
- data/ext/libcouchbase/example/analytics/queries/23-grouping-and-aggregation-with-hint.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/24-grouping-and-limits.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/25-named-parameters.json +7 -0
- data/ext/libcouchbase/example/analytics/queries/26-positional-parameters.json +7 -0
- data/ext/libcouchbase/example/analytics/queries.h +113 -0
- data/ext/libcouchbase/example/crypto/.gitignore +2 -0
- data/ext/libcouchbase/example/crypto/Makefile +13 -0
- data/ext/libcouchbase/example/crypto/common_provider.c +26 -0
- data/ext/libcouchbase/example/crypto/common_provider.h +33 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +144 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +146 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +271 -0
- data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
- data/ext/libcouchbase/example/db/db.c +171 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/fts/.gitignore +1 -0
- data/ext/libcouchbase/example/fts/build-queries.rb +33 -0
- data/ext/libcouchbase/example/fts/fts.c +142 -0
- data/ext/libcouchbase/example/fts/queries/00-simple-text-query.json +12 -0
- data/ext/libcouchbase/example/fts/queries/01-simple-text-query-on-non-default-index.json +9 -0
- data/ext/libcouchbase/example/fts/queries/02-simple-text-query-on-stored-field.json +13 -0
- data/ext/libcouchbase/example/fts/queries/03-match-query-with-facet.json +19 -0
- data/ext/libcouchbase/example/fts/queries/04-docid-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/05-unanalyzed-term-query-with-fuzziness-level-of-0.json +13 -0
- data/ext/libcouchbase/example/fts/queries/06-unanalyzed-term-query-with-fuzziness-level-of-2.json +14 -0
- data/ext/libcouchbase/example/fts/queries/07-match-phrase-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/08-phrase-query.json +16 -0
- data/ext/libcouchbase/example/fts/queries/09-query-string-query.json +9 -0
- data/ext/libcouchbase/example/fts/queries/10-conjunction-query.json +21 -0
- data/ext/libcouchbase/example/fts/queries/11-wild-card-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries/12-numeric-range-query.json +11 -0
- data/ext/libcouchbase/example/fts/queries/13-regexp-query.json +13 -0
- data/ext/libcouchbase/example/fts/queries.h +61 -0
- data/ext/libcouchbase/example/instancepool/main.cc +112 -0
- data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.h +69 -0
- data/ext/libcouchbase/example/libeventdirect/main.c +222 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/.gitignore +1 -0
- data/ext/libcouchbase/example/minimal/minimal.c +132 -0
- data/ext/libcouchbase/example/minimal/query.c +185 -0
- data/ext/libcouchbase/example/observe/durability.c +102 -0
- data/ext/libcouchbase/example/observe/observe.c +159 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +143 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +201 -0
- data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +286 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/tracing/.gitignore +2 -0
- data/ext/libcouchbase/example/tracing/Makefile +8 -0
- data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
- data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
- data/ext/libcouchbase/example/tracing/tracing.c +439 -0
- data/ext/libcouchbase/example/tracing/views.c +444 -0
- data/ext/libcouchbase/example/users/README +48 -0
- data/ext/libcouchbase/example/users/users.c +147 -0
- data/ext/libcouchbase/example/views/views-example.cc +83 -0
- data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
- data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
- data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
- data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
- data/ext/libcouchbase/include/libcouchbase/auth.h +297 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +151 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +319 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +1418 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +29 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +4089 -0
- data/ext/libcouchbase/include/libcouchbase/crypto.h +306 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +680 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1053 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +137 -0
- data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +539 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +370 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +347 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/tracing.h +437 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +680 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +357 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +66 -0
- data/ext/libcouchbase/include/memcached/COPYING +30 -0
- data/ext/libcouchbase/include/memcached/README +10 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +885 -0
- data/ext/libcouchbase/packaging/README +7 -0
- data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
- data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
- data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
- data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
- data/ext/libcouchbase/packaging/deb/compat +1 -0
- data/ext/libcouchbase/packaging/deb/control +72 -0
- data/ext/libcouchbase/packaging/deb/copyright +10 -0
- data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
- data/ext/libcouchbase/packaging/deb/package.mk +31 -0
- data/ext/libcouchbase/packaging/deb/rules +46 -0
- data/ext/libcouchbase/packaging/deb/source/format +1 -0
- data/ext/libcouchbase/packaging/distinfo/README +1 -0
- data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
- data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
- data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
- data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +101 -0
- data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
- data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +467 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +31 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +66 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +31 -0
- data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
- data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +44 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +218 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +155 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +709 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +13 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +451 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +101 -0
- data/ext/libcouchbase/src/aspend.h +105 -0
- data/ext/libcouchbase/src/auth-priv.h +85 -0
- data/ext/libcouchbase/src/auth.cc +146 -0
- data/ext/libcouchbase/src/bootstrap.cc +263 -0
- data/ext/libcouchbase/src/bootstrap.h +149 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +450 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.cc +281 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +527 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +107 -0
- data/ext/libcouchbase/src/bucketconfig/bc_static.cc +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +700 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +403 -0
- data/ext/libcouchbase/src/callbacks.c +380 -0
- data/ext/libcouchbase/src/cbft.cc +253 -0
- data/ext/libcouchbase/src/cntl.cc +1057 -0
- data/ext/libcouchbase/src/config_static.h +176 -0
- data/ext/libcouchbase/src/connspec.cc +555 -0
- data/ext/libcouchbase/src/connspec.h +155 -0
- data/ext/libcouchbase/src/crypto.cc +399 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +44 -0
- data/ext/libcouchbase/src/dns-srv.cc +146 -0
- data/ext/libcouchbase/src/dump.cc +103 -0
- data/ext/libcouchbase/src/errmap.cc +173 -0
- data/ext/libcouchbase/src/errmap.h +271 -0
- data/ext/libcouchbase/src/getconfig.cc +72 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.cc +1101 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +293 -0
- data/ext/libcouchbase/src/hostlist.h +160 -0
- data/ext/libcouchbase/src/http/http-priv.h +326 -0
- data/ext/libcouchbase/src/http/http.cc +672 -0
- data/ext/libcouchbase/src/http/http.h +1 -0
- data/ext/libcouchbase/src/http/http_io.cc +316 -0
- data/ext/libcouchbase/src/instance.cc +917 -0
- data/ext/libcouchbase/src/internal.h +285 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +445 -0
- data/ext/libcouchbase/src/jsparse/parser.h +159 -0
- data/ext/libcouchbase/src/lcbht/lcbht.cc +177 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +210 -0
- data/ext/libcouchbase/src/lcbio/connect.cc +603 -0
- data/ext/libcouchbase/src/lcbio/connect.h +400 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +658 -0
- data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
- data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
- data/ext/libcouchbase/src/lcbio/iotable.h +169 -0
- data/ext/libcouchbase/src/lcbio/ioutils.cc +356 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +144 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.cc +579 -0
- data/ext/libcouchbase/src/lcbio/manager.h +195 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +137 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +159 -0
- data/ext/libcouchbase/src/lcbio/timer-cxx.h +87 -0
- data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
- data/ext/libcouchbase/src/lcbio/timer.c +132 -0
- data/ext/libcouchbase/src/legacy.c +431 -0
- data/ext/libcouchbase/src/list.c +144 -0
- data/ext/libcouchbase/src/list.h +127 -0
- data/ext/libcouchbase/src/logging.c +244 -0
- data/ext/libcouchbase/src/logging.h +88 -0
- data/ext/libcouchbase/src/mc/compress.cc +171 -0
- data/ext/libcouchbase/src/mc/compress.h +56 -0
- data/ext/libcouchbase/src/mc/forward.c +186 -0
- data/ext/libcouchbase/src/mc/forward.h +90 -0
- data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
- data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +115 -0
- data/ext/libcouchbase/src/mc/mcreq.c +983 -0
- data/ext/libcouchbase/src/mc/mcreq.h +1015 -0
- data/ext/libcouchbase/src/mcserver/mcserver.cc +1055 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +221 -0
- data/ext/libcouchbase/src/mcserver/negotiate.cc +757 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +128 -0
- data/ext/libcouchbase/src/mctx-helper.h +62 -0
- data/ext/libcouchbase/src/metrics.cc +132 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +857 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +830 -0
- data/ext/libcouchbase/src/n1ql/params.cc +260 -0
- data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
- data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
- data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
- data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
- data/ext/libcouchbase/src/newconfig.cc +365 -0
- data/ext/libcouchbase/src/nodeinfo.cc +184 -0
- data/ext/libcouchbase/src/operations/cbflush.cc +63 -0
- data/ext/libcouchbase/src/operations/counter.cc +117 -0
- data/ext/libcouchbase/src/operations/durability-cas.cc +251 -0
- data/ext/libcouchbase/src/operations/durability-seqno.cc +170 -0
- data/ext/libcouchbase/src/operations/durability.cc +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +306 -0
- data/ext/libcouchbase/src/operations/get.cc +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.cc +94 -0
- data/ext/libcouchbase/src/operations/observe.cc +367 -0
- data/ext/libcouchbase/src/operations/ping.cc +496 -0
- data/ext/libcouchbase/src/operations/pktfwd.cc +86 -0
- data/ext/libcouchbase/src/operations/remove.cc +84 -0
- data/ext/libcouchbase/src/operations/stats.cc +459 -0
- data/ext/libcouchbase/src/operations/store.cc +358 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +614 -0
- data/ext/libcouchbase/src/operations/touch.cc +84 -0
- data/ext/libcouchbase/src/packetutils.h +388 -0
- data/ext/libcouchbase/src/probes.d +182 -0
- data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
- data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
- data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
- data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
- data/ext/libcouchbase/src/rdb/rope.c +419 -0
- data/ext/libcouchbase/src/rdb/rope.h +488 -0
- data/ext/libcouchbase/src/retrychk.cc +113 -0
- data/ext/libcouchbase/src/retryq.cc +458 -0
- data/ext/libcouchbase/src/retryq.h +170 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/rnd.cc +61 -0
- data/ext/libcouchbase/src/rnd.h +39 -0
- data/ext/libcouchbase/src/settings.c +125 -0
- data/ext/libcouchbase/src/settings.h +273 -0
- data/ext/libcouchbase/src/sllist-inl.h +197 -0
- data/ext/libcouchbase/src/sllist.h +76 -0
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +11 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +442 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +478 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +421 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +182 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +307 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +302 -0
- data/ext/libcouchbase/src/timings.c +207 -0
- data/ext/libcouchbase/src/trace.h +117 -0
- data/ext/libcouchbase/src/tracing/span.cc +421 -0
- data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +213 -0
- data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
- data/ext/libcouchbase/src/tracing/tracing-internal.h +198 -0
- data/ext/libcouchbase/src/utilities.c +176 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
- data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
- data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
- data/ext/libcouchbase/src/vbucket/hash.h +30 -0
- data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
- data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
- data/ext/libcouchbase/src/vbucket/vbucket.c +1735 -0
- data/ext/libcouchbase/src/views/docreq.cc +213 -0
- data/ext/libcouchbase/src/views/docreq.h +94 -0
- data/ext/libcouchbase/src/views/viewreq.cc +381 -0
- data/ext/libcouchbase/src/views/viewreq.h +87 -0
- data/ext/libcouchbase/src/wait.cc +156 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +149 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +109 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +456 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +96 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +210 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +82 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
- data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
- data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
- data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
- data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +17 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +215 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_scram.cc +514 -0
- data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
- data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +612 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +173 -0
- data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
- data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
- data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
- data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
- data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
- data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
- data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +632 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +480 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
- data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
- data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +220 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +223 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1108 -0
- data/ext/libcouchbase/tests/iotests/t_eerrs.cc +121 -0
- data/ext/libcouchbase/tests/iotests/t_errmap.cc +181 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +118 -0
- data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
- data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
- data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
- data/ext/libcouchbase/tests/iotests/t_lock.cc +274 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +777 -0
- data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
- data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +778 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +156 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +87 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +231 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +857 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +417 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +251 -0
- data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
- data/ext/libcouchbase/tests/mc/mctest.h +119 -0
- data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
- data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
- data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
- data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
- data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
- data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
- data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
- data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
- data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
- data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
- data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
- data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
- data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
- data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
- data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +344 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +447 -0
- data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
- data/ext/libcouchbase/tests/socktests/t_manager.cc +159 -0
- data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
- data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
- data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
- data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
- data/ext/libcouchbase/tests/start_mock.bat +15 -0
- data/ext/libcouchbase/tests/start_mock.sh +42 -0
- data/ext/libcouchbase/tests/unit_tests.cc +43 -0
- data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
- data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
- data/ext/libcouchbase/tests/vbucket/confdata/ketama_expected.json +2562 -0
- data/ext/libcouchbase/tests/vbucket/confdata/map_node_present_nodesext_missing_nodes.json +94 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_ketama_config.json +31 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +386 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +80 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +636 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +496 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +1230 -0
- data/ext/libcouchbase/tools/cbc-proxy.cc +534 -0
- data/ext/libcouchbase/tools/cbc-subdoc.cc +825 -0
- data/ext/libcouchbase/tools/cbc.cc +1928 -0
- data/ext/libcouchbase/tools/common/histogram.cc +44 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/options.cc +451 -0
- data/ext/libcouchbase/tools/common/options.h +90 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +495 -0
- data/ext/libcouchbase/tools/docgen/loc.h +211 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +122 -0
- data/ext/libcouchbase/tools/extract-packets.rb +110 -0
- data/ext/libcouchbase/tools/linenoise/linenoise.c +1199 -0
- data/ext/libcouchbase/tools/linenoise/linenoise.h +73 -0
- data/lib/mt-libcouchbase/bucket.rb +825 -0
- data/lib/mt-libcouchbase/callbacks.rb +69 -0
- data/lib/mt-libcouchbase/connection.rb +896 -0
- data/lib/mt-libcouchbase/design_docs.rb +92 -0
- data/lib/mt-libcouchbase/error.rb +68 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdbase.rb +23 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdcounter.rb +36 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdendure.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdfts.rb +24 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdget.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdhttp.rb +58 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdn1ql.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobseqno.rb +33 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobserve.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstore.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstoredur.rb +45 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdsubdoc.rb +61 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdverbosity.rb +29 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdviewquery.rb +61 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/contigbuf.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st.rb +15 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st0.rb +23 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st1.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st2.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st3.rb +26 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/crst_u.rb +20 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_t.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/enums.rb +1007 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/fragbuf.rb +18 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/ftshandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/histogram.rb +34 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/http_request_t.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/keybuf.rb +20 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/mutation_token.rb +17 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlhandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlparams.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respbase.rb +29 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respcounter.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respendure.rb +49 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respfts.rb +40 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respget.rb +44 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/resphttp.rb +48 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respmcversion.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respn1ql.rb +41 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobseqno.rb +52 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobserve.rb +41 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respserverbase.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstats.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstore.rb +32 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstoredur.rb +38 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respsubdoc.rb +35 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/respviewquery.rb +67 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdentry.rb +22 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdspec.rb +31 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/t.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf.rb +22 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase/viewhandle.rb +7 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase.rb +1175 -0
- data/lib/mt-libcouchbase/ext/mt-libcouchbase_libuv.rb +22 -0
- data/lib/mt-libcouchbase/ext/tasks.rb +39 -0
- data/lib/mt-libcouchbase/n1ql.rb +80 -0
- data/lib/mt-libcouchbase/query_full_text.rb +147 -0
- data/lib/mt-libcouchbase/query_n1ql.rb +123 -0
- data/lib/mt-libcouchbase/query_view.rb +135 -0
- data/lib/mt-libcouchbase/results_fiber.rb +281 -0
- data/lib/mt-libcouchbase/results_native.rb +220 -0
- data/lib/mt-libcouchbase/subdoc_request.rb +139 -0
- data/lib/mt-libcouchbase/version.rb +5 -0
- data/lib/mt-libcouchbase.rb +40 -0
- data/mt-libcouchbase.gemspec +68 -0
- data/spec/bucket_spec.rb +290 -0
- data/spec/connection_spec.rb +257 -0
- data/spec/design_docs_spec.rb +31 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +135 -0
- data/spec/n1ql_spec.rb +260 -0
- data/spec/results_libuv_spec.rb +244 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/subdoc_spec.rb +192 -0
- data/spec/view_spec.rb +201 -0
- data/windows_build.md +36 -0
- metadata +873 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2010-2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "internal.h"
|
|
19
|
+
#include <lcbio/iotable.h>
|
|
20
|
+
|
|
21
|
+
#if defined(__clang__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
|
|
22
|
+
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
typedef enum {
|
|
26
|
+
LCB_TIMER_STANDALONE = 1 << 0,
|
|
27
|
+
LCB_TIMER_PERIODIC = 1 << 1,
|
|
28
|
+
LCB_TIMER_EX = 1 << 2
|
|
29
|
+
} lcb_timer_options;
|
|
30
|
+
|
|
31
|
+
typedef enum {
|
|
32
|
+
LCB_TIMER_S_ENTERED = 0x01,
|
|
33
|
+
LCB_TIMER_S_DESTROYED = 0x02,
|
|
34
|
+
LCB_TIMER_S_ARMED = 0x04
|
|
35
|
+
} lcb_timer_state;
|
|
36
|
+
|
|
37
|
+
struct lcb_timer_st {
|
|
38
|
+
lcb_uint32_t usec_;
|
|
39
|
+
lcb_timer_state state;
|
|
40
|
+
lcb_timer_options options;
|
|
41
|
+
void *event;
|
|
42
|
+
const void *cookie;
|
|
43
|
+
lcb_timer_callback callback;
|
|
44
|
+
lcb_t instance;
|
|
45
|
+
struct lcbio_TABLE *io;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec);
|
|
49
|
+
static void timer_disarm(lcb_timer_t timer);
|
|
50
|
+
#define lcb_timer_armed(timer) ((timer)->state & LCB_TIMER_S_ARMED)
|
|
51
|
+
#define lcb_async_signal(async) lcb_timer_rearm(async, 0)
|
|
52
|
+
#define lcb_async_cancel(async) lcb_timer_disarm(async)
|
|
53
|
+
#define TMR_IS_PERIODIC(timer) ((timer)->options & LCB_TIMER_PERIODIC)
|
|
54
|
+
#define TMR_IS_DESTROYED(timer) ((timer)->state & LCB_TIMER_S_DESTROYED)
|
|
55
|
+
#define TMR_IS_STANDALONE(timer) ((timer)->options & LCB_TIMER_STANDALONE)
|
|
56
|
+
#define TMR_IS_ARMED(timer) ((timer)->state & LCB_TIMER_S_ARMED)
|
|
57
|
+
|
|
58
|
+
static void destroy_timer(lcb_timer_t timer) {
|
|
59
|
+
if (timer->event) {
|
|
60
|
+
timer->io->timer.destroy(timer->io->p, timer->event);
|
|
61
|
+
}
|
|
62
|
+
lcbio_table_unref(timer->io);
|
|
63
|
+
memset(timer, 0xff, sizeof(*timer));
|
|
64
|
+
free(timer);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static void timer_callback(lcb_socket_t sock, short which, void *arg) {
|
|
68
|
+
lcb_timer_t timer = arg;
|
|
69
|
+
lcb_t instance = timer->instance;
|
|
70
|
+
|
|
71
|
+
lcb_assert(TMR_IS_ARMED(timer));
|
|
72
|
+
lcb_assert(!TMR_IS_DESTROYED(timer));
|
|
73
|
+
|
|
74
|
+
timer->state |= LCB_TIMER_S_ENTERED;
|
|
75
|
+
timer_disarm(timer);
|
|
76
|
+
timer->callback(timer, instance, timer->cookie);
|
|
77
|
+
|
|
78
|
+
if (TMR_IS_DESTROYED(timer) == 0 && TMR_IS_PERIODIC(timer) != 0) {
|
|
79
|
+
timer_rearm(timer, timer->usec_);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (! TMR_IS_STANDALONE(timer)) {
|
|
83
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
|
|
84
|
+
lcb_maybe_breakout(instance);
|
|
85
|
+
}
|
|
86
|
+
if (TMR_IS_DESTROYED(timer)) {
|
|
87
|
+
destroy_timer(timer);
|
|
88
|
+
} else {
|
|
89
|
+
timer->state &= ~LCB_TIMER_S_ENTERED;
|
|
90
|
+
}
|
|
91
|
+
(void)sock;(void)which;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
LIBCOUCHBASE_API
|
|
95
|
+
lcb_timer_t lcb_timer_create(lcb_t instance, const void *command_cookie, lcb_uint32_t usec, int periodic, lcb_timer_callback callback, lcb_error_t *error) {
|
|
96
|
+
lcb_timer_options options = 0;
|
|
97
|
+
lcb_timer_t tmr = calloc(1, sizeof(struct lcb_timer_st));
|
|
98
|
+
tmr->io = instance->iotable;
|
|
99
|
+
|
|
100
|
+
if (periodic) {
|
|
101
|
+
options |= LCB_TIMER_PERIODIC;
|
|
102
|
+
}
|
|
103
|
+
if (!tmr) {
|
|
104
|
+
*error = LCB_CLIENT_ENOMEM;
|
|
105
|
+
return NULL;
|
|
106
|
+
}
|
|
107
|
+
if (!callback) {
|
|
108
|
+
free(tmr);
|
|
109
|
+
*error = LCB_EINVAL;
|
|
110
|
+
return NULL;
|
|
111
|
+
}
|
|
112
|
+
if (! (options & LCB_TIMER_STANDALONE)) {
|
|
113
|
+
lcb_assert(instance);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
lcbio_table_ref(tmr->io);
|
|
117
|
+
tmr->instance = instance;
|
|
118
|
+
tmr->callback = callback;
|
|
119
|
+
tmr->cookie = command_cookie;
|
|
120
|
+
tmr->options = options;
|
|
121
|
+
tmr->event = tmr->io->timer.create(tmr->io->p);
|
|
122
|
+
|
|
123
|
+
if (tmr->event == NULL) {
|
|
124
|
+
free(tmr);
|
|
125
|
+
*error = LCB_CLIENT_ENOMEM;
|
|
126
|
+
return NULL;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if ( (options & LCB_TIMER_STANDALONE) == 0) {
|
|
130
|
+
lcb_aspend_add(&instance->pendops, LCB_PENDTYPE_TIMER, tmr);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
timer_rearm(tmr, usec);
|
|
134
|
+
|
|
135
|
+
*error = LCB_SUCCESS;
|
|
136
|
+
return tmr;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
LIBCOUCHBASE_API
|
|
140
|
+
lcb_error_t lcb_timer_destroy(lcb_t instance, lcb_timer_t timer) {
|
|
141
|
+
int standalone = timer->options & LCB_TIMER_STANDALONE;
|
|
142
|
+
if (!standalone) {
|
|
143
|
+
lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
|
|
144
|
+
}
|
|
145
|
+
timer_disarm(timer);
|
|
146
|
+
if (timer->state & LCB_TIMER_S_ENTERED) {
|
|
147
|
+
timer->state |= LCB_TIMER_S_DESTROYED;
|
|
148
|
+
lcb_assert(TMR_IS_DESTROYED(timer));
|
|
149
|
+
} else {
|
|
150
|
+
destroy_timer(timer);
|
|
151
|
+
}
|
|
152
|
+
return LCB_SUCCESS;
|
|
153
|
+
}
|
|
154
|
+
static void timer_disarm(lcb_timer_t timer) {
|
|
155
|
+
if (!TMR_IS_ARMED(timer)) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
timer->state &= ~LCB_TIMER_S_ARMED;
|
|
159
|
+
timer->io->timer.cancel(timer->io->p, timer->event);
|
|
160
|
+
}
|
|
161
|
+
static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec) {
|
|
162
|
+
if (TMR_IS_ARMED(timer)) {
|
|
163
|
+
timer_disarm(timer);
|
|
164
|
+
}
|
|
165
|
+
timer->usec_ = usec;
|
|
166
|
+
timer->io->timer.schedule(timer->io->p, timer->event, usec, timer, timer_callback);
|
|
167
|
+
timer->state |= LCB_TIMER_S_ARMED;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
LCB_INTERNAL_API void lcb__timer_destroy_nowarn(lcb_t instance, lcb_timer_t timer) {
|
|
171
|
+
lcb_timer_destroy(instance, timer);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
struct user_cookie {
|
|
175
|
+
void *cookie;
|
|
176
|
+
struct lcb_callback_st callbacks;
|
|
177
|
+
lcb_error_t retcode;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
static void restore_user_env(lcb_t instance);
|
|
181
|
+
static void restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error);
|
|
182
|
+
static void bootstrap_callback(lcb_t instance, lcb_error_t err) {
|
|
183
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
184
|
+
c->retcode = err;
|
|
185
|
+
}
|
|
186
|
+
static void stat_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_stat_resp_t *resp) {
|
|
187
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
188
|
+
restore_user_env(instance);
|
|
189
|
+
c->callbacks.stat(instance, command_cookie, error, resp);
|
|
190
|
+
restore_wrapping_env(instance, c, error);
|
|
191
|
+
}
|
|
192
|
+
static void version_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_version_resp_t *resp) {
|
|
193
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
194
|
+
restore_user_env(instance);
|
|
195
|
+
c->callbacks.version(instance, command_cookie, error, resp);
|
|
196
|
+
restore_wrapping_env(instance, c, error);
|
|
197
|
+
}
|
|
198
|
+
static void verbosity_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_verbosity_resp_t *resp) {
|
|
199
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
200
|
+
restore_user_env(instance);
|
|
201
|
+
c->callbacks.verbosity(instance, command_cookie, error, resp);
|
|
202
|
+
restore_wrapping_env(instance, c, error);
|
|
203
|
+
}
|
|
204
|
+
static void get_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_get_resp_t *resp) {
|
|
205
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
206
|
+
restore_user_env(instance);
|
|
207
|
+
c->callbacks.get(instance, cookie, error, resp);
|
|
208
|
+
restore_wrapping_env(instance, c, error);
|
|
209
|
+
}
|
|
210
|
+
static void store_callback(lcb_t instance, const void *cookie, lcb_storage_t operation, lcb_error_t error, const lcb_store_resp_t *resp) {
|
|
211
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
212
|
+
restore_user_env(instance);
|
|
213
|
+
c->callbacks.store(instance, cookie, operation, error, resp);
|
|
214
|
+
restore_wrapping_env(instance, c, error);
|
|
215
|
+
}
|
|
216
|
+
static void arithmetic_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_arithmetic_resp_t *resp) {
|
|
217
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
218
|
+
restore_user_env(instance);
|
|
219
|
+
c->callbacks.arithmetic(instance, cookie, error, resp);
|
|
220
|
+
restore_wrapping_env(instance, c, error);
|
|
221
|
+
}
|
|
222
|
+
static void remove_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_remove_resp_t *resp) {
|
|
223
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
224
|
+
restore_user_env(instance);
|
|
225
|
+
c->callbacks.remove(instance, cookie, error, resp);
|
|
226
|
+
restore_wrapping_env(instance, c, error);
|
|
227
|
+
}
|
|
228
|
+
static void touch_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_touch_resp_t *resp) {
|
|
229
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
230
|
+
restore_user_env(instance);
|
|
231
|
+
c->callbacks.touch(instance, cookie, error, resp);
|
|
232
|
+
restore_wrapping_env(instance, c, error);
|
|
233
|
+
}
|
|
234
|
+
static void http_complete_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
|
|
235
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
236
|
+
restore_user_env(instance);
|
|
237
|
+
c->callbacks.http_complete(request, instance, cookie, error, resp);
|
|
238
|
+
restore_wrapping_env(instance, c, error);
|
|
239
|
+
}
|
|
240
|
+
static void http_data_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
|
|
241
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
242
|
+
restore_user_env(instance);
|
|
243
|
+
c->callbacks.http_data(request, instance, cookie, error, resp);
|
|
244
|
+
restore_wrapping_env(instance, c, error);
|
|
245
|
+
}
|
|
246
|
+
static void flush_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_flush_resp_t *resp) {
|
|
247
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
248
|
+
restore_user_env(instance);
|
|
249
|
+
c->callbacks.flush(instance, cookie, error, resp);
|
|
250
|
+
restore_wrapping_env(instance, c, error);
|
|
251
|
+
}
|
|
252
|
+
static void observe_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_observe_resp_t *resp) {
|
|
253
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
254
|
+
restore_user_env(instance);
|
|
255
|
+
c->callbacks.observe(instance, cookie, error, resp);
|
|
256
|
+
restore_wrapping_env(instance, c, error);
|
|
257
|
+
}
|
|
258
|
+
static void durability_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_durability_resp_t *resp) {
|
|
259
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
260
|
+
restore_user_env(instance);
|
|
261
|
+
c->callbacks.durability(instance, cookie, error, resp);
|
|
262
|
+
restore_wrapping_env(instance, c, error);
|
|
263
|
+
}
|
|
264
|
+
static void unlock_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_unlock_resp_t *resp) {
|
|
265
|
+
struct user_cookie *c = (void *)instance->cookie;
|
|
266
|
+
restore_user_env(instance);
|
|
267
|
+
c->callbacks.unlock(instance, cookie, error, resp);
|
|
268
|
+
restore_wrapping_env(instance, c, error);
|
|
269
|
+
}
|
|
270
|
+
static void restore_user_env(lcb_t instance) {
|
|
271
|
+
struct user_cookie *cookie = (void *)instance->cookie;
|
|
272
|
+
/* Restore the users environment */
|
|
273
|
+
instance->cookie = cookie->cookie;
|
|
274
|
+
instance->callbacks = cookie->callbacks;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
static void
|
|
278
|
+
restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error) {
|
|
279
|
+
user->callbacks = instance->callbacks;
|
|
280
|
+
/* Install new callbacks */
|
|
281
|
+
instance->callbacks.get = get_callback;
|
|
282
|
+
instance->callbacks.store = store_callback;
|
|
283
|
+
instance->callbacks.arithmetic = arithmetic_callback;
|
|
284
|
+
instance->callbacks.remove = remove_callback;
|
|
285
|
+
instance->callbacks.stat = stat_callback;
|
|
286
|
+
instance->callbacks.version = version_callback;
|
|
287
|
+
instance->callbacks.verbosity = verbosity_callback;
|
|
288
|
+
instance->callbacks.touch = touch_callback;
|
|
289
|
+
instance->callbacks.flush = flush_callback;
|
|
290
|
+
instance->callbacks.bootstrap = bootstrap_callback;
|
|
291
|
+
instance->callbacks.http_complete = http_complete_callback;
|
|
292
|
+
instance->callbacks.http_data = http_data_callback;
|
|
293
|
+
instance->callbacks.observe = observe_callback;
|
|
294
|
+
instance->callbacks.unlock = unlock_callback;
|
|
295
|
+
instance->callbacks.durability = durability_callback;
|
|
296
|
+
|
|
297
|
+
user->cookie = (void *)instance->cookie;
|
|
298
|
+
user->retcode = error;
|
|
299
|
+
instance->cookie = user;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
lcb_error_t
|
|
303
|
+
lcb__synchandler_return(lcb_t instance)
|
|
304
|
+
{
|
|
305
|
+
struct user_cookie cookie;
|
|
306
|
+
restore_wrapping_env(instance, &cookie, LCB_SUCCESS);
|
|
307
|
+
lcb_wait(instance);
|
|
308
|
+
restore_user_env(instance);
|
|
309
|
+
return cookie.retcode;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
LIBCOUCHBASE_API
|
|
313
|
+
void
|
|
314
|
+
lcb_behavior_set_syncmode(lcb_t instance, lcb_syncmode_t mode)
|
|
315
|
+
{
|
|
316
|
+
LCBT_SETTING(instance, syncmode) = mode;
|
|
317
|
+
}
|
|
318
|
+
LIBCOUCHBASE_API
|
|
319
|
+
lcb_syncmode_t
|
|
320
|
+
lcb_behavior_get_syncmode(lcb_t instance)
|
|
321
|
+
{
|
|
322
|
+
return LCBT_SETTING(instance, syncmode);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
LIBCOUCHBASE_API
|
|
326
|
+
lcb_error_t lcb_get_last_error(lcb_t instance){return instance->last_error;}
|
|
327
|
+
|
|
328
|
+
LIBCOUCHBASE_API
|
|
329
|
+
lcb_error_t lcb__create_compat_230(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
|
|
330
|
+
{
|
|
331
|
+
struct lcb_create_st cst = { 0 };
|
|
332
|
+
const struct lcb_cached_config_st *cfg = specific;
|
|
333
|
+
const struct lcb_create_st *crp = &cfg->createopt;
|
|
334
|
+
lcb_error_t err;
|
|
335
|
+
lcb_size_t to_copy = 0;
|
|
336
|
+
|
|
337
|
+
if (type != LCB_CACHED_CONFIG) {
|
|
338
|
+
return LCB_NOT_SUPPORTED;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (crp->version == 0) {
|
|
342
|
+
to_copy = sizeof(cst.v.v0);
|
|
343
|
+
} else if (crp->version == 1) {
|
|
344
|
+
to_copy = sizeof(cst.v.v1);
|
|
345
|
+
} else if (crp->version >= 2) {
|
|
346
|
+
to_copy = sizeof(cst.v.v2);
|
|
347
|
+
} else {
|
|
348
|
+
/* using version 3? */
|
|
349
|
+
return LCB_NOT_SUPPORTED;
|
|
350
|
+
}
|
|
351
|
+
memcpy(&cst, crp, to_copy);
|
|
352
|
+
|
|
353
|
+
if (io) {
|
|
354
|
+
cst.v.v0.io = io;
|
|
355
|
+
}
|
|
356
|
+
err = lcb_create(instance, &cst);
|
|
357
|
+
if (err != LCB_SUCCESS) {
|
|
358
|
+
return err;
|
|
359
|
+
}
|
|
360
|
+
err = lcb_cntl(*instance, LCB_CNTL_SET, LCB_CNTL_CONFIGCACHE,
|
|
361
|
+
(void *)cfg->cachefile);
|
|
362
|
+
if (err != LCB_SUCCESS) {
|
|
363
|
+
lcb_destroy(*instance);
|
|
364
|
+
}
|
|
365
|
+
return err;
|
|
366
|
+
}
|
|
367
|
+
struct compat_220 {
|
|
368
|
+
struct {
|
|
369
|
+
int version;
|
|
370
|
+
struct lcb_create_st1 v1;
|
|
371
|
+
} createopt;
|
|
372
|
+
const char *cachefile;
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
struct compat_230 {
|
|
376
|
+
struct {
|
|
377
|
+
int version;
|
|
378
|
+
struct lcb_create_st2 v2;
|
|
379
|
+
} createopt;
|
|
380
|
+
const char *cachefile;
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
#undef lcb_create_compat
|
|
384
|
+
/**
|
|
385
|
+
* This is _only_ called for versions <= 2.3.0.
|
|
386
|
+
* >= 2.3.0 uses the _230() symbol.
|
|
387
|
+
*
|
|
388
|
+
* The big difference between this and the _230 function is the struct layout,
|
|
389
|
+
* where the newer one contains the filename _before_ the creation options.
|
|
390
|
+
*
|
|
391
|
+
* Woe to he who relies on the compat_st as a 'subclass' of create_st..
|
|
392
|
+
*/
|
|
393
|
+
|
|
394
|
+
LIBCOUCHBASE_API
|
|
395
|
+
lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io);
|
|
396
|
+
LIBCOUCHBASE_API
|
|
397
|
+
lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
|
|
398
|
+
{
|
|
399
|
+
struct lcb_cached_config_st dst;
|
|
400
|
+
const struct compat_220* src220 = specific;
|
|
401
|
+
|
|
402
|
+
if (type == LCB_MEMCACHED_CLUSTER) {
|
|
403
|
+
return lcb__create_compat_230(type, specific, instance, io);
|
|
404
|
+
} else if (type != LCB_CACHED_CONFIG) {
|
|
405
|
+
return LCB_NOT_SUPPORTED;
|
|
406
|
+
}
|
|
407
|
+
#define copy_compat(v) \
|
|
408
|
+
memcpy(&dst.createopt, &v->createopt, sizeof(v->createopt)); \
|
|
409
|
+
dst.cachefile = v->cachefile;
|
|
410
|
+
|
|
411
|
+
if (src220->createopt.version >= 2 || src220->cachefile == NULL) {
|
|
412
|
+
const struct compat_230* src230 = specific;
|
|
413
|
+
copy_compat(src230);
|
|
414
|
+
} else {
|
|
415
|
+
copy_compat(src220);
|
|
416
|
+
}
|
|
417
|
+
return lcb__create_compat_230(type, &dst, instance, io);
|
|
418
|
+
}
|
|
419
|
+
LIBCOUCHBASE_API void lcb_flush_buffers(lcb_t instance, const void *cookie) {
|
|
420
|
+
(void)instance;(void)cookie;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
LIBCOUCHBASE_API
|
|
424
|
+
lcb_error_t lcb_verify_struct_size(lcb_U32 id, lcb_U32 version, lcb_SIZE size)
|
|
425
|
+
{
|
|
426
|
+
#define X(sname, sabbrev, idval, vernum) \
|
|
427
|
+
if (idval == id && size == sizeof(sname) && version <= vernum) { return LCB_SUCCESS; }
|
|
428
|
+
LCB_XSSIZES(X);
|
|
429
|
+
#undef X
|
|
430
|
+
return LCB_EINVAL;
|
|
431
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "internal.h"
|
|
19
|
+
|
|
20
|
+
void lcb_list_init(lcb_list_t *list)
|
|
21
|
+
{
|
|
22
|
+
list->next = list;
|
|
23
|
+
list->prev = list;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static void list_insert(lcb_list_t *prev, lcb_list_t *next, lcb_list_t *item)
|
|
27
|
+
{
|
|
28
|
+
item->next = next;
|
|
29
|
+
item->prev = prev;
|
|
30
|
+
next->prev = item;
|
|
31
|
+
prev->next = item;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void lcb_list_prepend(lcb_list_t *list, lcb_list_t *item)
|
|
35
|
+
{
|
|
36
|
+
list_insert(list, list->next, item);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void lcb_list_append(lcb_list_t *list, lcb_list_t *item)
|
|
40
|
+
{
|
|
41
|
+
list_insert(list->prev, list, item);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static void list_eject(lcb_list_t *prev, lcb_list_t *next)
|
|
45
|
+
{
|
|
46
|
+
next->prev = prev;
|
|
47
|
+
prev->next = next;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void lcb_list_delete(lcb_list_t *item)
|
|
51
|
+
{
|
|
52
|
+
list_eject(item->prev, item->next);
|
|
53
|
+
item->next = item->prev = NULL;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
lcb_list_t *lcb_list_shift(lcb_list_t *list)
|
|
58
|
+
{
|
|
59
|
+
lcb_list_t *item;
|
|
60
|
+
|
|
61
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
62
|
+
return NULL;
|
|
63
|
+
}
|
|
64
|
+
item = list->next;
|
|
65
|
+
lcb_list_delete(item);
|
|
66
|
+
return item;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
lcb_list_t *lcb_list_pop(lcb_list_t *list)
|
|
70
|
+
{
|
|
71
|
+
lcb_list_t *item;
|
|
72
|
+
|
|
73
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
74
|
+
return NULL;
|
|
75
|
+
}
|
|
76
|
+
item = list->prev;
|
|
77
|
+
lcb_list_delete(item);
|
|
78
|
+
return item;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
int lcb_list_contains(lcb_list_t *list, lcb_list_t *item)
|
|
82
|
+
{
|
|
83
|
+
lcb_list_t *ptr = list->next;
|
|
84
|
+
|
|
85
|
+
while (ptr != list && ptr != item) {
|
|
86
|
+
ptr = ptr->next;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return (ptr == item) ? 1 : 0;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
void lcb_list_add_sorted(lcb_list_t *list, lcb_list_t *item, lcb_list_cmp_fn cmp)
|
|
93
|
+
{
|
|
94
|
+
lcb_list_t *p;
|
|
95
|
+
|
|
96
|
+
if (LCB_LIST_IS_EMPTY(list)) {
|
|
97
|
+
list_insert(list->prev, list, item);
|
|
98
|
+
} else {
|
|
99
|
+
LCB_LIST_FOR(p, list) {
|
|
100
|
+
if (cmp(item, p) < 0) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
list_insert(p->prev, p, item);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
void lcb_clist_init(lcb_clist_t *cl)
|
|
110
|
+
{
|
|
111
|
+
lcb_list_init((lcb_list_t*)cl);
|
|
112
|
+
cl->size = 0;
|
|
113
|
+
}
|
|
114
|
+
void lcb_clist_append(lcb_clist_t *cl, lcb_list_t *item)
|
|
115
|
+
{
|
|
116
|
+
lcb_list_append((lcb_list_t*)cl, item);
|
|
117
|
+
cl->size++;
|
|
118
|
+
}
|
|
119
|
+
void lcb_clist_prepend(lcb_clist_t *cl, lcb_list_t *item)
|
|
120
|
+
{
|
|
121
|
+
lcb_list_prepend((lcb_list_t *)cl, item);
|
|
122
|
+
cl->size++;
|
|
123
|
+
}
|
|
124
|
+
void lcb_clist_delete(lcb_clist_t *cl, lcb_list_t *item)
|
|
125
|
+
{
|
|
126
|
+
lcb_list_delete(item);
|
|
127
|
+
cl->size--;
|
|
128
|
+
}
|
|
129
|
+
lcb_list_t *lcb_clist_pop(lcb_clist_t *cl)
|
|
130
|
+
{
|
|
131
|
+
lcb_list_t *ret = lcb_list_pop((lcb_list_t*)cl);
|
|
132
|
+
if (ret) {
|
|
133
|
+
cl->size--;
|
|
134
|
+
}
|
|
135
|
+
return ret;
|
|
136
|
+
}
|
|
137
|
+
lcb_list_t *lcb_clist_shift(lcb_clist_t *cl)
|
|
138
|
+
{
|
|
139
|
+
lcb_list_t *ret = lcb_list_shift((lcb_list_t *)cl);
|
|
140
|
+
if (ret) {
|
|
141
|
+
cl->size--;
|
|
142
|
+
}
|
|
143
|
+
return ret;
|
|
144
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LIBCOUCHBASE_LIST_H
|
|
19
|
+
#define LIBCOUCHBASE_LIST_H 1
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
/* Circular list implementation
|
|
26
|
+
*
|
|
27
|
+
* Could be used to implement queues, stacks etc.
|
|
28
|
+
*
|
|
29
|
+
* Declare list in your structure:
|
|
30
|
+
*
|
|
31
|
+
* typedef struct {
|
|
32
|
+
* lcb_list_t list;
|
|
33
|
+
* lcb_uint32_t msec;
|
|
34
|
+
* void (*callback)(struct timer *tm);
|
|
35
|
+
* } lcb_timer_t;
|
|
36
|
+
*
|
|
37
|
+
* Initialize head of list:
|
|
38
|
+
*
|
|
39
|
+
* lcb_timer_t tm;
|
|
40
|
+
* lcb_list_init(&tm.list);
|
|
41
|
+
*
|
|
42
|
+
* Add new items:
|
|
43
|
+
*
|
|
44
|
+
* lcb_timer_t *t;
|
|
45
|
+
* t->msec = 2000;
|
|
46
|
+
* t->callback = my_cb;
|
|
47
|
+
* lcb_list_append(&tm.list, t);
|
|
48
|
+
*
|
|
49
|
+
* Iterate over items:
|
|
50
|
+
*
|
|
51
|
+
* lcb_timer_t *t, *n;
|
|
52
|
+
*
|
|
53
|
+
* for (ii = tm.list.next; ii != &tm.list; ii = ii->next) {
|
|
54
|
+
* t = LCB_LIST_ITEM(ii, lcb_timer_t, list);
|
|
55
|
+
* printf("timeout: %d\n", t->msec);
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* LCB_LIST_FOR(ii, &tm.list) {
|
|
59
|
+
* t = LCB_LIST_ITEM(ii, lcb_timer_t, list);
|
|
60
|
+
* printf("timeout: %d\n", t->msec);
|
|
61
|
+
* }
|
|
62
|
+
*
|
|
63
|
+
* LCB_LIST_SAFE_FOR(ii, n, &tm.list) {
|
|
64
|
+
* t = LCB_LIST_ITEM(ii, lcb_timer_t, list);
|
|
65
|
+
* printf("timeout: %d\n", t->msec);
|
|
66
|
+
* }
|
|
67
|
+
*/
|
|
68
|
+
typedef struct lcb_list_s lcb_list_t;
|
|
69
|
+
struct lcb_list_s {
|
|
70
|
+
lcb_list_t *next;
|
|
71
|
+
lcb_list_t *prev;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
typedef struct lcb_clist_s {
|
|
75
|
+
lcb_list_t *next;
|
|
76
|
+
lcb_list_t *prev;
|
|
77
|
+
lcb_size_t size;
|
|
78
|
+
} lcb_clist_t;
|
|
79
|
+
|
|
80
|
+
typedef int (*lcb_list_cmp_fn)(lcb_list_t *a, lcb_list_t *b);
|
|
81
|
+
|
|
82
|
+
void lcb_list_init(lcb_list_t *list);
|
|
83
|
+
void lcb_list_prepend(lcb_list_t *list, lcb_list_t *item);
|
|
84
|
+
void lcb_list_append(lcb_list_t *list, lcb_list_t *item);
|
|
85
|
+
void lcb_list_delete(lcb_list_t *item);
|
|
86
|
+
lcb_list_t *lcb_list_shift(lcb_list_t *list);
|
|
87
|
+
lcb_list_t *lcb_list_pop(lcb_list_t *list);
|
|
88
|
+
int lcb_list_contains(lcb_list_t *list, lcb_list_t *item);
|
|
89
|
+
void lcb_list_add_sorted(lcb_list_t *list, lcb_list_t *item, lcb_list_cmp_fn cmp);
|
|
90
|
+
|
|
91
|
+
/** Definitions for type safety. Rather than macros */
|
|
92
|
+
void lcb_clist_init(lcb_clist_t*);
|
|
93
|
+
void lcb_clist_append(lcb_clist_t*, lcb_list_t*);
|
|
94
|
+
void lcb_clist_prepend(lcb_clist_t*, lcb_list_t*);
|
|
95
|
+
void lcb_clist_delete(lcb_clist_t*,lcb_list_t*);
|
|
96
|
+
lcb_list_t* lcb_clist_shift(lcb_clist_t*);
|
|
97
|
+
lcb_list_t* lcb_clist_pop(lcb_clist_t*);
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
#define LCB_LIST_IS_EMPTY(list) \
|
|
101
|
+
((list) == (list)->next && (list) == (list)->prev)
|
|
102
|
+
|
|
103
|
+
#define LCB_LIST_ITEM(ptr, type, member) \
|
|
104
|
+
((type *) (void *) ((char *)(ptr) - offsetof(type, member)))
|
|
105
|
+
|
|
106
|
+
#define LCB_LIST_FOR(pos, list) \
|
|
107
|
+
for (pos = (list)->next; pos != (list); pos = pos->next)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
#define LCB_LIST_SAFE_FOR(pos, n, list) \
|
|
111
|
+
for (pos = (list)->next, n = pos->next; pos != (list); pos = n, n = pos->next)
|
|
112
|
+
|
|
113
|
+
#define LCB_LIST_HAS_NEXT(ll, item) \
|
|
114
|
+
((item)->next != ll)
|
|
115
|
+
|
|
116
|
+
#define LCB_CLIST_SIZE(cl) (cl)->size
|
|
117
|
+
|
|
118
|
+
#define LCB_LIST_TAIL(list) \
|
|
119
|
+
((LCB_LIST_IS_EMPTY(list)) ? NULL : (list)->prev)
|
|
120
|
+
|
|
121
|
+
#define LCB_LIST_HEAD(list) \
|
|
122
|
+
((LCB_LIST_IS_EMPTY(list)) ? NULL : (list)->next)
|
|
123
|
+
|
|
124
|
+
#ifdef __cplusplus
|
|
125
|
+
}
|
|
126
|
+
#endif
|
|
127
|
+
#endif
|