laag-libczmq 4.1.0.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 +57 -0
- data/LICENSE.txt +373 -0
- data/README.org +34 -0
- data/ext/laag/libczmq/extconf.rb +24 -0
- data/laag-libczmq.gemspec +21 -0
- data/lib/laag/libczmq.rb +30 -0
- data/vendor/github.com/zeromq/czmq/.editorconfig +19 -0
- data/vendor/github.com/zeromq/czmq/.gitattributes +5 -0
- data/vendor/github.com/zeromq/czmq/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- data/vendor/github.com/zeromq/czmq/.gitignore +137 -0
- data/vendor/github.com/zeromq/czmq/.travis.yml +126 -0
- data/vendor/github.com/zeromq/czmq/AUTHORS +69 -0
- data/vendor/github.com/zeromq/czmq/CMakeLists.txt +653 -0
- data/vendor/github.com/zeromq/czmq/CONTRIBUTING.md +19 -0
- data/vendor/github.com/zeromq/czmq/Dockerfile +29 -0
- data/vendor/github.com/zeromq/czmq/Findlibsodium.cmake +47 -0
- data/vendor/github.com/zeromq/czmq/Findlibzmq.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Findlz4.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Findsystemd.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Finduuid.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/INSTALL.cygwin +13 -0
- data/vendor/github.com/zeromq/czmq/ISSUES.cygwin +6 -0
- data/vendor/github.com/zeromq/czmq/Jenkinsfile +439 -0
- data/vendor/github.com/zeromq/czmq/LICENSE +373 -0
- data/vendor/github.com/zeromq/czmq/Makefile.am +70 -0
- data/vendor/github.com/zeromq/czmq/NEWS +823 -0
- data/vendor/github.com/zeromq/czmq/README.cygwin +23 -0
- data/vendor/github.com/zeromq/czmq/README.md +9345 -0
- data/vendor/github.com/zeromq/czmq/README.txt +512 -0
- data/vendor/github.com/zeromq/czmq/Vagrantfile +49 -0
- data/vendor/github.com/zeromq/czmq/acinclude.m4 +7 -0
- data/vendor/github.com/zeromq/czmq/api/zactor.api +77 -0
- data/vendor/github.com/zeromq/czmq/api/zargs.api +110 -0
- data/vendor/github.com/zeromq/czmq/api/zarmour.api +103 -0
- data/vendor/github.com/zeromq/czmq/api/zcert.api +128 -0
- data/vendor/github.com/zeromq/czmq/api/zcertstore.api +80 -0
- data/vendor/github.com/zeromq/czmq/api/zchunk.api +171 -0
- data/vendor/github.com/zeromq/czmq/api/zclock.api +43 -0
- data/vendor/github.com/zeromq/czmq/api/zconfig.api +205 -0
- data/vendor/github.com/zeromq/czmq/api/zdigest.api +45 -0
- data/vendor/github.com/zeromq/czmq/api/zdir.api +124 -0
- data/vendor/github.com/zeromq/czmq/api/zdir_patch.api +62 -0
- data/vendor/github.com/zeromq/czmq/api/zfile.api +157 -0
- data/vendor/github.com/zeromq/czmq/api/zframe.api +157 -0
- data/vendor/github.com/zeromq/czmq/api/zgossip_msg.api +104 -0
- data/vendor/github.com/zeromq/czmq/api/zhash.api +184 -0
- data/vendor/github.com/zeromq/czmq/api/zhashx.api +295 -0
- data/vendor/github.com/zeromq/czmq/api/ziflist.api +73 -0
- data/vendor/github.com/zeromq/czmq/api/zlist.api +158 -0
- data/vendor/github.com/zeromq/czmq/api/zlistx.api +220 -0
- data/vendor/github.com/zeromq/czmq/api/zloop.api +176 -0
- data/vendor/github.com/zeromq/czmq/api/zmsg.api +250 -0
- data/vendor/github.com/zeromq/czmq/api/zpoller.api +71 -0
- data/vendor/github.com/zeromq/czmq/api/zproc.api +247 -0
- data/vendor/github.com/zeromq/czmq/api/zsock.api +412 -0
- data/vendor/github.com/zeromq/czmq/api/zsock_option.api +847 -0
- data/vendor/github.com/zeromq/czmq/api/zstr.api +119 -0
- data/vendor/github.com/zeromq/czmq/api/zsys.api +490 -0
- data/vendor/github.com/zeromq/czmq/api/ztimerset.api +69 -0
- data/vendor/github.com/zeromq/czmq/api/ztrie.api +80 -0
- data/vendor/github.com/zeromq/czmq/api/zuuid.api +82 -0
- data/vendor/github.com/zeromq/czmq/appveyor.yml +73 -0
- data/vendor/github.com/zeromq/czmq/autogen.sh +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/CMakeLists.txt +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/Findczmq.cmake +47 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/README.md +130 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/CMakeLists.txt +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/android_toolchain.cmake +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/build.sh +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/build.gradle +151 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/ci_build.sh +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew +164 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew.bat +90 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/configure.bat +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/platform.h +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Common.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DLL.props +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Debug.props +29 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDLL.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLIB.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLTCG.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugSEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/EXE.props +17 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LIB.props +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LTCG.props +13 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Link.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Messages.props +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Output.props +30 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Release.props +41 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDLL.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLIB.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLTCG.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseSEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Win32.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/x64.props +23 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.h +14 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.rc +94 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/settings.gradle +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zarmour.c +132 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcert.c +188 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcertstore.c +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zchunk.c +191 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zclock.c +54 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zconfig.c +252 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdigest.c +66 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdir.c +116 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_ZdirPatch.c +88 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zfile.c +186 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zframe.c +199 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhash.c +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhashx.c +175 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ziflist.c +112 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlist.c +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlistx.c +189 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zloop.c +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zmsg.c +261 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zpoller.c +74 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zproc.c +278 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsock.c +1310 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zstr.c +108 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsys.c +445 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztimerset.c +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztrie.c +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zuuid.c +125 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zarmour.java +148 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcert.java +178 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcertstore.java +94 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zchunk.java +204 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zclock.java +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zconfig.java +253 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdigest.java +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdir.java +159 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/ZdirPatch.java +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zfile.java +217 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zframe.java +212 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhash.java +223 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhashx.java +248 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ziflist.java +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlist.java +171 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlistx.java +247 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zloop.java +134 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zmsg.java +308 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zpoller.java +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zproc.java +331 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsock.java +1556 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zstr.java +117 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java +534 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztimerset.java +87 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztrie.java +102 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zuuid.java +127 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZarmourTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertstoreTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZchunkTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZclockTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZconfigTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdigestTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirPatchTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZfileTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZframeTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashxTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZiflistTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistxTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZloopTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZmsgTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZpollerTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZprocTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsockTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZstrTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsysTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtimersetTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtrieTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZuuidTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/lua_ffi/czmq_ffi.lua +4079 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/.gitignore +10 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/.prebuildrc +2 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/README.md +4373 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.cc +8324 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.gyp +49 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.h +952 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/build.sh +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/index.js +39 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/package.json +26 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/test_binding.js +32 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/ci_build.sh +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/czmq/__init__.py +3 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/czmq/_czmq_ctypes.py +8344 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/test.py +1078 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/README.md +28 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zactor.py +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zargs.py +133 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zarmour.py +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcert.py +132 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcertstore.py +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zchunk.py +192 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zclock.py +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zconfig.py +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdigest.py +64 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdir.py +144 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/ZdirPatch.py +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zfile.py +185 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zframe.py +160 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhash.py +197 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhashx.py +271 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ziflist.py +103 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlist.py +176 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlistx.py +235 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zloop.py +171 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zmsg.py +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zpoller.py +89 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zproc.py +287 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsock.py +1283 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zstr.py +123 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsys.py +532 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztimerset.py +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztrie.py +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zuuid.py +100 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/__init__.py +33 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/_cdefs.inc +4081 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/build.py +345 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/cdefs.py +4086 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/dlopen.py +33 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/utils.py +50 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/setup.py +23 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/README.md +157 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/Rakefile +34 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/qml_czmq_bindings.pro +136 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.cpp +88 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.h +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.cpp +121 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.h +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.cpp +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.h +108 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.cpp +166 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.h +122 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.cpp +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.h +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.cpp +214 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.cpp +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.h +77 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.cpp +255 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.h +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.cpp +70 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.h +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.cpp +158 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.h +134 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.cpp +89 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.h +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.cpp +204 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.h +152 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.cpp +200 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.h +143 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.cpp +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.h +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.cpp +308 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.h +225 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.cpp +111 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.h +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.cpp +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.h +148 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.cpp +244 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.h +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.cpp +177 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.cpp +313 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.h +209 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.cpp +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.h +97 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.cpp +296 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.h +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.cpp +1471 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.h +882 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.cpp +137 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.h +120 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.cpp +541 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.h +373 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.cpp +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.h +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.cpp +101 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.h +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.cpp +116 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.h +99 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/qml_czmq_plugin.h +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/qmldir +2 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/test/tst_QmlCZMQ.qml +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/README.md +87 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/buildlib/buildlib.pro +36 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/common.pri +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/config.pri +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/qczmq.pro +13 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/main.cpp +57 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/selftest.pro +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.h +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.pri +81 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.cpp +98 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.h +61 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.cpp +130 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.h +72 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.cpp +162 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.h +83 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.cpp +191 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.h +97 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.cpp +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.h +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.cpp +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.h +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.cpp +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.h +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.cpp +292 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.h +140 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.cpp +80 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.h +53 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.cpp +176 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.h +109 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.cpp +101 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.h +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.cpp +243 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.h +127 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.cpp +231 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.h +118 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.cpp +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.cpp +350 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.h +200 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.cpp +133 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.h +71 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.cpp +220 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.h +123 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.cpp +296 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.h +159 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.cpp +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.h +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.cpp +354 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.h +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.cpp +100 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.h +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.cpp +365 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.h +186 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.cpp +1719 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.h +815 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.cpp +128 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.h +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.cpp +600 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.h +321 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.cpp +98 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.h +61 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.cpp +117 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.h +70 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.cpp +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.h +74 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/Rakefile +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi.rb +875 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/version.rb +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zactor.rb +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zargs.rb +259 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zarmour.rb +286 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcert.rb +304 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcertstore.rb +224 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zchunk.rb +388 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zclock.rb +140 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zconfig.rb +462 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdigest.rb +156 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir.rb +283 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir_patch.rb +194 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zfile.rb +361 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zframe.rb +360 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhash.rb +386 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhashx.rb +617 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ziflist.rb +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlist.rb +365 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlistx.rb +478 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zloop.rb +396 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zmsg.rb +515 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zpoller.rb +194 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zproc.rb +497 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsock.rb +4673 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zstr.rb +242 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsys.rb +836 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztimerset.rb +203 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztrie.rb +221 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zuuid.rb +227 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/ffi_spec.rb +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/spec_helper.rb +8 -0
- data/vendor/github.com/zeromq/czmq/builds/android/android_build_helper.sh +298 -0
- data/vendor/github.com/zeromq/czmq/builds/android/build.sh +94 -0
- data/vendor/github.com/zeromq/czmq/builds/android/ci_build.sh +41 -0
- data/vendor/github.com/zeromq/czmq/builds/check_zproject/ci_build.sh +52 -0
- data/vendor/github.com/zeromq/czmq/builds/check_zproto/ci_build.sh +23 -0
- data/vendor/github.com/zeromq/czmq/builds/cmake/ci_build.sh +93 -0
- data/vendor/github.com/zeromq/czmq/builds/cygwin/Makefile.cygwin +32 -0
- data/vendor/github.com/zeromq/czmq/builds/docs/ci_build.sh +24 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/.gitignore +5 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/README.md +33 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/platform.h +46 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/project.gyp +195 -0
- data/vendor/github.com/zeromq/czmq/builds/mingw32/Makefile.mingw32 +33 -0
- data/vendor/github.com/zeromq/czmq/builds/mingw32/platform.h +0 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/configure.bat +93 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.bat +14 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.nuspec +92 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.targets +128 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/platform.h +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Common.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DLL.props +16 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Debug.props +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDLL.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLIB.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLTCG.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugSEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/EXE.props +17 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LIB.props +16 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LTCG.props +13 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Link.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Messages.props +15 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Output.props +30 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Release.props +41 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDLL.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLIB.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLTCG.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseSEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Win32.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/x64.props +23 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/resource.h +14 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/resource.rc +94 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.sln +65 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.vcproj +1411 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/nuget/czmq.autobuild +49 -0
- data/vendor/github.com/zeromq/czmq/builds/nuget/readme.nuget +18 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/README.md +62 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/build.sh +142 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/build_image.sh +32 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/prepare_img.sh +111 -0
- data/vendor/github.com/zeromq/czmq/builds/stable_zmq/ci_build.sh +62 -0
- data/vendor/github.com/zeromq/czmq/builds/valgrind/ci_build.sh +43 -0
- data/vendor/github.com/zeromq/czmq/ci_build.sh +317 -0
- data/vendor/github.com/zeromq/czmq/ci_deploy.sh +29 -0
- data/vendor/github.com/zeromq/czmq/ci_deploy_obs.sh +23 -0
- data/vendor/github.com/zeromq/czmq/configure.ac +856 -0
- data/vendor/github.com/zeromq/czmq/doc/.gitignore +91 -0
- data/vendor/github.com/zeromq/czmq/doc/Makefile.am +222 -0
- data/vendor/github.com/zeromq/czmq/doc/asciidoc.conf +64 -0
- data/vendor/github.com/zeromq/czmq/doc/czmq.adoc +51 -0
- data/vendor/github.com/zeromq/czmq/doc/czmq.txt +380 -0
- data/vendor/github.com/zeromq/czmq/doc/mkman +217 -0
- data/vendor/github.com/zeromq/czmq/doc/mkmans +15 -0
- data/vendor/github.com/zeromq/czmq/doc/wdput +43 -0
- data/vendor/github.com/zeromq/czmq/examples/security/LICENSE +18 -0
- data/vendor/github.com/zeromq/czmq/examples/security/README.txt +9 -0
- data/vendor/github.com/zeromq/czmq/examples/security/grasslands.c +32 -0
- data/vendor/github.com/zeromq/czmq/examples/security/hello.c +13 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse.c +64 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2.c +123 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2_v2.c +107 -0
- data/vendor/github.com/zeromq/czmq/examples/security/passwords +2 -0
- data/vendor/github.com/zeromq/czmq/examples/security/stonehouse.c +59 -0
- data/vendor/github.com/zeromq/czmq/examples/security/strawhouse.c +49 -0
- data/vendor/github.com/zeromq/czmq/examples/security/woodhouse.c +47 -0
- data/vendor/github.com/zeromq/czmq/images/README_1.png +0 -0
- data/vendor/github.com/zeromq/czmq/include/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/include/czmq.h +39 -0
- data/vendor/github.com/zeromq/czmq/include/czmq_library.h +190 -0
- data/vendor/github.com/zeromq/czmq/include/czmq_prelude.h +735 -0
- data/vendor/github.com/zeromq/czmq/include/test_zgossip.h +44 -0
- data/vendor/github.com/zeromq/czmq/include/zactor.h +94 -0
- data/vendor/github.com/zeromq/czmq/include/zargs.h +134 -0
- data/vendor/github.com/zeromq/czmq/include/zarmour.h +114 -0
- data/vendor/github.com/zeromq/czmq/include/zauth.h +100 -0
- data/vendor/github.com/zeromq/czmq/include/zbeacon.h +86 -0
- data/vendor/github.com/zeromq/czmq/include/zcert.h +133 -0
- data/vendor/github.com/zeromq/czmq/include/zcertstore.h +101 -0
- data/vendor/github.com/zeromq/czmq/include/zchunk.h +163 -0
- data/vendor/github.com/zeromq/czmq/include/zclock.h +73 -0
- data/vendor/github.com/zeromq/czmq/include/zconfig.h +199 -0
- data/vendor/github.com/zeromq/czmq/include/zdigest.h +65 -0
- data/vendor/github.com/zeromq/czmq/include/zdir.h +149 -0
- data/vendor/github.com/zeromq/czmq/include/zdir_patch.h +82 -0
- data/vendor/github.com/zeromq/czmq/include/zfile.h +185 -0
- data/vendor/github.com/zeromq/czmq/include/zframe.h +177 -0
- data/vendor/github.com/zeromq/czmq/include/zgossip.h +95 -0
- data/vendor/github.com/zeromq/czmq/include/zhash.h +183 -0
- data/vendor/github.com/zeromq/czmq/include/zhashx.h +279 -0
- data/vendor/github.com/zeromq/czmq/include/ziflist.h +98 -0
- data/vendor/github.com/zeromq/czmq/include/zlist.h +158 -0
- data/vendor/github.com/zeromq/czmq/include/zlistx.h +205 -0
- data/vendor/github.com/zeromq/czmq/include/zloop.h +163 -0
- data/vendor/github.com/zeromq/czmq/include/zmonitor.h +73 -0
- data/vendor/github.com/zeromq/czmq/include/zmsg.h +280 -0
- data/vendor/github.com/zeromq/czmq/include/zpoller.h +87 -0
- data/vendor/github.com/zeromq/czmq/include/zproc.h +270 -0
- data/vendor/github.com/zeromq/czmq/include/zproxy.h +111 -0
- data/vendor/github.com/zeromq/czmq/include/zrex.h +82 -0
- data/vendor/github.com/zeromq/czmq/include/zsock.h +1209 -0
- data/vendor/github.com/zeromq/czmq/include/zstr.h +135 -0
- data/vendor/github.com/zeromq/czmq/include/zsys.h +439 -0
- data/vendor/github.com/zeromq/czmq/include/ztimerset.h +90 -0
- data/vendor/github.com/zeromq/czmq/include/ztrie.h +106 -0
- data/vendor/github.com/zeromq/czmq/include/zuuid.h +96 -0
- data/vendor/github.com/zeromq/czmq/issues/README.md +6 -0
- data/vendor/github.com/zeromq/czmq/issues/c +520 -0
- data/vendor/github.com/zeromq/czmq/issues/issue-407.c +146 -0
- data/vendor/github.com/zeromq/czmq/license.xml +9 -0
- data/vendor/github.com/zeromq/czmq/mkdoc +7 -0
- data/vendor/github.com/zeromq/czmq/model/chkopts.pl +47 -0
- data/vendor/github.com/zeromq/czmq/model/rename_class +42 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/changelog +5 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/compat +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/control +86 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/copyright +13 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.dsc.obs +20 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.install +2 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.manpages +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/format +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.install +4 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.manpages +2 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq4.install +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/rules +96 -0
- data/vendor/github.com/zeromq/czmq/packaging/dist/gitlog2changelog.py +125 -0
- data/vendor/github.com/zeromq/czmq/packaging/obs/_service +91 -0
- data/vendor/github.com/zeromq/czmq/packaging/redhat/czmq.spec +202 -0
- data/vendor/github.com/zeromq/czmq/project.gyp +121 -0
- data/vendor/github.com/zeromq/czmq/project.xml +99 -0
- data/vendor/github.com/zeromq/czmq/setup.py +9 -0
- data/vendor/github.com/zeromq/czmq/src/.gitignore +20 -0
- data/vendor/github.com/zeromq/czmq/src/.valgrind.supp +33 -0
- data/vendor/github.com/zeromq/czmq/src/CMakeLists-local.txt +22 -0
- data/vendor/github.com/zeromq/czmq/src/Makemodule-local.am +15 -0
- data/vendor/github.com/zeromq/czmq/src/Makemodule.am +353 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_classes.h +388 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_private_selftest.c +40 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_selftest.c +220 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.h +76 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.inc_c +335 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/readme.txt +83 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.h +92 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.inc_c +660 -0
- data/vendor/github.com/zeromq/czmq/src/libczmq.pc.in +24 -0
- data/vendor/github.com/zeromq/czmq/src/python_cffi.inc +17 -0
- data/vendor/github.com/zeromq/czmq/src/selftest-ro/.gitkeep +0 -0
- data/vendor/github.com/zeromq/czmq/src/selftest.cfg +5 -0
- data/vendor/github.com/zeromq/czmq/src/sockopts.gsl +36 -0
- data/vendor/github.com/zeromq/czmq/src/sockopts.xml +193 -0
- data/vendor/github.com/zeromq/czmq/src/test_randof.c +182 -0
- data/vendor/github.com/zeromq/czmq/src/test_zgossip.c +188 -0
- data/vendor/github.com/zeromq/czmq/src/valgrind.supp +14 -0
- data/vendor/github.com/zeromq/czmq/src/zactor.c +338 -0
- data/vendor/github.com/zeromq/czmq/src/zargs.c +289 -0
- data/vendor/github.com/zeromq/czmq/src/zarmour.c +941 -0
- data/vendor/github.com/zeromq/czmq/src/zauth.c +821 -0
- data/vendor/github.com/zeromq/czmq/src/zbeacon.c +651 -0
- data/vendor/github.com/zeromq/czmq/src/zcert.c +557 -0
- data/vendor/github.com/zeromq/czmq/src/zcertstore.c +407 -0
- data/vendor/github.com/zeromq/czmq/src/zchunk.c +609 -0
- data/vendor/github.com/zeromq/czmq/src/zclock.c +237 -0
- data/vendor/github.com/zeromq/czmq/src/zconfig.c +1369 -0
- data/vendor/github.com/zeromq/czmq/src/zdigest.c +163 -0
- data/vendor/github.com/zeromq/czmq/src/zdir.c +1138 -0
- data/vendor/github.com/zeromq/czmq/src/zdir_patch.c +227 -0
- data/vendor/github.com/zeromq/czmq/src/zfile.c +920 -0
- data/vendor/github.com/zeromq/czmq/src/zframe.c +756 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip.c +689 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip.xml +57 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_engine.inc +1008 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.bnf +43 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.c +688 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.h +127 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.xml +46 -0
- data/vendor/github.com/zeromq/czmq/src/zhash.c +956 -0
- data/vendor/github.com/zeromq/czmq/src/zhash_primes.inc +329 -0
- data/vendor/github.com/zeromq/czmq/src/zhashx.c +1369 -0
- data/vendor/github.com/zeromq/czmq/src/ziflist.c +517 -0
- data/vendor/github.com/zeromq/czmq/src/zlist.c +634 -0
- data/vendor/github.com/zeromq/czmq/src/zlistx.c +753 -0
- data/vendor/github.com/zeromq/czmq/src/zloop.c +1000 -0
- data/vendor/github.com/zeromq/czmq/src/zmakecert.c +64 -0
- data/vendor/github.com/zeromq/czmq/src/zmonitor.c +447 -0
- data/vendor/github.com/zeromq/czmq/src/zmsg.c +1258 -0
- data/vendor/github.com/zeromq/czmq/src/zpoller.c +397 -0
- data/vendor/github.com/zeromq/czmq/src/zproc.c +1160 -0
- data/vendor/github.com/zeromq/czmq/src/zproxy.c +791 -0
- data/vendor/github.com/zeromq/czmq/src/zrex.c +310 -0
- data/vendor/github.com/zeromq/czmq/src/zsock.c +2207 -0
- data/vendor/github.com/zeromq/czmq/src/zsock_option.gsl +404 -0
- data/vendor/github.com/zeromq/czmq/src/zsock_option.inc +3946 -0
- data/vendor/github.com/zeromq/czmq/src/zsp.c +118 -0
- data/vendor/github.com/zeromq/czmq/src/zstr.c +548 -0
- data/vendor/github.com/zeromq/czmq/src/zsys.c +2225 -0
- data/vendor/github.com/zeromq/czmq/src/ztimerset.c +227 -0
- data/vendor/github.com/zeromq/czmq/src/ztrie.c +809 -0
- data/vendor/github.com/zeromq/czmq/src/zuuid.c +344 -0
- metadata +780 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* =========================================================================
|
|
2
|
+
zgossip_msg - class description
|
|
3
|
+
|
|
4
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
|
5
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
|
6
|
+
http://czmq.zeromq.org.
|
|
7
|
+
|
|
8
|
+
This Source Code Form is subject to the terms of the Mozilla Public
|
|
9
|
+
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
10
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
11
|
+
=========================================================================
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#ifndef ZGOSSIP_MSG_H_INCLUDED
|
|
15
|
+
#define ZGOSSIP_MSG_H_INCLUDED
|
|
16
|
+
|
|
17
|
+
#ifdef __cplusplus
|
|
18
|
+
extern "C" {
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
// @warning THE FOLLOWING @INTERFACE BLOCK IS AUTO-GENERATED BY ZPROJECT
|
|
22
|
+
// @warning Please edit the model at "api/zgossip_msg.api" to make changes.
|
|
23
|
+
// @interface
|
|
24
|
+
// This is a draft class, and may change without notice. It is disabled in
|
|
25
|
+
// stable builds by default. If you use this in applications, please ask
|
|
26
|
+
// for it to be pushed to stable state. Use --enable-drafts to enable.
|
|
27
|
+
#ifdef CZMQ_BUILD_DRAFT_API
|
|
28
|
+
#define ZGOSSIP_MSG_HELLO 1 //
|
|
29
|
+
#define ZGOSSIP_MSG_PUBLISH 2 //
|
|
30
|
+
#define ZGOSSIP_MSG_PING 3 //
|
|
31
|
+
#define ZGOSSIP_MSG_PONG 4 //
|
|
32
|
+
#define ZGOSSIP_MSG_INVALID 5 //
|
|
33
|
+
|
|
34
|
+
// *** Draft method, for development use, may change without warning ***
|
|
35
|
+
// Create a new empty zgossip_msg
|
|
36
|
+
CZMQ_PRIVATE zgossip_msg_t *
|
|
37
|
+
zgossip_msg_new (void);
|
|
38
|
+
|
|
39
|
+
// *** Draft method, for development use, may change without warning ***
|
|
40
|
+
// Destroy a zgossip_msg instance
|
|
41
|
+
CZMQ_PRIVATE void
|
|
42
|
+
zgossip_msg_destroy (zgossip_msg_t **self_p);
|
|
43
|
+
|
|
44
|
+
// *** Draft method, for development use, may change without warning ***
|
|
45
|
+
// Receive a zgossip_msg from the socket. Returns 0 if OK, -1 if
|
|
46
|
+
// there was an error. Blocks if there is no message waiting.
|
|
47
|
+
CZMQ_PRIVATE int
|
|
48
|
+
zgossip_msg_recv (zgossip_msg_t *self, zsock_t *input);
|
|
49
|
+
|
|
50
|
+
// *** Draft method, for development use, may change without warning ***
|
|
51
|
+
// Send the zgossip_msg to the output socket, does not destroy it
|
|
52
|
+
CZMQ_PRIVATE int
|
|
53
|
+
zgossip_msg_send (zgossip_msg_t *self, zsock_t *output);
|
|
54
|
+
|
|
55
|
+
// *** Draft method, for development use, may change without warning ***
|
|
56
|
+
// Print contents of message to stdout
|
|
57
|
+
CZMQ_PRIVATE void
|
|
58
|
+
zgossip_msg_print (zgossip_msg_t *self);
|
|
59
|
+
|
|
60
|
+
// *** Draft method, for development use, may change without warning ***
|
|
61
|
+
// Get the message routing id, as a frame
|
|
62
|
+
CZMQ_PRIVATE zframe_t *
|
|
63
|
+
zgossip_msg_routing_id (zgossip_msg_t *self);
|
|
64
|
+
|
|
65
|
+
// *** Draft method, for development use, may change without warning ***
|
|
66
|
+
// Set the message routing id from a frame
|
|
67
|
+
CZMQ_PRIVATE void
|
|
68
|
+
zgossip_msg_set_routing_id (zgossip_msg_t *self, zframe_t *routing_id);
|
|
69
|
+
|
|
70
|
+
// *** Draft method, for development use, may change without warning ***
|
|
71
|
+
// Get the zgossip_msg message id
|
|
72
|
+
CZMQ_PRIVATE int
|
|
73
|
+
zgossip_msg_id (zgossip_msg_t *self);
|
|
74
|
+
|
|
75
|
+
// *** Draft method, for development use, may change without warning ***
|
|
76
|
+
// Set the zgossip_msg message id
|
|
77
|
+
CZMQ_PRIVATE void
|
|
78
|
+
zgossip_msg_set_id (zgossip_msg_t *self, int id);
|
|
79
|
+
|
|
80
|
+
// *** Draft method, for development use, may change without warning ***
|
|
81
|
+
// Get the zgossip_msg message id as printable text
|
|
82
|
+
CZMQ_PRIVATE const char *
|
|
83
|
+
zgossip_msg_command (zgossip_msg_t *self);
|
|
84
|
+
|
|
85
|
+
// *** Draft method, for development use, may change without warning ***
|
|
86
|
+
// Get the key field
|
|
87
|
+
CZMQ_PRIVATE const char *
|
|
88
|
+
zgossip_msg_key (zgossip_msg_t *self);
|
|
89
|
+
|
|
90
|
+
// *** Draft method, for development use, may change without warning ***
|
|
91
|
+
// Set the key field
|
|
92
|
+
CZMQ_PRIVATE void
|
|
93
|
+
zgossip_msg_set_key (zgossip_msg_t *self, const char *key);
|
|
94
|
+
|
|
95
|
+
// *** Draft method, for development use, may change without warning ***
|
|
96
|
+
// Get the value field
|
|
97
|
+
CZMQ_PRIVATE const char *
|
|
98
|
+
zgossip_msg_value (zgossip_msg_t *self);
|
|
99
|
+
|
|
100
|
+
// *** Draft method, for development use, may change without warning ***
|
|
101
|
+
// Set the value field
|
|
102
|
+
CZMQ_PRIVATE void
|
|
103
|
+
zgossip_msg_set_value (zgossip_msg_t *self, const char *value);
|
|
104
|
+
|
|
105
|
+
// *** Draft method, for development use, may change without warning ***
|
|
106
|
+
// Get the ttl field
|
|
107
|
+
CZMQ_PRIVATE uint32_t
|
|
108
|
+
zgossip_msg_ttl (zgossip_msg_t *self);
|
|
109
|
+
|
|
110
|
+
// *** Draft method, for development use, may change without warning ***
|
|
111
|
+
// Set the ttl field
|
|
112
|
+
CZMQ_PRIVATE void
|
|
113
|
+
zgossip_msg_set_ttl (zgossip_msg_t *self, uint32_t ttl);
|
|
114
|
+
|
|
115
|
+
// *** Draft method, for development use, may change without warning ***
|
|
116
|
+
// Self test of this class.
|
|
117
|
+
CZMQ_PRIVATE void
|
|
118
|
+
zgossip_msg_test (bool verbose);
|
|
119
|
+
|
|
120
|
+
#endif // CZMQ_BUILD_DRAFT_API
|
|
121
|
+
// @end
|
|
122
|
+
|
|
123
|
+
#ifdef __cplusplus
|
|
124
|
+
}
|
|
125
|
+
#endif
|
|
126
|
+
|
|
127
|
+
#endif
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<class
|
|
2
|
+
name = "zgossip_msg"
|
|
3
|
+
title = "ZeroMQ Gossip Protocol"
|
|
4
|
+
script = "zproto_codec_c"
|
|
5
|
+
package_dir = "."
|
|
6
|
+
project_header = "czmq_classes.h"
|
|
7
|
+
export_macro = "CZMQ_EXPORT"
|
|
8
|
+
>
|
|
9
|
+
This is a server implementation of the ZeroMQ Gossip Protocol (ZGP)
|
|
10
|
+
<include filename = "../license.xml" />
|
|
11
|
+
|
|
12
|
+
<grammar>
|
|
13
|
+
C:HELLO ( C:PUBLISH / S:PUBLISH / heartbeat )
|
|
14
|
+
heartbeat = C:PING / S:PONG
|
|
15
|
+
</grammar>
|
|
16
|
+
|
|
17
|
+
<!-- Header for all messages -->
|
|
18
|
+
<header>
|
|
19
|
+
<field name = "version" type = "number" size = "1" value = "1">Version = 1</field>
|
|
20
|
+
</header>
|
|
21
|
+
|
|
22
|
+
<message name = "hello">
|
|
23
|
+
Client says hello to server
|
|
24
|
+
</message>
|
|
25
|
+
|
|
26
|
+
<message name = "publish">
|
|
27
|
+
Client or server announces a new tuple
|
|
28
|
+
<field name = "key" type = "string">Tuple key, globally unique</field>
|
|
29
|
+
<field name = "value" type = "longstr">Tuple value, as printable string</field>
|
|
30
|
+
<field name = "ttl" type = "number" size = "4">Time to live, msecs</field>
|
|
31
|
+
</message>
|
|
32
|
+
|
|
33
|
+
<message name = "ping">
|
|
34
|
+
Client signals liveness
|
|
35
|
+
</message>
|
|
36
|
+
|
|
37
|
+
<message name = "pong">
|
|
38
|
+
Server responds to ping; note that pongs are not correlated with pings,
|
|
39
|
+
and may be mixed with other commands, and the client should treat any
|
|
40
|
+
incoming traffic as valid activity.
|
|
41
|
+
</message>
|
|
42
|
+
|
|
43
|
+
<message name = "invalid">
|
|
44
|
+
Server rejects command as invalid
|
|
45
|
+
</message>
|
|
46
|
+
</class>
|
|
@@ -0,0 +1,956 @@
|
|
|
1
|
+
/* =========================================================================
|
|
2
|
+
zhash - simple generic hash container
|
|
3
|
+
|
|
4
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
|
5
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
|
6
|
+
http://czmq.zeromq.org.
|
|
7
|
+
|
|
8
|
+
This Source Code Form is subject to the terms of the Mozilla Public
|
|
9
|
+
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
10
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
11
|
+
=========================================================================
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
@header
|
|
16
|
+
zhash is an expandable hash table container. This is a simple container.
|
|
17
|
+
For heavy-duty applications we recommend using zhashx.
|
|
18
|
+
@discuss
|
|
19
|
+
Note that it's relatively slow (~50K insertions/deletes per second), so
|
|
20
|
+
don't do inserts/updates on the critical path for message I/O. It can
|
|
21
|
+
do ~2.5M lookups per second for 16-char keys. Timed on a 1.6GHz CPU.
|
|
22
|
+
@end
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
#include "czmq_classes.h"
|
|
26
|
+
|
|
27
|
+
// Hash table performance parameters
|
|
28
|
+
|
|
29
|
+
#define INITIAL_SIZE 255 // Initial size in items
|
|
30
|
+
#define LOAD_FACTOR 75 // Percent loading before splitting
|
|
31
|
+
#define GROWTH_FACTOR 200 // Increase in % after splitting
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
// Hash item, used internally only
|
|
35
|
+
|
|
36
|
+
typedef struct _item_t {
|
|
37
|
+
void *value; // Opaque item value
|
|
38
|
+
struct _item_t *next; // Next item in the hash slot
|
|
39
|
+
size_t index; // Index of item in table
|
|
40
|
+
char *key; // Item's original key
|
|
41
|
+
zhash_free_fn *free_fn; // Value free function if any
|
|
42
|
+
} item_t;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
// ---------------------------------------------------------------------
|
|
46
|
+
// Structure of our class
|
|
47
|
+
|
|
48
|
+
struct _zhash_t {
|
|
49
|
+
size_t size; // Current size of hash table
|
|
50
|
+
size_t limit; // Current hash table limit
|
|
51
|
+
item_t **items; // Array of items
|
|
52
|
+
size_t cached_index; // Avoids duplicate hash calculations
|
|
53
|
+
bool autofree; // If true, free values in destructor
|
|
54
|
+
size_t cursor_index; // For first/next iteration
|
|
55
|
+
item_t *cursor_item; // For first/next iteration
|
|
56
|
+
const char *cursor_key; // After first/next call, points to key
|
|
57
|
+
zlist_t *comments; // File comments, if any
|
|
58
|
+
time_t modified; // Set during zhash_load
|
|
59
|
+
char *filename; // Set during zhash_load
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Local helper functions
|
|
63
|
+
static uint s_item_hash (const char *key, size_t limit);
|
|
64
|
+
static item_t *s_item_lookup (zhash_t *self, const char *key);
|
|
65
|
+
static item_t *s_item_insert (zhash_t *self, const char *key, void *value);
|
|
66
|
+
static void s_item_destroy (zhash_t *self, item_t *item, bool hard);
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
// --------------------------------------------------------------------------
|
|
70
|
+
// Hash table constructor
|
|
71
|
+
|
|
72
|
+
zhash_t *
|
|
73
|
+
zhash_new (void)
|
|
74
|
+
{
|
|
75
|
+
zhash_t *self = (zhash_t *) zmalloc (sizeof (zhash_t));
|
|
76
|
+
assert (self);
|
|
77
|
+
self->limit = INITIAL_SIZE;
|
|
78
|
+
self->items = (item_t **) zmalloc (sizeof (item_t *) * self->limit);
|
|
79
|
+
assert (self->items);
|
|
80
|
+
return self;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
// --------------------------------------------------------------------------
|
|
85
|
+
// Hash table destructor
|
|
86
|
+
|
|
87
|
+
void
|
|
88
|
+
zhash_destroy (zhash_t **self_p)
|
|
89
|
+
{
|
|
90
|
+
assert (self_p);
|
|
91
|
+
if (*self_p) {
|
|
92
|
+
zhash_t *self = *self_p;
|
|
93
|
+
uint index;
|
|
94
|
+
for (index = 0; index < self->limit; index++) {
|
|
95
|
+
// Destroy all items in this hash bucket
|
|
96
|
+
item_t *cur_item = self->items [index];
|
|
97
|
+
while (cur_item) {
|
|
98
|
+
item_t *next_item = cur_item->next;
|
|
99
|
+
s_item_destroy (self, cur_item, true);
|
|
100
|
+
cur_item = next_item;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (self->items)
|
|
104
|
+
freen (self->items);
|
|
105
|
+
|
|
106
|
+
zlist_destroy (&self->comments);
|
|
107
|
+
freen (self->filename);
|
|
108
|
+
freen (self);
|
|
109
|
+
*self_p = NULL;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
// --------------------------------------------------------------------------
|
|
115
|
+
// Local helper function
|
|
116
|
+
// Destroy item in hash table, item must exist in table
|
|
117
|
+
|
|
118
|
+
static void
|
|
119
|
+
s_item_destroy (zhash_t *self, item_t *item, bool hard)
|
|
120
|
+
{
|
|
121
|
+
// Find previous item since it's a singly-linked list
|
|
122
|
+
item_t *cur_item = self->items [item->index];
|
|
123
|
+
item_t **prev_item = &(self->items [item->index]);
|
|
124
|
+
while (cur_item) {
|
|
125
|
+
if (cur_item == item)
|
|
126
|
+
break;
|
|
127
|
+
prev_item = &(cur_item->next);
|
|
128
|
+
cur_item = cur_item->next;
|
|
129
|
+
}
|
|
130
|
+
assert (cur_item);
|
|
131
|
+
*prev_item = item->next;
|
|
132
|
+
self->size--;
|
|
133
|
+
if (hard) {
|
|
134
|
+
if (item->free_fn)
|
|
135
|
+
(item->free_fn) (item->value);
|
|
136
|
+
else
|
|
137
|
+
if (self->autofree)
|
|
138
|
+
freen (item->value);
|
|
139
|
+
|
|
140
|
+
freen (item->key);
|
|
141
|
+
self->cursor_item = NULL;
|
|
142
|
+
self->cursor_key = NULL;
|
|
143
|
+
freen (item);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
// --------------------------------------------------------------------------
|
|
149
|
+
// Insert item into hash table with specified key and item
|
|
150
|
+
// If key is already present returns -1 and leaves existing item unchanged
|
|
151
|
+
// Returns 0 on success.
|
|
152
|
+
|
|
153
|
+
int
|
|
154
|
+
zhash_insert (zhash_t *self, const char *key, void *value)
|
|
155
|
+
{
|
|
156
|
+
assert (self);
|
|
157
|
+
assert (key);
|
|
158
|
+
|
|
159
|
+
// If we're exceeding the load factor of the hash table,
|
|
160
|
+
// resize it according to the growth factor
|
|
161
|
+
if (self->size >= self->limit * LOAD_FACTOR / 100) {
|
|
162
|
+
// Create new hash table
|
|
163
|
+
size_t new_limit = self->limit * GROWTH_FACTOR / 100;
|
|
164
|
+
item_t **new_items = (item_t **) zmalloc (sizeof (item_t *) * new_limit);
|
|
165
|
+
if (!new_items)
|
|
166
|
+
return -1;
|
|
167
|
+
|
|
168
|
+
// Move all items to the new hash table, rehashing to
|
|
169
|
+
// take into account new hash table limit
|
|
170
|
+
uint index;
|
|
171
|
+
for (index = 0; index != self->limit; index++) {
|
|
172
|
+
item_t *cur_item = self->items [index];
|
|
173
|
+
while (cur_item) {
|
|
174
|
+
item_t *next_item = cur_item->next;
|
|
175
|
+
uint new_index = s_item_hash (cur_item->key, new_limit);
|
|
176
|
+
cur_item->index = new_index;
|
|
177
|
+
cur_item->next = new_items [new_index];
|
|
178
|
+
new_items [new_index] = cur_item;
|
|
179
|
+
cur_item = next_item;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Destroy old hash table
|
|
183
|
+
freen (self->items);
|
|
184
|
+
self->items = new_items;
|
|
185
|
+
self->limit = new_limit;
|
|
186
|
+
}
|
|
187
|
+
return s_item_insert (self, key, value)? 0: -1;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
// --------------------------------------------------------------------------
|
|
192
|
+
// Local helper function
|
|
193
|
+
// Compute hash for key string
|
|
194
|
+
|
|
195
|
+
static uint
|
|
196
|
+
s_item_hash (const char *key, size_t limit)
|
|
197
|
+
{
|
|
198
|
+
// Modified Bernstein hashing function
|
|
199
|
+
uint key_hash = 0;
|
|
200
|
+
while (*key)
|
|
201
|
+
key_hash = 33 * key_hash ^ *key++;
|
|
202
|
+
key_hash %= limit;
|
|
203
|
+
return key_hash;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
// --------------------------------------------------------------------------
|
|
208
|
+
// Local helper function
|
|
209
|
+
// Insert new item into hash table, returns item
|
|
210
|
+
// If item already existed, returns NULL
|
|
211
|
+
|
|
212
|
+
static item_t *
|
|
213
|
+
s_item_insert (zhash_t *self, const char *key, void *value)
|
|
214
|
+
{
|
|
215
|
+
// Check that item does not already exist in hash table
|
|
216
|
+
// Leaves self->cached_index with calculated hash item
|
|
217
|
+
item_t *item = s_item_lookup (self, key);
|
|
218
|
+
if (item == NULL) {
|
|
219
|
+
item = (item_t *) zmalloc (sizeof (item_t));
|
|
220
|
+
assert (item);
|
|
221
|
+
|
|
222
|
+
// If necessary, take duplicate of item (string) value
|
|
223
|
+
if (self->autofree) {
|
|
224
|
+
value = strdup ((char *) value);
|
|
225
|
+
assert (value);
|
|
226
|
+
}
|
|
227
|
+
item->value = value;
|
|
228
|
+
item->key = strdup (key);
|
|
229
|
+
item->index = self->cached_index;
|
|
230
|
+
|
|
231
|
+
// Insert into start of bucket list
|
|
232
|
+
item->next = self->items [self->cached_index];
|
|
233
|
+
self->items [self->cached_index] = item;
|
|
234
|
+
self->size++;
|
|
235
|
+
}
|
|
236
|
+
else
|
|
237
|
+
item = NULL; // Signal duplicate insertion
|
|
238
|
+
|
|
239
|
+
return item;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
// --------------------------------------------------------------------------
|
|
244
|
+
// Local helper function
|
|
245
|
+
// Lookup item in hash table, returns item or NULL
|
|
246
|
+
|
|
247
|
+
static item_t *
|
|
248
|
+
s_item_lookup (zhash_t *self, const char *key)
|
|
249
|
+
{
|
|
250
|
+
// Look in bucket list for item by key
|
|
251
|
+
self->cached_index = s_item_hash (key, self->limit);
|
|
252
|
+
item_t *item = self->items [self->cached_index];
|
|
253
|
+
while (item) {
|
|
254
|
+
if (streq (item->key, key))
|
|
255
|
+
break;
|
|
256
|
+
item = item->next;
|
|
257
|
+
}
|
|
258
|
+
return item;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
// --------------------------------------------------------------------------
|
|
263
|
+
// Update item into hash table with specified key and item.
|
|
264
|
+
// If key is already present, destroys old item and inserts new one.
|
|
265
|
+
// Use free_fn method to ensure deallocator is properly called on item.
|
|
266
|
+
|
|
267
|
+
void
|
|
268
|
+
zhash_update (zhash_t *self, const char *key, void *value)
|
|
269
|
+
{
|
|
270
|
+
assert (self);
|
|
271
|
+
assert (key);
|
|
272
|
+
|
|
273
|
+
item_t *item = s_item_lookup (self, key);
|
|
274
|
+
if (item) {
|
|
275
|
+
if (item->free_fn)
|
|
276
|
+
(item->free_fn) (item->value);
|
|
277
|
+
else
|
|
278
|
+
if (self->autofree)
|
|
279
|
+
freen (item->value);
|
|
280
|
+
|
|
281
|
+
// If necessary, take duplicate of item (string) value
|
|
282
|
+
if (self->autofree) {
|
|
283
|
+
value = strdup ((char *) value);
|
|
284
|
+
assert (value);
|
|
285
|
+
}
|
|
286
|
+
item->value = value;
|
|
287
|
+
}
|
|
288
|
+
else
|
|
289
|
+
zhash_insert (self, key, value);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
// --------------------------------------------------------------------------
|
|
294
|
+
// Remove an item specified by key from the hash table. If there was no such
|
|
295
|
+
// item, this function does nothing.
|
|
296
|
+
|
|
297
|
+
void
|
|
298
|
+
zhash_delete (zhash_t *self, const char *key)
|
|
299
|
+
{
|
|
300
|
+
assert (self);
|
|
301
|
+
assert (key);
|
|
302
|
+
|
|
303
|
+
item_t *item = s_item_lookup (self, key);
|
|
304
|
+
if (item)
|
|
305
|
+
s_item_destroy (self, item, true);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
// --------------------------------------------------------------------------
|
|
310
|
+
// Look for item in hash table and return its item, or NULL
|
|
311
|
+
|
|
312
|
+
void *
|
|
313
|
+
zhash_lookup (zhash_t *self, const char *key)
|
|
314
|
+
{
|
|
315
|
+
assert (self);
|
|
316
|
+
assert (key);
|
|
317
|
+
|
|
318
|
+
item_t *item = s_item_lookup (self, key);
|
|
319
|
+
if (item)
|
|
320
|
+
return item->value;
|
|
321
|
+
else
|
|
322
|
+
return NULL;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
// --------------------------------------------------------------------------
|
|
327
|
+
// Reindexes an item from an old key to a new key. If there was no such
|
|
328
|
+
// item, does nothing. If the new key already exists, deletes old item.
|
|
329
|
+
|
|
330
|
+
int
|
|
331
|
+
zhash_rename (zhash_t *self, const char *old_key, const char *new_key)
|
|
332
|
+
{
|
|
333
|
+
item_t *old_item = s_item_lookup (self, old_key);
|
|
334
|
+
item_t *new_item = s_item_lookup (self, new_key);
|
|
335
|
+
if (old_item && !new_item) {
|
|
336
|
+
s_item_destroy (self, old_item, false);
|
|
337
|
+
freen (old_item->key);
|
|
338
|
+
old_item->key = strdup (new_key);
|
|
339
|
+
assert (old_item->key);
|
|
340
|
+
old_item->index = self->cached_index;
|
|
341
|
+
old_item->next = self->items [self->cached_index];
|
|
342
|
+
self->items [self->cached_index] = old_item;
|
|
343
|
+
self->size++;
|
|
344
|
+
return 0;
|
|
345
|
+
}
|
|
346
|
+
else
|
|
347
|
+
return -1;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
// --------------------------------------------------------------------------
|
|
352
|
+
// Set a free function for the specified hash table item. When the item is
|
|
353
|
+
// destroyed, the free function, if any, is called on that item.
|
|
354
|
+
// Use this when hash items are dynamically allocated, to ensure that
|
|
355
|
+
// you don't have memory leaks. You can pass 'free' or NULL as a free_fn.
|
|
356
|
+
// Returns the item, or NULL if there is no such item.
|
|
357
|
+
|
|
358
|
+
void *
|
|
359
|
+
zhash_freefn (zhash_t *self, const char *key, zhash_free_fn free_fn)
|
|
360
|
+
{
|
|
361
|
+
assert (self);
|
|
362
|
+
assert (key);
|
|
363
|
+
|
|
364
|
+
item_t *item = s_item_lookup (self, key);
|
|
365
|
+
if (item) {
|
|
366
|
+
item->free_fn = free_fn;
|
|
367
|
+
return item->value;
|
|
368
|
+
}
|
|
369
|
+
else
|
|
370
|
+
return NULL;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
// --------------------------------------------------------------------------
|
|
375
|
+
// Return size of hash table
|
|
376
|
+
|
|
377
|
+
size_t
|
|
378
|
+
zhash_size (zhash_t *self)
|
|
379
|
+
{
|
|
380
|
+
assert (self);
|
|
381
|
+
return self->size;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
// --------------------------------------------------------------------------
|
|
386
|
+
// Make copy of hash table
|
|
387
|
+
// Does not copy items themselves. Rebuilds new table so may be slow on
|
|
388
|
+
// very large tables. NOTE: only works with item values that are strings
|
|
389
|
+
// since there's no other way to know how to duplicate the item value.
|
|
390
|
+
|
|
391
|
+
zhash_t *
|
|
392
|
+
zhash_dup (zhash_t *self)
|
|
393
|
+
{
|
|
394
|
+
if (!self)
|
|
395
|
+
return NULL;
|
|
396
|
+
|
|
397
|
+
zhash_t *copy = zhash_new ();
|
|
398
|
+
zhash_autofree (copy);
|
|
399
|
+
if (copy) {
|
|
400
|
+
uint index;
|
|
401
|
+
for (index = 0; index != self->limit; index++) {
|
|
402
|
+
item_t *item = self->items [index];
|
|
403
|
+
while (item) {
|
|
404
|
+
zhash_insert (copy, item->key, item->value);
|
|
405
|
+
item = item->next;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return copy;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
// --------------------------------------------------------------------------
|
|
414
|
+
// Return keys for items in table
|
|
415
|
+
|
|
416
|
+
zlist_t *
|
|
417
|
+
zhash_keys (zhash_t *self)
|
|
418
|
+
{
|
|
419
|
+
assert (self);
|
|
420
|
+
zlist_t *keys = zlist_new ();
|
|
421
|
+
if (!keys)
|
|
422
|
+
return NULL;
|
|
423
|
+
zlist_autofree (keys);
|
|
424
|
+
|
|
425
|
+
uint index;
|
|
426
|
+
for (index = 0; index != self->limit; index++) {
|
|
427
|
+
item_t *item = self->items [index];
|
|
428
|
+
while (item) {
|
|
429
|
+
zlist_append (keys, item->key);
|
|
430
|
+
item = item->next;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
return keys;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
// --------------------------------------------------------------------------
|
|
438
|
+
// Simple iterator; returns first item in hash table, in no given order,
|
|
439
|
+
// or NULL if the table is empty. This method is simpler to use than the
|
|
440
|
+
// foreach() method, which is deprecated. NOTE: do NOT modify the table
|
|
441
|
+
// while iterating.
|
|
442
|
+
|
|
443
|
+
void *
|
|
444
|
+
zhash_first (zhash_t *self)
|
|
445
|
+
{
|
|
446
|
+
assert (self);
|
|
447
|
+
// Point to before or at first item
|
|
448
|
+
self->cursor_index = 0;
|
|
449
|
+
self->cursor_item = self->items [self->cursor_index];
|
|
450
|
+
// Now scan forwards to find it, leave cursor after item
|
|
451
|
+
return zhash_next (self);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
// --------------------------------------------------------------------------
|
|
456
|
+
// Simple iterator; returns next item in hash table, in no given order,
|
|
457
|
+
// or NULL if the last item was already returned. Use this together with
|
|
458
|
+
// zhash_first() to process all items in a hash table. If you need the
|
|
459
|
+
// items in sorted order, use zhash_keys() and then zlist_sort(). NOTE:
|
|
460
|
+
// do NOT modify the table while iterating.
|
|
461
|
+
|
|
462
|
+
void *
|
|
463
|
+
zhash_next (zhash_t *self)
|
|
464
|
+
{
|
|
465
|
+
assert (self);
|
|
466
|
+
// Scan forward from cursor until we find an item
|
|
467
|
+
while (self->cursor_item == NULL) {
|
|
468
|
+
if (self->cursor_index < self->limit - 1)
|
|
469
|
+
self->cursor_index++;
|
|
470
|
+
else
|
|
471
|
+
return NULL; // At end of table
|
|
472
|
+
|
|
473
|
+
// Get first item in next bucket
|
|
474
|
+
self->cursor_item = self->items [self->cursor_index];
|
|
475
|
+
}
|
|
476
|
+
// We have an item, so return it, and bump past it
|
|
477
|
+
assert (self->cursor_item);
|
|
478
|
+
item_t *item = self->cursor_item;
|
|
479
|
+
self->cursor_key = item->key;
|
|
480
|
+
self->cursor_item = self->cursor_item->next;
|
|
481
|
+
return item->value;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
// --------------------------------------------------------------------------
|
|
486
|
+
// After a successful first/next method, returns the key for the item that
|
|
487
|
+
// was returned. This is a constant string that you may not modify or
|
|
488
|
+
// deallocate, and which lasts as long as the item in the hash. After an
|
|
489
|
+
// unsuccessful first/next, returns NULL.
|
|
490
|
+
|
|
491
|
+
const char *
|
|
492
|
+
zhash_cursor (zhash_t *self)
|
|
493
|
+
{
|
|
494
|
+
assert (self);
|
|
495
|
+
return self->cursor_key;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
// --------------------------------------------------------------------------
|
|
500
|
+
// Add a comment to hash table before saving to disk. You can add as many
|
|
501
|
+
// comment lines as you like. These comment lines are discarded when loading
|
|
502
|
+
// the file. If you use a null format, all comments are deleted.
|
|
503
|
+
|
|
504
|
+
void
|
|
505
|
+
zhash_comment (zhash_t *self, const char *format, ...)
|
|
506
|
+
{
|
|
507
|
+
if (format) {
|
|
508
|
+
if (!self->comments) {
|
|
509
|
+
self->comments = zlist_new ();
|
|
510
|
+
if (!self->comments)
|
|
511
|
+
return;
|
|
512
|
+
zlist_autofree (self->comments);
|
|
513
|
+
}
|
|
514
|
+
va_list argptr;
|
|
515
|
+
va_start (argptr, format);
|
|
516
|
+
char *string = zsys_vprintf (format, argptr);
|
|
517
|
+
va_end (argptr);
|
|
518
|
+
if (string)
|
|
519
|
+
zlist_append (self->comments, string);
|
|
520
|
+
zstr_free (&string);
|
|
521
|
+
}
|
|
522
|
+
else
|
|
523
|
+
zlist_destroy (&self->comments);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
// --------------------------------------------------------------------------
|
|
528
|
+
// Save hash table to a text file in name=value format
|
|
529
|
+
// Hash values must be printable strings.
|
|
530
|
+
// Returns 0 if OK, else -1 if a file error occurred
|
|
531
|
+
|
|
532
|
+
int
|
|
533
|
+
zhash_save (zhash_t *self, const char *filename)
|
|
534
|
+
{
|
|
535
|
+
assert (self);
|
|
536
|
+
|
|
537
|
+
FILE *handle = fopen (filename, "w");
|
|
538
|
+
if (!handle)
|
|
539
|
+
return -1; // Failed to create file
|
|
540
|
+
|
|
541
|
+
if (self->comments) {
|
|
542
|
+
char *comment = (char *) zlist_first (self->comments);
|
|
543
|
+
while (comment) {
|
|
544
|
+
fprintf (handle, "# %s\n", comment);
|
|
545
|
+
comment = (char *) zlist_next (self->comments);
|
|
546
|
+
}
|
|
547
|
+
fprintf (handle, "\n");
|
|
548
|
+
}
|
|
549
|
+
uint index;
|
|
550
|
+
for (index = 0; index != self->limit; index++) {
|
|
551
|
+
item_t *item = self->items [index];
|
|
552
|
+
while (item) {
|
|
553
|
+
fprintf (handle, "%s=%s\n", item->key, (char *) item->value);
|
|
554
|
+
item = item->next;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
fclose (handle);
|
|
558
|
+
return 0;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
// --------------------------------------------------------------------------
|
|
563
|
+
// Load hash table from a text file in name=value format; hash table must
|
|
564
|
+
// already exist. Hash values must printable strings.
|
|
565
|
+
// Returns 0 if OK, else -1 if a file was not readable.
|
|
566
|
+
|
|
567
|
+
int
|
|
568
|
+
zhash_load (zhash_t *self, const char *filename)
|
|
569
|
+
{
|
|
570
|
+
assert (self);
|
|
571
|
+
zhash_autofree (self);
|
|
572
|
+
|
|
573
|
+
// Whether or not file exists, we'll track the filename and last
|
|
574
|
+
// modification date (0 for unknown files), so that zhash_refresh ()
|
|
575
|
+
// will always work after zhash_load (), to load a newly-created
|
|
576
|
+
// file.
|
|
577
|
+
|
|
578
|
+
// Take copy of filename in case self->filename is same string.
|
|
579
|
+
char *filename_copy = strdup (filename);
|
|
580
|
+
assert (filename_copy);
|
|
581
|
+
freen (self->filename);
|
|
582
|
+
self->filename = filename_copy;
|
|
583
|
+
self->modified = zsys_file_modified (self->filename);
|
|
584
|
+
|
|
585
|
+
FILE *handle = fopen (self->filename, "r");
|
|
586
|
+
if (handle) {
|
|
587
|
+
char *buffer = (char *) zmalloc (1024);
|
|
588
|
+
assert (buffer);
|
|
589
|
+
while (fgets (buffer, 1024, handle)) {
|
|
590
|
+
// Skip lines starting with "#" or that do not look like
|
|
591
|
+
// name=value data.
|
|
592
|
+
char *equals = strchr (buffer, '=');
|
|
593
|
+
if (buffer [0] == '#' || equals == buffer || !equals)
|
|
594
|
+
continue;
|
|
595
|
+
|
|
596
|
+
// Buffer may end in newline, which we don't want
|
|
597
|
+
if (buffer [strlen (buffer) - 1] == '\n')
|
|
598
|
+
buffer [strlen (buffer) - 1] = 0;
|
|
599
|
+
*equals++ = 0;
|
|
600
|
+
zhash_update (self, buffer, equals);
|
|
601
|
+
}
|
|
602
|
+
freen (buffer);
|
|
603
|
+
fclose (handle);
|
|
604
|
+
}
|
|
605
|
+
else
|
|
606
|
+
return -1; // Failed to open file for reading
|
|
607
|
+
|
|
608
|
+
return 0;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
// --------------------------------------------------------------------------
|
|
613
|
+
// When a hash table was loaded from a file by zhash_load, this method will
|
|
614
|
+
// reload the file if it has been modified since, and is "stable", i.e. not
|
|
615
|
+
// still changing. Returns 0 if OK, -1 if there was an error reloading the
|
|
616
|
+
// file.
|
|
617
|
+
|
|
618
|
+
int
|
|
619
|
+
zhash_refresh (zhash_t *self)
|
|
620
|
+
{
|
|
621
|
+
assert (self);
|
|
622
|
+
|
|
623
|
+
if (self->filename) {
|
|
624
|
+
if (zsys_file_modified (self->filename) > self->modified
|
|
625
|
+
&& zsys_file_stable (self->filename)) {
|
|
626
|
+
// Empty the hash table; code is copied from zhash_destroy
|
|
627
|
+
uint index;
|
|
628
|
+
for (index = 0; index < self->limit; index++) {
|
|
629
|
+
// Destroy all items in this hash bucket
|
|
630
|
+
item_t *cur_item = self->items [index];
|
|
631
|
+
while (cur_item) {
|
|
632
|
+
item_t *next_item = cur_item->next;
|
|
633
|
+
s_item_destroy (self, cur_item, true);
|
|
634
|
+
cur_item = next_item;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
zhash_load (self, self->filename);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
return 0;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
// --------------------------------------------------------------------------
|
|
645
|
+
// Serialize hash table to a binary frame that can be sent in a message.
|
|
646
|
+
// The packed format is compatible with the 'dictionary' type defined in
|
|
647
|
+
// http://rfc.zeromq.org/spec:35/FILEMQ, and implemented by zproto:
|
|
648
|
+
//
|
|
649
|
+
// ; A list of name/value pairs
|
|
650
|
+
// dictionary = dict-count *( dict-name dict-value )
|
|
651
|
+
// dict-count = number-4
|
|
652
|
+
// dict-value = longstr
|
|
653
|
+
// dict-name = string
|
|
654
|
+
//
|
|
655
|
+
// ; Strings are always length + text contents
|
|
656
|
+
// longstr = number-4 *VCHAR
|
|
657
|
+
// string = number-1 *VCHAR
|
|
658
|
+
//
|
|
659
|
+
// ; Numbers are unsigned integers in network byte order
|
|
660
|
+
// number-1 = 1OCTET
|
|
661
|
+
// number-4 = 4OCTET
|
|
662
|
+
//
|
|
663
|
+
// Comments are not included in the packed data. Item values MUST be
|
|
664
|
+
// strings.
|
|
665
|
+
|
|
666
|
+
zframe_t *
|
|
667
|
+
zhash_pack (zhash_t *self)
|
|
668
|
+
{
|
|
669
|
+
assert (self);
|
|
670
|
+
|
|
671
|
+
// First, calculate packed data size
|
|
672
|
+
size_t frame_size = 4; // Dictionary size, number-4
|
|
673
|
+
uint index;
|
|
674
|
+
for (index = 0; index < self->limit; index++) {
|
|
675
|
+
item_t *item = self->items [index];
|
|
676
|
+
while (item) {
|
|
677
|
+
// We store key as short string
|
|
678
|
+
frame_size += 1 + strlen ((char *) item->key);
|
|
679
|
+
// We store value as long string
|
|
680
|
+
frame_size += 4 + strlen ((char *) item->value);
|
|
681
|
+
item = item->next;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
// Now serialize items into the frame
|
|
685
|
+
zframe_t *frame = zframe_new (NULL, frame_size);
|
|
686
|
+
if (!frame)
|
|
687
|
+
return NULL;
|
|
688
|
+
byte *needle = zframe_data (frame);
|
|
689
|
+
// Store size as number-4
|
|
690
|
+
*(uint32_t *) needle = htonl ((uint32_t) self->size);
|
|
691
|
+
needle += 4;
|
|
692
|
+
for (index = 0; index < self->limit; index++) {
|
|
693
|
+
item_t *item = self->items [index];
|
|
694
|
+
while (item) {
|
|
695
|
+
// Store key as string
|
|
696
|
+
*needle++ = (byte) strlen ((char *) item->key);
|
|
697
|
+
memcpy (needle, item->key, strlen ((char *) item->key));
|
|
698
|
+
needle += strlen ((char *) item->key);
|
|
699
|
+
|
|
700
|
+
// Store value as longstr
|
|
701
|
+
size_t length = strlen ((char *) item->value);
|
|
702
|
+
*(uint32_t *) needle = htonl ((u_long) length);
|
|
703
|
+
needle += 4;
|
|
704
|
+
memcpy (needle, (char *) item->value, strlen ((char *) item->value));
|
|
705
|
+
needle += strlen ((char *) item->value);
|
|
706
|
+
item = item->next;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
return frame;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
// --------------------------------------------------------------------------
|
|
714
|
+
// Unpack binary frame into a new hash table. Packed data must follow format
|
|
715
|
+
// defined by zhash_pack. Hash table is set to autofree. An empty frame
|
|
716
|
+
// unpacks to an empty hash table.
|
|
717
|
+
|
|
718
|
+
zhash_t *
|
|
719
|
+
zhash_unpack (zframe_t *frame)
|
|
720
|
+
{
|
|
721
|
+
zhash_t *self = zhash_new ();
|
|
722
|
+
if (!self)
|
|
723
|
+
return NULL;
|
|
724
|
+
assert (frame);
|
|
725
|
+
if (zframe_size (frame) < 4)
|
|
726
|
+
return self; // Arguable...
|
|
727
|
+
|
|
728
|
+
byte *needle = zframe_data (frame);
|
|
729
|
+
byte *ceiling = needle + zframe_size (frame);
|
|
730
|
+
size_t nbr_items = ntohl (*(uint32_t *) needle);
|
|
731
|
+
needle += 4;
|
|
732
|
+
while (nbr_items && needle < ceiling) {
|
|
733
|
+
// Get key as string
|
|
734
|
+
size_t key_size = *needle++;
|
|
735
|
+
if (needle + key_size <= ceiling) {
|
|
736
|
+
char key [256];
|
|
737
|
+
memcpy (key, needle, key_size);
|
|
738
|
+
key [key_size] = 0;
|
|
739
|
+
needle += key_size;
|
|
740
|
+
|
|
741
|
+
// Get value as longstr
|
|
742
|
+
if (needle + 4 <= ceiling) {
|
|
743
|
+
size_t value_size = ntohl (*(uint32_t *) needle);
|
|
744
|
+
needle += 4;
|
|
745
|
+
// Be wary of malformed frames
|
|
746
|
+
if (needle + value_size <= ceiling) {
|
|
747
|
+
char *value = (char *) malloc (value_size + 1);
|
|
748
|
+
memcpy (value, needle, value_size);
|
|
749
|
+
value [value_size] = 0;
|
|
750
|
+
needle += value_size;
|
|
751
|
+
|
|
752
|
+
// Hash takes ownership of value
|
|
753
|
+
if (zhash_insert (self, key, value)) {
|
|
754
|
+
zhash_destroy (&self);
|
|
755
|
+
break;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
// Hash will free values in destructor
|
|
762
|
+
if (self)
|
|
763
|
+
zhash_autofree (self);
|
|
764
|
+
return self;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
// --------------------------------------------------------------------------
|
|
769
|
+
// Set hash for automatic value destruction
|
|
770
|
+
|
|
771
|
+
void
|
|
772
|
+
zhash_autofree (zhash_t *self)
|
|
773
|
+
{
|
|
774
|
+
assert (self);
|
|
775
|
+
self->autofree = true;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
// --------------------------------------------------------------------------
|
|
780
|
+
// Runs selftest of class
|
|
781
|
+
//
|
|
782
|
+
|
|
783
|
+
void
|
|
784
|
+
zhash_test (bool verbose)
|
|
785
|
+
{
|
|
786
|
+
printf (" * zhash: ");
|
|
787
|
+
|
|
788
|
+
// @selftest
|
|
789
|
+
zhash_t *hash = zhash_new ();
|
|
790
|
+
assert (hash);
|
|
791
|
+
assert (zhash_size (hash) == 0);
|
|
792
|
+
assert (zhash_first (hash) == NULL);
|
|
793
|
+
assert (zhash_cursor (hash) == NULL);
|
|
794
|
+
|
|
795
|
+
// Insert some items
|
|
796
|
+
int rc;
|
|
797
|
+
rc = zhash_insert (hash, "DEADBEEF", "dead beef");
|
|
798
|
+
char *item = (char *) zhash_first (hash);
|
|
799
|
+
assert (streq (zhash_cursor (hash), "DEADBEEF"));
|
|
800
|
+
assert (streq (item, "dead beef"));
|
|
801
|
+
assert (rc == 0);
|
|
802
|
+
rc = zhash_insert (hash, "ABADCAFE", "a bad cafe");
|
|
803
|
+
assert (rc == 0);
|
|
804
|
+
rc = zhash_insert (hash, "C0DEDBAD", "coded bad");
|
|
805
|
+
assert (rc == 0);
|
|
806
|
+
rc = zhash_insert (hash, "DEADF00D", "dead food");
|
|
807
|
+
assert (rc == 0);
|
|
808
|
+
assert (zhash_size (hash) == 4);
|
|
809
|
+
|
|
810
|
+
// Look for existing items
|
|
811
|
+
item = (char *) zhash_lookup (hash, "DEADBEEF");
|
|
812
|
+
assert (streq (item, "dead beef"));
|
|
813
|
+
item = (char *) zhash_lookup (hash, "ABADCAFE");
|
|
814
|
+
assert (streq (item, "a bad cafe"));
|
|
815
|
+
item = (char *) zhash_lookup (hash, "C0DEDBAD");
|
|
816
|
+
assert (streq (item, "coded bad"));
|
|
817
|
+
item = (char *) zhash_lookup (hash, "DEADF00D");
|
|
818
|
+
assert (streq (item, "dead food"));
|
|
819
|
+
|
|
820
|
+
// Look for non-existent items
|
|
821
|
+
item = (char *) zhash_lookup (hash, "foo");
|
|
822
|
+
assert (item == NULL);
|
|
823
|
+
|
|
824
|
+
// Try to insert duplicate items
|
|
825
|
+
rc = zhash_insert (hash, "DEADBEEF", "foo");
|
|
826
|
+
assert (rc == -1);
|
|
827
|
+
item = (char *) zhash_lookup (hash, "DEADBEEF");
|
|
828
|
+
assert (streq (item, "dead beef"));
|
|
829
|
+
|
|
830
|
+
// Some rename tests
|
|
831
|
+
|
|
832
|
+
// Valid rename, key is now LIVEBEEF
|
|
833
|
+
rc = zhash_rename (hash, "DEADBEEF", "LIVEBEEF");
|
|
834
|
+
assert (rc == 0);
|
|
835
|
+
item = (char *) zhash_lookup (hash, "LIVEBEEF");
|
|
836
|
+
assert (streq (item, "dead beef"));
|
|
837
|
+
|
|
838
|
+
// Trying to rename an unknown item to a non-existent key
|
|
839
|
+
rc = zhash_rename (hash, "WHATBEEF", "NONESUCH");
|
|
840
|
+
assert (rc == -1);
|
|
841
|
+
|
|
842
|
+
// Trying to rename an unknown item to an existing key
|
|
843
|
+
rc = zhash_rename (hash, "WHATBEEF", "LIVEBEEF");
|
|
844
|
+
assert (rc == -1);
|
|
845
|
+
item = (char *) zhash_lookup (hash, "LIVEBEEF");
|
|
846
|
+
assert (streq (item, "dead beef"));
|
|
847
|
+
|
|
848
|
+
// Trying to rename an existing item to another existing item
|
|
849
|
+
rc = zhash_rename (hash, "LIVEBEEF", "ABADCAFE");
|
|
850
|
+
assert (rc == -1);
|
|
851
|
+
item = (char *) zhash_lookup (hash, "LIVEBEEF");
|
|
852
|
+
assert (streq (item, "dead beef"));
|
|
853
|
+
item = (char *) zhash_lookup (hash, "ABADCAFE");
|
|
854
|
+
assert (streq (item, "a bad cafe"));
|
|
855
|
+
|
|
856
|
+
// Test keys method
|
|
857
|
+
zlist_t *keys = zhash_keys (hash);
|
|
858
|
+
assert (zlist_size (keys) == 4);
|
|
859
|
+
zlist_destroy (&keys);
|
|
860
|
+
|
|
861
|
+
// Test dup method
|
|
862
|
+
zhash_t *copy = zhash_dup (hash);
|
|
863
|
+
assert (zhash_size (copy) == 4);
|
|
864
|
+
item = (char *) zhash_lookup (copy, "LIVEBEEF");
|
|
865
|
+
assert (item);
|
|
866
|
+
assert (streq (item, "dead beef"));
|
|
867
|
+
zhash_destroy (©);
|
|
868
|
+
|
|
869
|
+
// Test pack/unpack methods
|
|
870
|
+
zframe_t *frame = zhash_pack (hash);
|
|
871
|
+
copy = zhash_unpack (frame);
|
|
872
|
+
zframe_destroy (&frame);
|
|
873
|
+
assert (zhash_size (copy) == 4);
|
|
874
|
+
item = (char *) zhash_lookup (copy, "LIVEBEEF");
|
|
875
|
+
assert (item);
|
|
876
|
+
assert (streq (item, "dead beef"));
|
|
877
|
+
zhash_destroy (©);
|
|
878
|
+
|
|
879
|
+
// Test save and load
|
|
880
|
+
zhash_comment (hash, "This is a test file");
|
|
881
|
+
zhash_comment (hash, "Created by %s", "czmq_selftest");
|
|
882
|
+
zhash_save (hash, ".cache");
|
|
883
|
+
copy = zhash_new ();
|
|
884
|
+
assert (copy);
|
|
885
|
+
zhash_load (copy, ".cache");
|
|
886
|
+
item = (char *) zhash_lookup (copy, "LIVEBEEF");
|
|
887
|
+
assert (item);
|
|
888
|
+
assert (streq (item, "dead beef"));
|
|
889
|
+
zhash_destroy (©);
|
|
890
|
+
zsys_file_delete (".cache");
|
|
891
|
+
|
|
892
|
+
// Delete a item
|
|
893
|
+
zhash_delete (hash, "LIVEBEEF");
|
|
894
|
+
item = (char *) zhash_lookup (hash, "LIVEBEEF");
|
|
895
|
+
assert (item == NULL);
|
|
896
|
+
assert (zhash_size (hash) == 3);
|
|
897
|
+
|
|
898
|
+
// Check that the queue is robust against random usage
|
|
899
|
+
struct {
|
|
900
|
+
char name [100];
|
|
901
|
+
bool exists;
|
|
902
|
+
} testset [200];
|
|
903
|
+
memset (testset, 0, sizeof (testset));
|
|
904
|
+
int testmax = 200, testnbr, iteration;
|
|
905
|
+
|
|
906
|
+
srandom ((unsigned) time (NULL));
|
|
907
|
+
for (iteration = 0; iteration < 25000; iteration++) {
|
|
908
|
+
testnbr = randof (testmax);
|
|
909
|
+
assert (testnbr != testmax);
|
|
910
|
+
assert (testnbr < testmax);
|
|
911
|
+
if (testset [testnbr].exists) {
|
|
912
|
+
item = (char *) zhash_lookup (hash, testset [testnbr].name);
|
|
913
|
+
assert (item);
|
|
914
|
+
zhash_delete (hash, testset [testnbr].name);
|
|
915
|
+
testset [testnbr].exists = false;
|
|
916
|
+
}
|
|
917
|
+
else {
|
|
918
|
+
sprintf (testset [testnbr].name, "%x-%x", rand (), rand ());
|
|
919
|
+
if (zhash_insert (hash, testset [testnbr].name, "") == 0)
|
|
920
|
+
testset [testnbr].exists = true;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
// Test 10K lookups
|
|
924
|
+
for (iteration = 0; iteration < 10000; iteration++)
|
|
925
|
+
item = (char *) zhash_lookup (hash, "DEADBEEFABADCAFE");
|
|
926
|
+
|
|
927
|
+
// Destructor should be safe to call twice
|
|
928
|
+
zhash_destroy (&hash);
|
|
929
|
+
zhash_destroy (&hash);
|
|
930
|
+
assert (hash == NULL);
|
|
931
|
+
|
|
932
|
+
// Test autofree; automatically copies and frees string values
|
|
933
|
+
hash = zhash_new ();
|
|
934
|
+
assert (hash);
|
|
935
|
+
zhash_autofree (hash);
|
|
936
|
+
char value [255];
|
|
937
|
+
strcpy (value, "This is a string");
|
|
938
|
+
rc = zhash_insert (hash, "key1", value);
|
|
939
|
+
assert (rc == 0);
|
|
940
|
+
strcpy (value, "Inserting with the same key will fail");
|
|
941
|
+
rc = zhash_insert (hash, "key1", value);
|
|
942
|
+
assert (rc == -1);
|
|
943
|
+
strcpy (value, "Ring a ding ding");
|
|
944
|
+
rc = zhash_insert (hash, "key2", value);
|
|
945
|
+
assert (rc == 0);
|
|
946
|
+
assert (streq ((char *) zhash_lookup (hash, "key1"), "This is a string"));
|
|
947
|
+
assert (streq ((char *) zhash_lookup (hash, "key2"), "Ring a ding ding"));
|
|
948
|
+
zhash_destroy (&hash);
|
|
949
|
+
|
|
950
|
+
#if defined (__WINDOWS__)
|
|
951
|
+
zsys_shutdown();
|
|
952
|
+
#endif
|
|
953
|
+
// @end
|
|
954
|
+
|
|
955
|
+
printf ("OK\n");
|
|
956
|
+
}
|