libcouchbase 0.0.1
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 +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -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 +20 -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 +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -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 +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -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/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -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 +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -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 +71 -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 +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -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/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -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 +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -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/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -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 +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -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 +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -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 +73 -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 +108 -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 +466 -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 +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -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 +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -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 +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -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 +430 -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 +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -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 +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -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.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -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.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -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 +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -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 +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -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 +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -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_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -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 +104 -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 +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -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 +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -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 +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -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 +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -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 +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -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 +179 -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/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/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -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/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2006 Dustin Sallings <dustin@spy.net>
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#include <math.h>
|
|
6
|
+
#include "internal.h"
|
|
7
|
+
#include "genhash.h"
|
|
8
|
+
|
|
9
|
+
/* Table of 32 primes by their distance from the nearest power of two */
|
|
10
|
+
static lcb_size_t prime_size_table[] = {
|
|
11
|
+
3, 7, 13, 23, 47, 97, 193, 383, 769, 1531, 3067, 6143, 12289, 24571, 49157,
|
|
12
|
+
98299, 196613, 393209, 786433, 1572869, 3145721, 6291449, 12582917,
|
|
13
|
+
25165813, 50331653, 100663291, 201326611, 402653189, 805306357,
|
|
14
|
+
1610612741
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
#define TABLE_SIZE ((int)(sizeof(prime_size_table) / sizeof(int)))
|
|
18
|
+
|
|
19
|
+
struct genhash_entry_t {
|
|
20
|
+
/** The key for this entry */
|
|
21
|
+
void *key;
|
|
22
|
+
/** Size of the key */
|
|
23
|
+
lcb_size_t nkey;
|
|
24
|
+
/** The value for this entry */
|
|
25
|
+
void *value;
|
|
26
|
+
/** Size of the value */
|
|
27
|
+
lcb_size_t nvalue;
|
|
28
|
+
/** Pointer to the next entry */
|
|
29
|
+
struct genhash_entry_t *next;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
struct _genhash {
|
|
33
|
+
lcb_size_t size;
|
|
34
|
+
struct lcb_hash_ops ops;
|
|
35
|
+
struct genhash_entry_t *buckets[1];
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
static lcb_size_t estimate_table_size(lcb_size_t est);
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
static void *dup_key(genhash_t *h, const void *key, lcb_size_t klen)
|
|
42
|
+
{
|
|
43
|
+
if (h->ops.dup_key != NULL) {
|
|
44
|
+
return h->ops.dup_key(key, klen);
|
|
45
|
+
} else {
|
|
46
|
+
return (void *)key;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static void *dup_value(genhash_t *h, const void *value, lcb_size_t vlen)
|
|
51
|
+
{
|
|
52
|
+
if (h->ops.dup_value != NULL) {
|
|
53
|
+
return h->ops.dup_value(value, vlen);
|
|
54
|
+
} else {
|
|
55
|
+
return (void *)value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static void free_key(genhash_t *h, void *key)
|
|
60
|
+
{
|
|
61
|
+
if (h->ops.free_key != NULL) {
|
|
62
|
+
h->ops.free_key(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static void free_value(genhash_t *h, void *value)
|
|
67
|
+
{
|
|
68
|
+
if (h->ops.free_value != NULL) {
|
|
69
|
+
h->ops.free_value(value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static lcb_size_t estimate_table_size(lcb_size_t est)
|
|
74
|
+
{
|
|
75
|
+
lcb_size_t rv = 0;
|
|
76
|
+
while (prime_size_table[rv] < est && rv + 1 < TABLE_SIZE) {
|
|
77
|
+
rv++;
|
|
78
|
+
}
|
|
79
|
+
return prime_size_table[rv];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
genhash_t *genhash_init(lcb_size_t est, struct lcb_hash_ops ops)
|
|
83
|
+
{
|
|
84
|
+
genhash_t *rv = NULL;
|
|
85
|
+
lcb_size_t size = 0;
|
|
86
|
+
if (est < 1) {
|
|
87
|
+
return NULL;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
lcb_assert(ops.hashfunc != NULL);
|
|
91
|
+
lcb_assert(ops.hasheq != NULL);
|
|
92
|
+
lcb_assert((ops.dup_key != NULL && ops.free_key != NULL) || ops.free_key == NULL);
|
|
93
|
+
lcb_assert((ops.dup_value != NULL && ops.free_value != NULL) || ops.free_value == NULL);
|
|
94
|
+
|
|
95
|
+
size = estimate_table_size(est);
|
|
96
|
+
rv = calloc(1, sizeof(genhash_t)
|
|
97
|
+
+ (size * sizeof(struct genhash_entry_t *)));
|
|
98
|
+
if (rv == NULL) {
|
|
99
|
+
return NULL;
|
|
100
|
+
}
|
|
101
|
+
rv->size = size;
|
|
102
|
+
rv->ops = ops;
|
|
103
|
+
|
|
104
|
+
return rv;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void genhash_free(genhash_t *h)
|
|
108
|
+
{
|
|
109
|
+
if (h != NULL) {
|
|
110
|
+
genhash_clear(h);
|
|
111
|
+
free(h);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
int genhash_store(genhash_t *h, const void *k, lcb_size_t klen,
|
|
116
|
+
const void *v, lcb_size_t vlen)
|
|
117
|
+
{
|
|
118
|
+
lcb_size_t n = 0;
|
|
119
|
+
struct genhash_entry_t *p;
|
|
120
|
+
|
|
121
|
+
lcb_assert(h != NULL);
|
|
122
|
+
|
|
123
|
+
n = h->ops.hashfunc(k, klen) % h->size;
|
|
124
|
+
lcb_assert(n < h->size);
|
|
125
|
+
|
|
126
|
+
p = calloc(1, sizeof(struct genhash_entry_t));
|
|
127
|
+
if (!p) {
|
|
128
|
+
return -1;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
p->key = dup_key(h, k, klen);
|
|
132
|
+
p->nkey = klen;
|
|
133
|
+
p->value = dup_value(h, v, vlen);
|
|
134
|
+
p->nvalue = vlen;
|
|
135
|
+
|
|
136
|
+
p->next = h->buckets[n];
|
|
137
|
+
h->buckets[n] = p;
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
static struct genhash_entry_t *genhash_find_entry(genhash_t *h,
|
|
142
|
+
const void *k,
|
|
143
|
+
lcb_size_t klen)
|
|
144
|
+
{
|
|
145
|
+
lcb_size_t n = 0;
|
|
146
|
+
struct genhash_entry_t *p;
|
|
147
|
+
|
|
148
|
+
lcb_assert(h != NULL);
|
|
149
|
+
n = h->ops.hashfunc(k, klen) % h->size;
|
|
150
|
+
lcb_assert(n < h->size);
|
|
151
|
+
|
|
152
|
+
p = h->buckets[n];
|
|
153
|
+
for (p = h->buckets[n]; p && !h->ops.hasheq(k, klen, p->key, p->nkey); p = p->next);
|
|
154
|
+
return p;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
void *genhash_find(genhash_t *h, const void *k, lcb_size_t klen)
|
|
158
|
+
{
|
|
159
|
+
struct genhash_entry_t *p;
|
|
160
|
+
void *rv = NULL;
|
|
161
|
+
|
|
162
|
+
p = genhash_find_entry(h, k, klen);
|
|
163
|
+
|
|
164
|
+
if (p) {
|
|
165
|
+
rv = p->value;
|
|
166
|
+
}
|
|
167
|
+
return rv;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
enum update_type genhash_update(genhash_t *h, const void *k, lcb_size_t klen,
|
|
171
|
+
const void *v, lcb_size_t vlen)
|
|
172
|
+
{
|
|
173
|
+
struct genhash_entry_t *p;
|
|
174
|
+
enum update_type rv = 0;
|
|
175
|
+
|
|
176
|
+
p = genhash_find_entry(h, k, klen);
|
|
177
|
+
|
|
178
|
+
if (p) {
|
|
179
|
+
free_value(h, p->value);
|
|
180
|
+
p->value = dup_value(h, v, vlen);
|
|
181
|
+
rv = MODIFICATION;
|
|
182
|
+
} else {
|
|
183
|
+
if (-1 == genhash_store(h, k, klen, v, vlen)) {
|
|
184
|
+
rv = ALLOC_FAILURE;
|
|
185
|
+
}
|
|
186
|
+
rv = NEW;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return rv;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
enum update_type genhash_fun_update(genhash_t *h,
|
|
193
|
+
const void *k,
|
|
194
|
+
lcb_size_t klen,
|
|
195
|
+
void * (*upd)(const void *,
|
|
196
|
+
const void *,
|
|
197
|
+
lcb_size_t *,
|
|
198
|
+
void *),
|
|
199
|
+
void (*fr)(void *),
|
|
200
|
+
void *arg,
|
|
201
|
+
const void *def,
|
|
202
|
+
lcb_size_t deflen)
|
|
203
|
+
{
|
|
204
|
+
struct genhash_entry_t *p;
|
|
205
|
+
enum update_type rv = 0;
|
|
206
|
+
lcb_size_t newSize = 0;
|
|
207
|
+
|
|
208
|
+
p = genhash_find_entry(h, k, klen);
|
|
209
|
+
|
|
210
|
+
if (p) {
|
|
211
|
+
void *newValue = upd(k, p->value, &newSize, arg);
|
|
212
|
+
free_value(h, p->value);
|
|
213
|
+
p->value = dup_value(h, newValue, newSize);
|
|
214
|
+
fr(newValue);
|
|
215
|
+
rv = MODIFICATION;
|
|
216
|
+
} else {
|
|
217
|
+
void *newValue = upd(k, def, &newSize, arg);
|
|
218
|
+
genhash_store(h, k, klen, newValue, newSize);
|
|
219
|
+
fr(newValue);
|
|
220
|
+
rv = NEW;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
(void)deflen;
|
|
224
|
+
return rv;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
static void free_item(genhash_t *h, struct genhash_entry_t *i)
|
|
228
|
+
{
|
|
229
|
+
lcb_assert(i);
|
|
230
|
+
free_key(h, i->key);
|
|
231
|
+
free_value(h, i->value);
|
|
232
|
+
free(i);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
int genhash_delete(genhash_t *h, const void *k, lcb_size_t klen)
|
|
236
|
+
{
|
|
237
|
+
struct genhash_entry_t *deleteme = NULL;
|
|
238
|
+
lcb_size_t n = 0;
|
|
239
|
+
int rv = 0;
|
|
240
|
+
|
|
241
|
+
lcb_assert(h != NULL);
|
|
242
|
+
n = h->ops.hashfunc(k, klen) % h->size;
|
|
243
|
+
lcb_assert(n < h->size);
|
|
244
|
+
|
|
245
|
+
if (h->buckets[n] != NULL) {
|
|
246
|
+
/* Special case the first one */
|
|
247
|
+
if (h->ops.hasheq(h->buckets[n]->key, h->buckets[n]->nkey, k, klen)) {
|
|
248
|
+
deleteme = h->buckets[n];
|
|
249
|
+
h->buckets[n] = deleteme->next;
|
|
250
|
+
} else {
|
|
251
|
+
struct genhash_entry_t *p = NULL;
|
|
252
|
+
for (p = h->buckets[n]; deleteme == NULL && p->next != NULL; p = p->next) {
|
|
253
|
+
if (h->ops.hasheq(p->next->key, p->next->nkey, k, klen)) {
|
|
254
|
+
deleteme = p->next;
|
|
255
|
+
p->next = deleteme->next;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (deleteme != NULL) {
|
|
261
|
+
free_item(h, deleteme);
|
|
262
|
+
rv++;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return rv;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
int genhash_delete_all(genhash_t *h, const void *k, lcb_size_t klen)
|
|
269
|
+
{
|
|
270
|
+
int rv = 0;
|
|
271
|
+
while (genhash_delete(h, k, klen) == 1) {
|
|
272
|
+
rv++;
|
|
273
|
+
}
|
|
274
|
+
return rv;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
void genhash_iter(genhash_t *h,
|
|
278
|
+
void (*iterfunc)(const void *key, lcb_size_t nkey,
|
|
279
|
+
const void *val, lcb_size_t nval,
|
|
280
|
+
void *arg), void *arg)
|
|
281
|
+
{
|
|
282
|
+
lcb_size_t i = 0;
|
|
283
|
+
struct genhash_entry_t *p = NULL;
|
|
284
|
+
lcb_assert(h != NULL);
|
|
285
|
+
|
|
286
|
+
for (i = 0; i < h->size; i++) {
|
|
287
|
+
for (p = h->buckets[i]; p != NULL; p = p->next) {
|
|
288
|
+
iterfunc(p->key, p->nkey, p->value, p->nvalue, arg);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
int genhash_clear(genhash_t *h)
|
|
294
|
+
{
|
|
295
|
+
lcb_size_t i = 0;
|
|
296
|
+
int rv = 0;
|
|
297
|
+
lcb_assert(h != NULL);
|
|
298
|
+
|
|
299
|
+
for (i = 0; i < h->size; i++) {
|
|
300
|
+
while (h->buckets[i]) {
|
|
301
|
+
struct genhash_entry_t *p = NULL;
|
|
302
|
+
p = h->buckets[i];
|
|
303
|
+
h->buckets[i] = p->next;
|
|
304
|
+
free_item(h, p);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return rv;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
static void count_entries(const void *key,
|
|
312
|
+
lcb_size_t klen,
|
|
313
|
+
const void *val,
|
|
314
|
+
lcb_size_t vlen,
|
|
315
|
+
void *arg)
|
|
316
|
+
{
|
|
317
|
+
int *count = (int *)arg;
|
|
318
|
+
(*count)++;
|
|
319
|
+
(void)key;
|
|
320
|
+
(void)klen;
|
|
321
|
+
(void)val;
|
|
322
|
+
(void)vlen;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
int genhash_size(genhash_t *h)
|
|
326
|
+
{
|
|
327
|
+
int rv = 0;
|
|
328
|
+
lcb_assert(h != NULL);
|
|
329
|
+
genhash_iter(h, count_entries, &rv);
|
|
330
|
+
return rv;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
int genhash_size_for_key(genhash_t *h, const void *k, lcb_size_t klen)
|
|
334
|
+
{
|
|
335
|
+
int rv = 0;
|
|
336
|
+
lcb_assert(h != NULL);
|
|
337
|
+
genhash_iter_key(h, k, klen, count_entries, &rv);
|
|
338
|
+
return rv;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
void genhash_iter_key(genhash_t *h, const void *key, lcb_size_t klen,
|
|
342
|
+
void (*iterfunc)(const void *key, lcb_size_t klen,
|
|
343
|
+
const void *val, lcb_size_t vlen,
|
|
344
|
+
void *arg), void *arg)
|
|
345
|
+
{
|
|
346
|
+
lcb_size_t n = 0;
|
|
347
|
+
struct genhash_entry_t *p = NULL;
|
|
348
|
+
|
|
349
|
+
lcb_assert(h != NULL);
|
|
350
|
+
n = h->ops.hashfunc(key, klen) % h->size;
|
|
351
|
+
lcb_assert(n < h->size);
|
|
352
|
+
|
|
353
|
+
for (p = h->buckets[n]; p != NULL; p = p->next) {
|
|
354
|
+
if (h->ops.hasheq(key, klen, p->key, p->nkey)) {
|
|
355
|
+
iterfunc(p->key, p->nkey, p->value, p->nvalue, arg);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
int genhash_string_hash(const void *p, lcb_size_t nkey)
|
|
361
|
+
{
|
|
362
|
+
int rv = 5381;
|
|
363
|
+
int i = 0;
|
|
364
|
+
char *str = (char *)p;
|
|
365
|
+
|
|
366
|
+
for (i = 0; i < (int)nkey; i++) {
|
|
367
|
+
lcb_assert(str[i]);
|
|
368
|
+
rv = ((rv << 5) + rv) ^ str[i];
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
return rv;
|
|
372
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Generic hash table implementation.
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2006 Dustin Sallings <dustin@spy.net>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef GENHASH_H
|
|
8
|
+
#define GENHASH_H 1
|
|
9
|
+
|
|
10
|
+
/*! \mainpage genhash
|
|
11
|
+
*
|
|
12
|
+
* \section intro_sec Introduction
|
|
13
|
+
*
|
|
14
|
+
* genhash is a generic hash table implementation in C. It's
|
|
15
|
+
* well-tested, freely available (MIT-license) and does what you need.
|
|
16
|
+
*
|
|
17
|
+
* \section docs_sec API Documentation
|
|
18
|
+
*
|
|
19
|
+
* Jump right into <a href="group___core.html">the API docs</a> to get started.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* \defgroup Core genhash core
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* \addtogroup Core
|
|
28
|
+
* @{
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Operations on keys and values in the hash table.
|
|
33
|
+
*/
|
|
34
|
+
struct lcb_hash_ops {
|
|
35
|
+
/**
|
|
36
|
+
* Function to compute a hash for the given value.
|
|
37
|
+
*/
|
|
38
|
+
int (*hashfunc)(const void *, lcb_size_t);
|
|
39
|
+
/**
|
|
40
|
+
* Function that returns true if the given keys are equal.
|
|
41
|
+
*/
|
|
42
|
+
int (*hasheq)(const void *, lcb_size_t, const void *, lcb_size_t);
|
|
43
|
+
/**
|
|
44
|
+
* Function to duplicate a key for storage.
|
|
45
|
+
*/
|
|
46
|
+
void *(*dup_key)(const void *, lcb_size_t);
|
|
47
|
+
/**
|
|
48
|
+
* Function to duplicate a value for storage.
|
|
49
|
+
*/
|
|
50
|
+
void *(*dup_value)(const void *, lcb_size_t);
|
|
51
|
+
/**
|
|
52
|
+
* Function to free a key.
|
|
53
|
+
*/
|
|
54
|
+
void (*free_key)(void *);
|
|
55
|
+
/**
|
|
56
|
+
* Function to free a value.
|
|
57
|
+
*/
|
|
58
|
+
void (*free_value)(void *);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The hash table structure.
|
|
63
|
+
*/
|
|
64
|
+
typedef struct _genhash genhash_t ;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Type of update performed by an update function.
|
|
68
|
+
*/
|
|
69
|
+
enum update_type {
|
|
70
|
+
MODIFICATION, /**< This update is modifying an existing entry */
|
|
71
|
+
NEW, /**< This update is creating a new entry */
|
|
72
|
+
ALLOC_FAILURE
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create a new generic hashtable.
|
|
77
|
+
*
|
|
78
|
+
* @param est the estimated number of items to store (must be > 0)
|
|
79
|
+
* @param ops the key and value operations
|
|
80
|
+
*
|
|
81
|
+
* @return the new genhash_t or NULL if one cannot be created
|
|
82
|
+
*/
|
|
83
|
+
genhash_t *genhash_init(lcb_size_t est, struct lcb_hash_ops ops);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Free a gen hash.
|
|
87
|
+
*
|
|
88
|
+
* @param h the genhash to free (may be NULL)
|
|
89
|
+
*/
|
|
90
|
+
void genhash_free(genhash_t *h);
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Store an item.
|
|
94
|
+
*
|
|
95
|
+
* @param h the genhash
|
|
96
|
+
* @param k the key
|
|
97
|
+
* @param v the value
|
|
98
|
+
*/
|
|
99
|
+
int genhash_store(genhash_t *h, const void *k, lcb_size_t klen,
|
|
100
|
+
const void *v, lcb_size_t vlen);
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get the most recent value stored for the given key.
|
|
104
|
+
*
|
|
105
|
+
* @param h the genhash
|
|
106
|
+
* @param k the key
|
|
107
|
+
*
|
|
108
|
+
* @return the value, or NULL if one cannot be found
|
|
109
|
+
*/
|
|
110
|
+
void *genhash_find(genhash_t *h, const void *k, lcb_size_t klen);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Delete the most recent value stored for a key.
|
|
114
|
+
*
|
|
115
|
+
* @param h the genhash
|
|
116
|
+
* @param k the key
|
|
117
|
+
*
|
|
118
|
+
* @return the number of items deleted
|
|
119
|
+
*/
|
|
120
|
+
int genhash_delete(genhash_t *h, const void *k, lcb_size_t klen);
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Delete all mappings of a given key.
|
|
124
|
+
*
|
|
125
|
+
* @param h the genhash
|
|
126
|
+
* @param k the key
|
|
127
|
+
*
|
|
128
|
+
* @return the number of items deleted
|
|
129
|
+
*/
|
|
130
|
+
int genhash_delete_all(genhash_t *h, const void *k, lcb_size_t klen);
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Create or update an item in-place.
|
|
134
|
+
*
|
|
135
|
+
* @param h the genhash
|
|
136
|
+
* @param k the key
|
|
137
|
+
* @param v the new value to store for this key
|
|
138
|
+
*
|
|
139
|
+
* @return an indicator of whether this created a new item or updated
|
|
140
|
+
* an existing one
|
|
141
|
+
*/
|
|
142
|
+
enum update_type genhash_update(genhash_t *h, const void *k, lcb_size_t klen,
|
|
143
|
+
const void *v, lcb_size_t vlen);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Create or update an item in-place with a function.
|
|
147
|
+
*
|
|
148
|
+
* @param h hashtable
|
|
149
|
+
* @param key the key of the item
|
|
150
|
+
* @param upd function that will be called with the key and current
|
|
151
|
+
* value. Should return the new value.
|
|
152
|
+
* @param fr function to free the return value returned by the update
|
|
153
|
+
* function
|
|
154
|
+
* @param def default value
|
|
155
|
+
*
|
|
156
|
+
* @return an indicator of whether this created a new item or updated
|
|
157
|
+
* an existing one
|
|
158
|
+
*/
|
|
159
|
+
enum update_type genhash_fun_update(genhash_t *h, const void *key, lcb_size_t klen,
|
|
160
|
+
void * (*upd)(const void *k, const void *oldv,
|
|
161
|
+
lcb_size_t *ns, void *a),
|
|
162
|
+
void (*fr)(void *),
|
|
163
|
+
void *arg,
|
|
164
|
+
const void *def, lcb_size_t deflen);
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Iterate all keys and values in a hash table.
|
|
168
|
+
*
|
|
169
|
+
* @param h the genhash
|
|
170
|
+
* @param iterfunc a function that will be called once for every k/v pair
|
|
171
|
+
* @param arg an argument to be passed to the iterfunc on each iteration
|
|
172
|
+
*/
|
|
173
|
+
void genhash_iter(genhash_t *h,
|
|
174
|
+
void (*iterfunc)(const void *key, lcb_size_t nkey,
|
|
175
|
+
const void *val, lcb_size_t nval,
|
|
176
|
+
void *arg),
|
|
177
|
+
void *arg);
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Iterate all values for a given key in a hash table.
|
|
181
|
+
*
|
|
182
|
+
* @param h the genhash
|
|
183
|
+
* @param key the key to iterate
|
|
184
|
+
* @param iterfunc a function that will be called once for every k/v pair
|
|
185
|
+
* @param arg an argument to be passed to the iterfunc on each iteration
|
|
186
|
+
*/
|
|
187
|
+
void genhash_iter_key(genhash_t *h, const void *key, lcb_size_t nkey,
|
|
188
|
+
void (*iterfunc)(const void *key, lcb_size_t inkey,
|
|
189
|
+
const void *val, lcb_size_t inval,
|
|
190
|
+
void *arg),
|
|
191
|
+
void *arg);
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Get the total number of entries in this hash table.
|
|
195
|
+
*
|
|
196
|
+
* @param h the genhash
|
|
197
|
+
*
|
|
198
|
+
* @return the number of entries in the hash table
|
|
199
|
+
*/
|
|
200
|
+
int genhash_size(genhash_t *h);
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Remove all items from a genhash.
|
|
204
|
+
*
|
|
205
|
+
* @param h the genhash
|
|
206
|
+
*
|
|
207
|
+
* @return the number of items removed
|
|
208
|
+
*/
|
|
209
|
+
int genhash_clear(genhash_t *h);
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Get the total number of entries in this hash table that map to the given
|
|
213
|
+
* key.
|
|
214
|
+
*
|
|
215
|
+
* @param h the genhash
|
|
216
|
+
* @param k a key
|
|
217
|
+
*
|
|
218
|
+
* @return the number of entries keyed with the given key
|
|
219
|
+
*/
|
|
220
|
+
int genhash_size_for_key(genhash_t *h, const void *k, lcb_size_t nkey);
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Convenient hash function for strings.
|
|
224
|
+
*
|
|
225
|
+
* @param k a null-terminated string key.
|
|
226
|
+
*
|
|
227
|
+
* @return a hash value for this string.
|
|
228
|
+
*/
|
|
229
|
+
int genhash_string_hash(const void *k, lcb_size_t nkey);
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* @}
|
|
233
|
+
*/
|
|
234
|
+
|
|
235
|
+
#endif /* GENHASH_H */
|