amps-python-client 5.3.4.1__zip → 5.3.4.3__zip
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.
- amps-python-client-5.3.4.3/LICENSE +168 -0
- amps-python-client-5.3.4.3/PKG-INFO +112 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/intro.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/logon.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/publishing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/removing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/utilities.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_sources/index.rst.txt +36 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/ack-messages.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/content-messages.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/intro.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/logon.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/protocol-reference.html +93 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/publishing.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-delimiters.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-subscribe.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/removing.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/chapters/utilities.html +95 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/genindex.html +97 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/index.html +98 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/objects.inv +6 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/command-reference/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/html/code.html +6851 -0
- amps-python-client-5.3.4.3/docs/html/genindex.html +1363 -0
- amps-python-client-5.3.4.3/docs/html/index.html +131 -0
- amps-python-client-5.3.4.3/docs/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/html/py-modindex.html +111 -0
- amps-python-client-5.3.4.3/docs/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/deltas.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/first-program.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/installing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/introduction.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/python/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/error-handling.rst.txt +481 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/exceptions.rst.txt +123 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/first-program.rst.txt +168 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/high-availability.rst.txt +879 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/performance-tips.rst.txt +432 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/sow.rst.txt +294 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
- amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
- amps-python-client-5.3.4.3/docs/python/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/advanced-topics.html +447 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-compiler-list.html +92 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-feature-table.html +156 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/creating-commands.html +2882 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/deltas.html +169 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/error-handling.html +745 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/exceptions.html +266 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/first-program.html +526 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/high-availability.html +1017 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/installing.html +264 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/introduction.html +245 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/moving-from-python-lite.html +118 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/performance-tips.html +499 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/queues.html +352 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/sow.html +383 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/subscriptions.html +535 -0
- amps-python-client-5.3.4.3/docs/python/html/chapters/utilities.html +302 -0
- amps-python-client-5.3.4.3/docs/python/html/genindex.html +351 -0
- amps-python-client-5.3.4.3/docs/python/html/index.html +382 -0
- amps-python-client-5.3.4.3/docs/python/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/python/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/python/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/crankitup.html +271 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/equipment.html +105 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/genindex.html +97 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/index.html +381 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/search.html +107 -0
- amps-python-client-5.3.4.3/docs/python-quickstart/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/.buildinfo +4 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/acks.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/actions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/daemon.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/delta.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/distribution.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/events.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/glossary.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/ha.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/intro.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/logging.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/oof.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/operation.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/queues.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/replication.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/securing.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/transports.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/txlog.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/usecases.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/utilities.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/views.rst.txt +8 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_sources/index.rst.txt +62 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/_static/custom.css +161 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/acks.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/actions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps-statistics.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_expressions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_functions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/auxiliary_modules.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/config-file-shortcuts.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/conflated_topics.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/constructing-fields.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/daemon.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/delta.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/distribution.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/enrichment.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/events.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/file_format_versions.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/glossary.html +92 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/ha.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/installing_and_starting.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/intro.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/logging.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/messageTypes.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/monitoring.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/oof.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/operation.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/pub_sub.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/queues.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/replication.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/securing.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow_queries.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/spark.html +819 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/transports.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/troubleshooting.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/txlog.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/usecases.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/utilities.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/chapters/views.html +94 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/genindex.html +133 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/index.html +96 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/objects.inv +0 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/search.html +106 -0
- amps-python-client-5.3.4.3/docs/user-guide/html/searchindex.js +1 -0
- amps-python-client-5.3.4.3/include/ampspy_bookmarkstore.hpp +63 -0
- amps-python-client-5.3.4.3/include/ampspy_compat.h +63 -0
- amps-python-client-5.3.4.3/include/ampspy_defs.hpp +181 -0
- amps-python-client-5.3.4.3/include/ampspy_recoverypointadapter.hpp +52 -0
- amps-python-client-5.3.4.3/include/ampspy_shims.hpp +113 -0
- amps-python-client-5.3.4.3/include/ampspy_type_object.hpp +242 -0
- amps-python-client-5.3.4.3/include/ampspy_types.hpp +1139 -0
- amps-python-client-5.3.4.3/include/ampspyver.h +30 -0
- amps-python-client-5.3.4.3/index.html +66 -0
- amps-python-client-5.3.4.3/samples/AMPSConsolePublisher.py +59 -0
- amps-python-client-5.3.4.3/samples/AMPSConsoleSubscriber.py +63 -0
- amps-python-client-5.3.4.3/samples/AMPSFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.3/samples/AMPSFIXShredderSubscriber.py +69 -0
- amps-python-client-5.3.4.3/samples/AMPSNVFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.3/samples/AMPSNVFIXShredderSubscriber.py +67 -0
- amps-python-client-5.3.4.3/samples/AMPSPublishForReplay.py +81 -0
- amps-python-client-5.3.4.3/samples/AMPSQueueConsumer.py +69 -0
- amps-python-client-5.3.4.3/samples/AMPSQueuePublisher.py +59 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWConsolePublisher.py +67 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWConsoleSubscriber.py +77 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
- amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
- amps-python-client-5.3.4.3/samples/AMPSSubscribeForReplay.py +128 -0
- amps-python-client-5.3.4.3/samples/AMPSUpdateForOOF.py +123 -0
- amps-python-client-5.3.4.3/samples/CompositeMessagePublisher.py +84 -0
- amps-python-client-5.3.4.3/samples/CompositeMessageSubscriber.py +87 -0
- amps-python-client-5.3.4.3/samples/RandomServerChooser.py +66 -0
- amps-python-client-5.3.4.3/samples/sample.xml +335 -0
- amps-python-client-5.3.4.3/setup.py +210 -0
- amps-python-client-5.3.4.3/setup_amps.py +94 -0
- amps-python-client-5.3.4.3/src/ampspy_shims.cpp +214 -0
- amps-python-client-5.3.4.3/src/ampspy_type_object.cpp +495 -0
- amps-python-client-5.3.4.3/src/authenticator.cpp +128 -0
- amps-python-client-5.3.4.3/src/bookmarkstore.cpp +246 -0
- amps-python-client-5.3.4.3/src/client.cpp +2648 -0
- amps-python-client-5.3.4.3/src/client_docs.h +1210 -0
- amps-python-client-5.3.4.3/src/cmessagehandler.cpp +161 -0
- amps-python-client-5.3.4.3/src/command.cpp +164 -0
- amps-python-client-5.3.4.3/src/command_docs.h +274 -0
- amps-python-client-5.3.4.3/src/compositemessagebuilder.cpp +113 -0
- amps-python-client-5.3.4.3/src/compositemessageparser.cpp +151 -0
- amps-python-client-5.3.4.3/src/conflatingrecoverypointadapter.cpp +197 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BlockPublishStore.hpp +2050 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BlockStore.hpp +674 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/BookmarkStore.hpp +542 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Buffer.hpp +214 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Field.hpp +723 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HAClient.hpp +370 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HAClientImpl.hpp +460 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/LoggedBookmarkStore.hpp +1256 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MMapStoreBuffer.hpp +297 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryBookmarkStore.hpp +1628 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryStoreBuffer.hpp +247 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/Message.hpp +1827 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/MessageRouter.hpp +647 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/PublishStore.hpp +158 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +494 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooser.hpp +156 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps.h +815 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps_impl.h +220 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/amps_ssl.h +78 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampscrc.hpp +208 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsplusplus.hpp +8846 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsuri.h +84 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h +41 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h.in +41 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/constants.hpp +194 -0
- amps-python-client-5.3.4.3/src/cpp/include/amps/util.hpp +1722 -0
- amps-python-client-5.3.4.3/src/cpp/src/amps_protocol.c +693 -0
- amps-python-client-5.3.4.3/src/cpp/src/amps_ssl.c +565 -0
- amps-python-client-5.3.4.3/src/cpp/src/atfork.c +484 -0
- amps-python-client-5.3.4.3/src/cpp/src/client.c +498 -0
- amps-python-client-5.3.4.3/src/cpp/src/message.c +837 -0
- amps-python-client-5.3.4.3/src/cpp/src/message_generated.h +611 -0
- amps-python-client-5.3.4.3/src/cpp/src/tcp.c +1683 -0
- amps-python-client-5.3.4.3/src/cpp/src/tcps.c +2005 -0
- amps-python-client-5.3.4.3/src/cpp/src/transports.c +129 -0
- amps-python-client-5.3.4.3/src/cpp/src/unix.c +1063 -0
- amps-python-client-5.3.4.3/src/cpp/src/uri.c +301 -0
- amps-python-client-5.3.4.3/src/exponentialdelaystrategy.cpp +131 -0
- amps-python-client-5.3.4.3/src/failedwritehandler.cpp +116 -0
- amps-python-client-5.3.4.3/src/fixbuilder.cpp +146 -0
- amps-python-client-5.3.4.3/src/fixeddelaystrategy.cpp +115 -0
- amps-python-client-5.3.4.3/src/fixshredder.cpp +105 -0
- amps-python-client-5.3.4.3/src/fixshredder_docs.h +38 -0
- amps-python-client-5.3.4.3/src/haclient.cpp +691 -0
- amps-python-client-5.3.4.3/src/haclient_docs.h +200 -0
- amps-python-client-5.3.4.3/src/hybridpublishstore.cpp +137 -0
- amps-python-client-5.3.4.3/src/hybridpublishstore_docs.h +31 -0
- amps-python-client-5.3.4.3/src/memorybookmarkstore.cpp +373 -0
- amps-python-client-5.3.4.3/src/memorybookmarkstore_docs.h +39 -0
- amps-python-client-5.3.4.3/src/memorypublishstore.cpp +160 -0
- amps-python-client-5.3.4.3/src/memorypublishstore_docs.h +32 -0
- amps-python-client-5.3.4.3/src/message.cpp +765 -0
- amps-python-client-5.3.4.3/src/message_docs.h +306 -0
- amps-python-client-5.3.4.3/src/messagestream.cpp +630 -0
- amps-python-client-5.3.4.3/src/messagestream_docs.h +45 -0
- amps-python-client-5.3.4.3/src/mmapbookmarkstore.cpp +422 -0
- amps-python-client-5.3.4.3/src/nvfixbuilder.cpp +160 -0
- amps-python-client-5.3.4.3/src/nvfixbuilder_docs.h +35 -0
- amps-python-client-5.3.4.3/src/nvfixshredder.cpp +99 -0
- amps-python-client-5.3.4.3/src/nvfixshredder_docs.h +43 -0
- amps-python-client-5.3.4.3/src/publishstore.cpp +183 -0
- amps-python-client-5.3.4.3/src/raw_wrapper.cpp +765 -0
- amps-python-client-5.3.4.3/src/reason.cpp +71 -0
- amps-python-client-5.3.4.3/src/recoverypoint.cpp +135 -0
- amps-python-client-5.3.4.3/src/recoverypointadapter.cpp +171 -0
- amps-python-client-5.3.4.3/src/ringbookmarkstore.cpp +360 -0
- amps-python-client-5.3.4.3/src/serverchooser.cpp +245 -0
- amps-python-client-5.3.4.3/src/serverchooser_docs.h +41 -0
- amps-python-client-5.3.4.3/src/sowrecoverypointadapter.cpp +248 -0
- amps-python-client-5.3.4.3/src/store.cpp +62 -0
- amps-python-client-5.3.4.3/src/versioninfo.cpp +175 -0
- amps-python-client-5.3.4.1/LICENSE +0 -157
- amps-python-client-5.3.4.1/PKG-INFO +0 -112
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -32
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -27
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -43
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -231
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -1474
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -25
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -12
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -23
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -6
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -13
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +0 -56
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +0 -417
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +0 -417
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +0 -126
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +0 -295
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +0 -1190
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +0 -436
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +0 -173
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +0 -2123
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +0 -299
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +0 -287
- amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +0 -97
- amps-python-client-5.3.4.1/docs/command-reference/html/index.html +0 -138
- amps-python-client-5.3.4.1/docs/command-reference/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/search.html +0 -107
- amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/docs/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/html/code.html +0 -6503
- amps-python-client-5.3.4.1/docs/html/genindex.html +0 -1361
- amps-python-client-5.3.4.1/docs/html/index.html +0 -131
- amps-python-client-5.3.4.1/docs/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/html/py-modindex.html +0 -111
- amps-python-client-5.3.4.1/docs/html/search.html +0 -107
- amps-python-client-5.3.4.1/docs/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/deltas.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/first-program.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/installing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/introduction.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +0 -25
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -398
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -26
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -159
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +0 -79
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -482
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -128
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +0 -142
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -876
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +0 -184
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +0 -50
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -32
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -434
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +0 -282
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +0 -292
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -374
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +0 -214
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +0 -447
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +0 -92
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +0 -156
- amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +0 -2837
- amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +0 -169
- amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +0 -746
- amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +0 -272
- amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +0 -499
- amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +0 -1014
- amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +0 -264
- amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +0 -245
- amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +0 -118
- amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +0 -499
- amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +0 -352
- amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +0 -381
- amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +0 -535
- amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +0 -302
- amps-python-client-5.3.4.1/docs/python/html/genindex.html +0 -351
- amps-python-client-5.3.4.1/docs/python/html/index.html +0 -380
- amps-python-client-5.3.4.1/docs/python/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python/html/search.html +0 -107
- amps-python-client-5.3.4.1/docs/python/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +0 -271
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +0 -105
- amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +0 -97
- amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +0 -382
- amps-python-client-5.3.4.1/docs/python-quickstart/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/search.html +0 -107
- amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/.buildinfo +0 -4
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +0 -1330
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/GeoRepl.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_async_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_sync_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/Hot-Hot-Replication.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/MessageOrdering.svg +0 -235
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF5.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF6.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF7.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF8.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub1.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +0 -684
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +0 -402
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +0 -505
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.svg +0 -25
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/chicago_group.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_original_messages.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_update_message.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.svg +0 -25
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_pub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_sub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/queue_usage_overview.svg +0 -627
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_hub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_scenario_with_ha.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_1.svg +0 -248
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +0 -183
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +0 -1
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.svg +0 -31
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.svg +0 -23
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -232
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -111
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -358
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -83
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -11
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -86
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -9
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -111
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -269
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -232
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -556
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -186
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -191
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -39
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -203
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -101
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -465
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -23
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -116
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -34
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -1398
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -326
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -312
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -27
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -49
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -1351
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -1228
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -657
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -57
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -25
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -291
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -517
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -62
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -21
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -62
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -175
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +0 -110
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +0 -192
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +0 -161
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +0 -289
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +0 -3782
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +0 -439
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +0 -1552
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +0 -1626
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +0 -2548
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -508
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +0 -328
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +0 -447
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +0 -295
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +0 -609
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +0 -246
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +0 -264
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +0 -449
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +0 -229
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +0 -215
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +0 -978
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +0 -357
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +0 -572
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +0 -972
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +0 -1280
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +0 -718
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +0 -341
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +0 -1515
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +0 -934
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +0 -1767
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +0 -1777
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +0 -697
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +0 -1038
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +0 -621
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +0 -819
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +0 -352
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +0 -530
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +0 -1013
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +0 -288
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +0 -133
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +0 -1120
- amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +0 -1261
- amps-python-client-5.3.4.1/docs/user-guide/html/index.html +0 -163
- amps-python-client-5.3.4.1/docs/user-guide/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/search.html +0 -106
- amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +0 -1
- amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +0 -63
- amps-python-client-5.3.4.1/include/ampspy_compat.h +0 -63
- amps-python-client-5.3.4.1/include/ampspy_defs.hpp +0 -181
- amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +0 -52
- amps-python-client-5.3.4.1/include/ampspy_shims.hpp +0 -113
- amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +0 -242
- amps-python-client-5.3.4.1/include/ampspy_types.hpp +0 -1139
- amps-python-client-5.3.4.1/include/ampspyver.h +0 -30
- amps-python-client-5.3.4.1/index.html +0 -66
- amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +0 -59
- amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +0 -63
- amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +0 -71
- amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +0 -69
- amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +0 -71
- amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +0 -67
- amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +0 -81
- amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +0 -69
- amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +0 -59
- amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +0 -67
- amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +0 -77
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -79
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +0 -108
- amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +0 -128
- amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +0 -123
- amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +0 -84
- amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +0 -87
- amps-python-client-5.3.4.1/samples/RandomServerChooser.py +0 -41
- amps-python-client-5.3.4.1/samples/sample.xml +0 -335
- amps-python-client-5.3.4.1/setup.py +0 -209
- amps-python-client-5.3.4.1/setup_amps.py +0 -94
- amps-python-client-5.3.4.1/src/ampspy_shims.cpp +0 -203
- amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +0 -484
- amps-python-client-5.3.4.1/src/authenticator.cpp +0 -128
- amps-python-client-5.3.4.1/src/bookmarkstore.cpp +0 -238
- amps-python-client-5.3.4.1/src/client.cpp +0 -2430
- amps-python-client-5.3.4.1/src/client_docs.h +0 -956
- amps-python-client-5.3.4.1/src/cmessagehandler.cpp +0 -151
- amps-python-client-5.3.4.1/src/command.cpp +0 -164
- amps-python-client-5.3.4.1/src/command_docs.h +0 -194
- amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +0 -111
- amps-python-client-5.3.4.1/src/compositemessageparser.cpp +0 -146
- amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +0 -194
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +0 -2053
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +0 -677
- amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +0 -542
- amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +0 -214
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -174
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +0 -151
- amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +0 -162
- amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +0 -719
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +0 -370
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +0 -460
- amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +0 -481
- amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +0 -1255
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -1283
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +0 -290
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +0 -1622
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +0 -66
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +0 -244
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -850
- amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +0 -1819
- amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +0 -618
- amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +0 -158
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +0 -106
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -317
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +0 -323
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -501
- amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +0 -669
- amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +0 -490
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +0 -145
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +0 -95
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +0 -775
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +0 -204
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +0 -78
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +0 -210
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +0 -8817
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +0 -84
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +0 -41
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +0 -41
- amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +0 -194
- amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +0 -1692
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +0 -688
- amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +0 -489
- amps-python-client-5.3.4.1/src/cpp/src/atfork.c +0 -446
- amps-python-client-5.3.4.1/src/cpp/src/client.c +0 -483
- amps-python-client-5.3.4.1/src/cpp/src/message.c +0 -837
- amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +0 -611
- amps-python-client-5.3.4.1/src/cpp/src/tcp.c +0 -1489
- amps-python-client-5.3.4.1/src/cpp/src/tcps.c +0 -1894
- amps-python-client-5.3.4.1/src/cpp/src/transports.c +0 -123
- amps-python-client-5.3.4.1/src/cpp/src/unix.c +0 -984
- amps-python-client-5.3.4.1/src/cpp/src/uri.c +0 -301
- amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +0 -137
- amps-python-client-5.3.4.1/src/failedwritehandler.cpp +0 -116
- amps-python-client-5.3.4.1/src/fixbuilder.cpp +0 -146
- amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +0 -114
- amps-python-client-5.3.4.1/src/fixshredder.cpp +0 -105
- amps-python-client-5.3.4.1/src/fixshredder_docs.h +0 -38
- amps-python-client-5.3.4.1/src/haclient.cpp +0 -691
- amps-python-client-5.3.4.1/src/haclient_docs.h +0 -132
- amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +0 -137
- amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +0 -31
- amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +0 -373
- amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +0 -39
- amps-python-client-5.3.4.1/src/memorypublishstore.cpp +0 -160
- amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +0 -32
- amps-python-client-5.3.4.1/src/message.cpp +0 -765
- amps-python-client-5.3.4.1/src/message_docs.h +0 -306
- amps-python-client-5.3.4.1/src/messagestream.cpp +0 -623
- amps-python-client-5.3.4.1/src/messagestream_docs.h +0 -45
- amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +0 -422
- amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +0 -160
- amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +0 -33
- amps-python-client-5.3.4.1/src/nvfixshredder.cpp +0 -99
- amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +0 -39
- amps-python-client-5.3.4.1/src/publishstore.cpp +0 -183
- amps-python-client-5.3.4.1/src/raw_wrapper.cpp +0 -756
- amps-python-client-5.3.4.1/src/reason.cpp +0 -71
- amps-python-client-5.3.4.1/src/recoverypoint.cpp +0 -135
- amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +0 -171
- amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +0 -360
- amps-python-client-5.3.4.1/src/serverchooser.cpp +0 -245
- amps-python-client-5.3.4.1/src/serverchooser_docs.h +0 -39
- amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +0 -248
- amps-python-client-5.3.4.1/src/store.cpp +0 -62
- amps-python-client-5.3.4.1/src/versioninfo.cpp +0 -175
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/HISTORY +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/README.md +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/code.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/classic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/default.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/sidebar.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/caution.png +0 -0
- {amps-python-client-5.3.4.1/docs/command-reference → amps-python-client-5.3.4.3/docs/python}/html/_images/caution.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/connection_string.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/warning.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/custom.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_generated.h +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/amps_protocol_generated.h +0 -0
- {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/makefile +0 -0
|
@@ -0,0 +1,1722 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2010-2024 60East Technologies Inc., All Rights Reserved.
|
|
4
|
+
//
|
|
5
|
+
// This computer software is owned by 60East Technologies Inc. and is
|
|
6
|
+
// protected by U.S. copyright laws and other laws and by international
|
|
7
|
+
// treaties. This computer software is furnished by 60East Technologies
|
|
8
|
+
// Inc. pursuant to a written license agreement and may be used, copied,
|
|
9
|
+
// transmitted, and stored only in accordance with the terms of such
|
|
10
|
+
// license agreement and with the inclusion of the above copyright notice.
|
|
11
|
+
// This computer software or any other copies thereof may not be provided
|
|
12
|
+
// or otherwise made available to any other person.
|
|
13
|
+
//
|
|
14
|
+
// U.S. Government Restricted Rights. This computer software: (a) was
|
|
15
|
+
// developed at private expense and is in all respects the proprietary
|
|
16
|
+
// information of 60East Technologies Inc.; (b) was not developed with
|
|
17
|
+
// government funds; (c) is a trade secret of 60East Technologies Inc.
|
|
18
|
+
// for all purposes of the Freedom of Information Act; and (d) is a
|
|
19
|
+
// commercial item and thus, pursuant to Section 12.212 of the Federal
|
|
20
|
+
// Acquisition Regulations (FAR) and DFAR Supplement Section 227.7202,
|
|
21
|
+
// Government's use, duplication or disclosure of the computer software
|
|
22
|
+
// is subject to the restrictions set forth by 60East Technologies Inc..
|
|
23
|
+
//
|
|
24
|
+
////////////////////////////////////////////////////////////////////////////
|
|
25
|
+
#ifndef __AMPS_UTIL_HPP_
|
|
26
|
+
#define __AMPS_UTIL_HPP_
|
|
27
|
+
#define _AMPS_SKIP_AMPSPLUSPLUS
|
|
28
|
+
#include <amps/amps.h>
|
|
29
|
+
#undef _AMPS_SKIP_AMPSPLUSPLUS
|
|
30
|
+
#include <amps/ampsuri.h>
|
|
31
|
+
#include <stdlib.h>
|
|
32
|
+
#include <ctype.h>
|
|
33
|
+
#include <map>
|
|
34
|
+
#include <stdexcept>
|
|
35
|
+
|
|
36
|
+
#ifdef _WIN32
|
|
37
|
+
#include <WinSock2.h>
|
|
38
|
+
#define OFF_T size_t
|
|
39
|
+
#else
|
|
40
|
+
#include <netdb.h>
|
|
41
|
+
#include <netinet/ip.h>
|
|
42
|
+
#include <errno.h>
|
|
43
|
+
#include <pthread.h>
|
|
44
|
+
#include <unistd.h>
|
|
45
|
+
#include <sys/time.h>
|
|
46
|
+
#define OFF_T off_t
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
#ifndef _WIN32
|
|
50
|
+
#include <inttypes.h>
|
|
51
|
+
extern "C" {
|
|
52
|
+
#include <amps/amps_impl.h>
|
|
53
|
+
}
|
|
54
|
+
#endif
|
|
55
|
+
#if defined(sun)
|
|
56
|
+
#include <sys/atomic.h>
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
#if __cplusplus >= 201100L || _MSC_VER >= 1900
|
|
60
|
+
#include <atomic>
|
|
61
|
+
#define AMPS_ATOMIC_TYPE_8 std::atomic<char>
|
|
62
|
+
#define AMPS_FETCH_AND_8(x, y) (x)->fetch_and(y)
|
|
63
|
+
#define AMPS_FETCH_OR_8(x, y) (x)->fetch_or(y)
|
|
64
|
+
#if defined(_WIN32 )
|
|
65
|
+
#define AMPS_ATOMIC_BASE_TYPE LONG64
|
|
66
|
+
#define AMPS_ATOMIC_TYPE std::atomic<LONG64>
|
|
67
|
+
#else
|
|
68
|
+
#define AMPS_ATOMIC_BASE_TYPE long
|
|
69
|
+
#define AMPS_ATOMIC_TYPE std::atomic<long>
|
|
70
|
+
#endif
|
|
71
|
+
#define AMPS_FETCH_ADD(x, y) (x)->fetch_add(y)
|
|
72
|
+
#define AMPS_FETCH_SUB(x, y) (x)->fetch_sub(y)
|
|
73
|
+
#define AMPS_FETCH_AND(x, y) (x)->fetch_and(y)
|
|
74
|
+
#define AMPS_FETCH_OR(x, y) (x)->fetch_or(y)
|
|
75
|
+
#elif defined(_WIN32 )
|
|
76
|
+
#define AMPS_ATOMIC_TYPE_8 volatile char
|
|
77
|
+
#define AMPS_FETCH_AND_8(ptr, value) InterlockedAnd8((char volatile*)(ptr), (char)(value))
|
|
78
|
+
#define AMPS_FETCH_OR_8(ptr, value) InterlockedOr8((char volatile*)(ptr), (char)(value))
|
|
79
|
+
#define AMPS_ATOMIC_BASE_TYPE LONG64
|
|
80
|
+
#define AMPS_ATOMIC_TYPE volatile LONG64
|
|
81
|
+
#define AMPS_FETCH_ADD(ptr, value) InterlockedExchangeAdd64((LONG64 volatile*)(ptr), (LONG64)(value))
|
|
82
|
+
#define AMPS_FETCH_SUB(ptr, value) InterlockedExchangeAdd64((LONG64 volatile*)(ptr), (LONG64)(-1 * (value)))
|
|
83
|
+
#define AMPS_FETCH_AND(ptr, value) InterlockedAnd64((LONG64 volatile*)(ptr), (LONG64)(value))
|
|
84
|
+
#define AMPS_FETCH_OR(ptr, value) InterlockedOr64((LONG64 volatile*)(ptr), (LONG64)(value))
|
|
85
|
+
#elif defined(sun)
|
|
86
|
+
#define AMPS_ATOMIC_TYPE_8 volatile char
|
|
87
|
+
#define AMPS_FETCH_AND_8(x, y) atomic_and_8_nv((volatile char*)(x), (y))
|
|
88
|
+
#define AMPS_FETCH_OR_8(x, y) atomic_or_8_nv((volatile char*)(x), (y))
|
|
89
|
+
#define AMPS_ATOMIC_BASE_TYPE unsigned long
|
|
90
|
+
#define AMPS_ATOMIC_TYPE volatile unsigned long
|
|
91
|
+
#define AMPS_FETCH_ADD(x, y) atomic_add_long_nv((volatile unsigned long*)(x), (y))
|
|
92
|
+
#define AMPS_FETCH_SUB(x, y) atomic_add_long_nv((volatile unsigned long*)(x), -1*(y))
|
|
93
|
+
#define AMPS_FETCH_AND(x, y) atomic_and_ulong_nv((volatile unsigned long*)(x), (y))
|
|
94
|
+
#define AMPS_FETCH_OR(x, y) atomic_or_ulong_nv((volatile unsigned long*)(x), (y))
|
|
95
|
+
#else
|
|
96
|
+
#define AMPS_ATOMIC_TYPE_8 volatile char
|
|
97
|
+
#define AMPS_FETCH_AND_8(x, y) __sync_fetch_and_and((x), y)
|
|
98
|
+
#define AMPS_FETCH_OR_8(x, y) __sync_fetch_and_or((x), y)
|
|
99
|
+
#define AMPS_ATOMIC_BASE_TYPE long
|
|
100
|
+
#define AMPS_ATOMIC_TYPE volatile long
|
|
101
|
+
#define AMPS_FETCH_ADD(x, y) __sync_fetch_and_add((x), y)
|
|
102
|
+
#define AMPS_FETCH_SUB(x, y) __sync_fetch_and_sub((x), y)
|
|
103
|
+
#define AMPS_FETCH_AND(x, y) __sync_fetch_and_and((x), y)
|
|
104
|
+
#define AMPS_FETCH_OR(x, y) __sync_fetch_and_or((x), y)
|
|
105
|
+
#endif
|
|
106
|
+
|
|
107
|
+
#define AMPS_DEFAULT_MIN_VERSION 99999999
|
|
108
|
+
namespace
|
|
109
|
+
{
|
|
110
|
+
const amps_uint64_t AMPS_DEFAULT_SERVER_VERSION = 9900990009900099;
|
|
111
|
+
}
|
|
112
|
+
///
|
|
113
|
+
/// Simple wrapper around a CRITICAL_SECTION or pthread_mutex_t,
|
|
114
|
+
/// with acquire/release and wait/signalAll support.
|
|
115
|
+
///
|
|
116
|
+
|
|
117
|
+
namespace AMPS
|
|
118
|
+
{
|
|
119
|
+
class Mutex
|
|
120
|
+
{
|
|
121
|
+
// Not implemented.
|
|
122
|
+
Mutex& operator=(const Mutex& rhs);
|
|
123
|
+
Mutex(const Mutex& rhs);
|
|
124
|
+
#ifdef _WIN32
|
|
125
|
+
CRITICAL_SECTION _lock;
|
|
126
|
+
HANDLE _sem;
|
|
127
|
+
int _waiters;
|
|
128
|
+
public:
|
|
129
|
+
Mutex()
|
|
130
|
+
{
|
|
131
|
+
InitializeCriticalSection(&_lock);
|
|
132
|
+
_sem = CreateSemaphore(NULL, 0, LONG_MAX, NULL);
|
|
133
|
+
_waiters = 0;
|
|
134
|
+
}
|
|
135
|
+
~Mutex()
|
|
136
|
+
{
|
|
137
|
+
DeleteCriticalSection(&_lock);
|
|
138
|
+
CloseHandle(_sem);
|
|
139
|
+
}
|
|
140
|
+
void acquireRead()
|
|
141
|
+
{
|
|
142
|
+
EnterCriticalSection(&_lock);
|
|
143
|
+
}
|
|
144
|
+
void releaseRead()
|
|
145
|
+
{
|
|
146
|
+
LeaveCriticalSection(&_lock);
|
|
147
|
+
}
|
|
148
|
+
void acquireWrite()
|
|
149
|
+
{
|
|
150
|
+
EnterCriticalSection(&_lock);
|
|
151
|
+
}
|
|
152
|
+
void releaseWrite()
|
|
153
|
+
{
|
|
154
|
+
LeaveCriticalSection(&_lock);
|
|
155
|
+
}
|
|
156
|
+
void wait()
|
|
157
|
+
{
|
|
158
|
+
++_waiters;
|
|
159
|
+
LeaveCriticalSection(&_lock);
|
|
160
|
+
WaitForSingleObject(_sem, INFINITE);
|
|
161
|
+
EnterCriticalSection(&_lock);
|
|
162
|
+
}
|
|
163
|
+
bool wait(long timeoutMillis)
|
|
164
|
+
{
|
|
165
|
+
++_waiters;
|
|
166
|
+
LeaveCriticalSection(&_lock);
|
|
167
|
+
DWORD result = WaitForSingleObject(_sem, (int)timeoutMillis);
|
|
168
|
+
EnterCriticalSection(&_lock);
|
|
169
|
+
|
|
170
|
+
return WAIT_OBJECT_0 == result;
|
|
171
|
+
}
|
|
172
|
+
void signalAll()
|
|
173
|
+
{
|
|
174
|
+
if (_waiters)
|
|
175
|
+
{
|
|
176
|
+
BOOL rc = ReleaseSemaphore(_sem, _waiters, NULL);
|
|
177
|
+
assert(rc);
|
|
178
|
+
_waiters = 0;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
#else
|
|
182
|
+
pthread_mutex_t _lock;
|
|
183
|
+
pthread_cond_t _condition;
|
|
184
|
+
public:
|
|
185
|
+
Mutex()
|
|
186
|
+
{
|
|
187
|
+
pthread_mutexattr_t attr;
|
|
188
|
+
pthread_mutexattr_init(&attr);
|
|
189
|
+
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
|
190
|
+
pthread_mutex_init(&_lock, &attr);
|
|
191
|
+
pthread_cond_init(&_condition, NULL);
|
|
192
|
+
pthread_mutexattr_destroy(&attr);
|
|
193
|
+
amps_atfork_add((void*)&_lock, amps_mutex_pair_atfork);
|
|
194
|
+
}
|
|
195
|
+
~Mutex()
|
|
196
|
+
{
|
|
197
|
+
amps_atfork_remove((void*)&_lock, amps_mutex_pair_atfork);
|
|
198
|
+
pthread_mutex_destroy(&_lock);
|
|
199
|
+
pthread_cond_destroy(&_condition);
|
|
200
|
+
}
|
|
201
|
+
void acquireRead()
|
|
202
|
+
{
|
|
203
|
+
pthread_mutex_lock(&_lock);
|
|
204
|
+
}
|
|
205
|
+
void releaseRead()
|
|
206
|
+
{
|
|
207
|
+
pthread_mutex_unlock(&_lock);
|
|
208
|
+
}
|
|
209
|
+
void acquireWrite()
|
|
210
|
+
{
|
|
211
|
+
acquireRead();
|
|
212
|
+
}
|
|
213
|
+
void releaseWrite()
|
|
214
|
+
{
|
|
215
|
+
releaseRead();
|
|
216
|
+
}
|
|
217
|
+
void wait()
|
|
218
|
+
{
|
|
219
|
+
pthread_cond_wait(&_condition, &_lock);
|
|
220
|
+
}
|
|
221
|
+
bool wait(long timeoutMillis)
|
|
222
|
+
{
|
|
223
|
+
struct timespec now;
|
|
224
|
+
const long BILLION = 1000L * 1000L * 1000L;
|
|
225
|
+
clock_gettime(CLOCK_REALTIME, &now);
|
|
226
|
+
now.tv_sec += timeoutMillis / 1000;
|
|
227
|
+
now.tv_nsec += (1000 * 1000 * (timeoutMillis % 1000));
|
|
228
|
+
// tv_nsec may not exceed one billion, according to the man pages.
|
|
229
|
+
now.tv_sec += now.tv_nsec / BILLION;
|
|
230
|
+
now.tv_nsec %= BILLION;
|
|
231
|
+
return pthread_cond_timedwait(&_condition, &_lock, &now) == 0;
|
|
232
|
+
}
|
|
233
|
+
void signalAll()
|
|
234
|
+
{
|
|
235
|
+
pthread_cond_broadcast(&_condition);
|
|
236
|
+
}
|
|
237
|
+
#endif
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
///
|
|
242
|
+
/// Simple wrapper around the native reader/writer lock, on POSIX,
|
|
243
|
+
/// and just a plain critical section on Windows.
|
|
244
|
+
///
|
|
245
|
+
class ReadersWriterLock
|
|
246
|
+
{
|
|
247
|
+
ReadersWriterLock(const ReadersWriterLock& rhs);
|
|
248
|
+
ReadersWriterLock& operator= (const ReadersWriterLock& rhs);
|
|
249
|
+
|
|
250
|
+
#ifdef _WIN32
|
|
251
|
+
CRITICAL_SECTION _lock;
|
|
252
|
+
#else
|
|
253
|
+
pthread_rwlock_t _lock;
|
|
254
|
+
#endif
|
|
255
|
+
public:
|
|
256
|
+
ReadersWriterLock()
|
|
257
|
+
{
|
|
258
|
+
#ifdef _WIN32
|
|
259
|
+
InitializeCriticalSection(&_lock);
|
|
260
|
+
#else
|
|
261
|
+
pthread_rwlock_init(&_lock, NULL);
|
|
262
|
+
#endif
|
|
263
|
+
}
|
|
264
|
+
~ReadersWriterLock()
|
|
265
|
+
{
|
|
266
|
+
#ifndef _WIN32
|
|
267
|
+
pthread_rwlock_destroy(&_lock);
|
|
268
|
+
#else
|
|
269
|
+
DeleteCriticalSection(&_lock);
|
|
270
|
+
#endif
|
|
271
|
+
}
|
|
272
|
+
void acquireRead()
|
|
273
|
+
{
|
|
274
|
+
#ifdef _WIN32
|
|
275
|
+
EnterCriticalSection(&_lock);
|
|
276
|
+
#else
|
|
277
|
+
pthread_rwlock_rdlock(&_lock);
|
|
278
|
+
#endif
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
void releaseRead()
|
|
282
|
+
{
|
|
283
|
+
#ifdef _WIN32
|
|
284
|
+
LeaveCriticalSection(&_lock);
|
|
285
|
+
#else
|
|
286
|
+
pthread_rwlock_unlock(&_lock);
|
|
287
|
+
#endif
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void acquireWrite()
|
|
291
|
+
{
|
|
292
|
+
#ifdef _WIN32
|
|
293
|
+
EnterCriticalSection(&_lock);
|
|
294
|
+
#else
|
|
295
|
+
pthread_rwlock_wrlock(&_lock);
|
|
296
|
+
#endif
|
|
297
|
+
}
|
|
298
|
+
void releaseWrite()
|
|
299
|
+
{
|
|
300
|
+
releaseRead();
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
///
|
|
306
|
+
///
|
|
307
|
+
/// Simple RAII-style class for automatic locking/unlocking
|
|
308
|
+
///
|
|
309
|
+
template <class T>
|
|
310
|
+
class Lock
|
|
311
|
+
{
|
|
312
|
+
T& _lock;
|
|
313
|
+
Lock(const Lock<T>& rhs); // not implemented
|
|
314
|
+
Lock<T>& operator=(const Lock<T>& rhs); // not implemented
|
|
315
|
+
public:
|
|
316
|
+
Lock(T& lock) : _lock(lock)
|
|
317
|
+
{
|
|
318
|
+
_lock.acquireRead();
|
|
319
|
+
}
|
|
320
|
+
~Lock()
|
|
321
|
+
{
|
|
322
|
+
_lock.releaseRead();
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
///
|
|
327
|
+
///
|
|
328
|
+
/// Simple RAII-style class for automatic locking/unlocking
|
|
329
|
+
///
|
|
330
|
+
template <class T>
|
|
331
|
+
class LockRead
|
|
332
|
+
{
|
|
333
|
+
T& _lock;
|
|
334
|
+
LockRead(const LockRead<T>& rhs); // not implemented
|
|
335
|
+
LockRead<T>& operator=(const LockRead<T>& rhs); // not implemented
|
|
336
|
+
public:
|
|
337
|
+
LockRead(T& lock) : _lock(lock)
|
|
338
|
+
{
|
|
339
|
+
_lock.acquireRead();
|
|
340
|
+
}
|
|
341
|
+
~LockRead()
|
|
342
|
+
{
|
|
343
|
+
_lock.releaseRead();
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
///
|
|
348
|
+
/// Simple RAII-style class for automatic locking/unlocking.
|
|
349
|
+
/// When used with a ReadersWriterLock, takes an exclusive lock.
|
|
350
|
+
///
|
|
351
|
+
template <class T>
|
|
352
|
+
class LockWrite
|
|
353
|
+
{
|
|
354
|
+
T& _lock;
|
|
355
|
+
LockWrite(const LockWrite<T>& rhs); // not implemented
|
|
356
|
+
LockWrite<T>& operator=(const LockWrite<T>& rhs); // not implemented
|
|
357
|
+
|
|
358
|
+
public:
|
|
359
|
+
LockWrite(T& lock) : _lock(lock)
|
|
360
|
+
{
|
|
361
|
+
_lock.acquireWrite();
|
|
362
|
+
}
|
|
363
|
+
~LockWrite()
|
|
364
|
+
{
|
|
365
|
+
_lock.releaseWrite();
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
///
|
|
370
|
+
/// Simple RAII-style class for automatic unlocking/relocking
|
|
371
|
+
///
|
|
372
|
+
template <class T>
|
|
373
|
+
class Unlock
|
|
374
|
+
{
|
|
375
|
+
T& _lock;
|
|
376
|
+
Unlock(const Unlock<T>& rhs); // not implemented
|
|
377
|
+
Unlock<T>& operator=(const Unlock<T>& rhs); //ni
|
|
378
|
+
|
|
379
|
+
public:
|
|
380
|
+
Unlock(T& lock) : _lock(lock)
|
|
381
|
+
{
|
|
382
|
+
_lock.releaseRead();
|
|
383
|
+
}
|
|
384
|
+
~Unlock()
|
|
385
|
+
{
|
|
386
|
+
_lock.acquireRead();
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
///
|
|
391
|
+
/// Simple RAII-style class for automatic unlocking/relocking
|
|
392
|
+
///
|
|
393
|
+
template <class T>
|
|
394
|
+
class UnlockRead
|
|
395
|
+
{
|
|
396
|
+
T& _lock;
|
|
397
|
+
UnlockRead(const UnlockRead<T>& rhs); // not implemented
|
|
398
|
+
UnlockRead<T>& operator=(const UnlockRead<T>& rhs); //ni
|
|
399
|
+
|
|
400
|
+
public:
|
|
401
|
+
UnlockRead(T& lock) : _lock(lock)
|
|
402
|
+
{
|
|
403
|
+
_lock.releaseRead();
|
|
404
|
+
}
|
|
405
|
+
~UnlockRead()
|
|
406
|
+
{
|
|
407
|
+
_lock.acquireRead();
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
///
|
|
412
|
+
///
|
|
413
|
+
/// Lock guard that defers locking until requested
|
|
414
|
+
///
|
|
415
|
+
template <class T>
|
|
416
|
+
class DeferLock
|
|
417
|
+
{
|
|
418
|
+
T& _lock;
|
|
419
|
+
bool _isLocked;
|
|
420
|
+
DeferLock(const DeferLock<T>& rhs); // not implemented
|
|
421
|
+
DeferLock<T>& operator=(const DeferLock<T>& rhs); // not implemented
|
|
422
|
+
public:
|
|
423
|
+
DeferLock(T& lock) : _lock(lock), _isLocked(false)
|
|
424
|
+
{
|
|
425
|
+
}
|
|
426
|
+
bool isLocked(void) const
|
|
427
|
+
{
|
|
428
|
+
return _isLocked;
|
|
429
|
+
}
|
|
430
|
+
void lock(void)
|
|
431
|
+
{
|
|
432
|
+
_lock.acquireRead();
|
|
433
|
+
_isLocked = true;
|
|
434
|
+
}
|
|
435
|
+
void unlock(void)
|
|
436
|
+
{
|
|
437
|
+
_lock.releaseRead();
|
|
438
|
+
_isLocked = false;
|
|
439
|
+
}
|
|
440
|
+
~DeferLock()
|
|
441
|
+
{
|
|
442
|
+
if (_isLocked)
|
|
443
|
+
{
|
|
444
|
+
_lock.releaseRead();
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
///
|
|
450
|
+
/// Limited unique pointer implementation
|
|
451
|
+
///
|
|
452
|
+
template<class T>
|
|
453
|
+
class amps_unique_ptr
|
|
454
|
+
{
|
|
455
|
+
public:
|
|
456
|
+
amps_unique_ptr() : _body(NULL) {;}
|
|
457
|
+
amps_unique_ptr(T* t_) : _body(t_) {;}
|
|
458
|
+
~amps_unique_ptr()
|
|
459
|
+
{
|
|
460
|
+
delete _body;
|
|
461
|
+
}
|
|
462
|
+
T& operator=(T* t_)
|
|
463
|
+
{
|
|
464
|
+
reset(t_);
|
|
465
|
+
return *_body;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
void reset(T* t_)
|
|
469
|
+
{
|
|
470
|
+
delete _body;
|
|
471
|
+
_body = t_;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
T& operator*()
|
|
475
|
+
{
|
|
476
|
+
return *_body;
|
|
477
|
+
}
|
|
478
|
+
T* operator->()
|
|
479
|
+
{
|
|
480
|
+
return _body;
|
|
481
|
+
}
|
|
482
|
+
const T& operator*() const
|
|
483
|
+
{
|
|
484
|
+
return *_body;
|
|
485
|
+
}
|
|
486
|
+
const T* operator->() const
|
|
487
|
+
{
|
|
488
|
+
return _body;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
operator bool() const
|
|
492
|
+
{
|
|
493
|
+
return _body != NULL;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
T* get()
|
|
497
|
+
{
|
|
498
|
+
return _body;
|
|
499
|
+
}
|
|
500
|
+
const T* get() const
|
|
501
|
+
{
|
|
502
|
+
return _body;
|
|
503
|
+
}
|
|
504
|
+
private:
|
|
505
|
+
T* _body;
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
///
|
|
509
|
+
/// Simple reference-counted body class for AMPS.
|
|
510
|
+
///
|
|
511
|
+
class RefBody
|
|
512
|
+
{
|
|
513
|
+
AMPS_ATOMIC_TYPE _refs;
|
|
514
|
+
protected:
|
|
515
|
+
// we don't want the compiler's version of this, nor should
|
|
516
|
+
// refcounted bodies have one
|
|
517
|
+
const RefBody& operator=(const RefBody&);
|
|
518
|
+
RefBody(const RefBody&);
|
|
519
|
+
public:
|
|
520
|
+
RefBody() : _refs(0) {;}
|
|
521
|
+
virtual ~RefBody() {;}
|
|
522
|
+
void addRef()
|
|
523
|
+
{
|
|
524
|
+
AMPS_FETCH_ADD(&_refs, 1);
|
|
525
|
+
}
|
|
526
|
+
void removeRef()
|
|
527
|
+
{
|
|
528
|
+
// return of 1 means it was set to 0
|
|
529
|
+
if (AMPS_FETCH_SUB(&_refs, 1) == 1)
|
|
530
|
+
{
|
|
531
|
+
destroy();
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
virtual void destroy()
|
|
535
|
+
{
|
|
536
|
+
delete this;
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
///
|
|
541
|
+
/// Template for optionally reference counted handle on a RefBody.
|
|
542
|
+
///
|
|
543
|
+
template<class T>
|
|
544
|
+
class BorrowRefHandle
|
|
545
|
+
{
|
|
546
|
+
T* _body;
|
|
547
|
+
bool _isRef;
|
|
548
|
+
public:
|
|
549
|
+
BorrowRefHandle() : _body(NULL), _isRef(false)
|
|
550
|
+
{;}
|
|
551
|
+
|
|
552
|
+
virtual ~BorrowRefHandle()
|
|
553
|
+
{
|
|
554
|
+
if (_isRef && _body != NULL)
|
|
555
|
+
{
|
|
556
|
+
_body->removeRef();
|
|
557
|
+
}
|
|
558
|
+
_body = NULL;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
BorrowRefHandle(T* body, bool isRef)
|
|
562
|
+
{
|
|
563
|
+
if (isRef && body != NULL)
|
|
564
|
+
{
|
|
565
|
+
body->addRef();
|
|
566
|
+
}
|
|
567
|
+
_body = body;
|
|
568
|
+
_isRef = isRef;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
BorrowRefHandle(const BorrowRefHandle& rhs)
|
|
572
|
+
{
|
|
573
|
+
if (rhs._isRef && rhs._body != NULL)
|
|
574
|
+
{
|
|
575
|
+
rhs._body->addRef();
|
|
576
|
+
}
|
|
577
|
+
_body = rhs._body;
|
|
578
|
+
_isRef = rhs._isRef;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || _MSC_VER >= 1600
|
|
582
|
+
BorrowRefHandle(BorrowRefHandle&& rhs)
|
|
583
|
+
: _body(rhs._body)
|
|
584
|
+
, _isRef(rhs._isRef)
|
|
585
|
+
{
|
|
586
|
+
rhs._body = NULL;
|
|
587
|
+
rhs._isRef = false;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
BorrowRefHandle& operator=(BorrowRefHandle&& rhs)
|
|
591
|
+
{
|
|
592
|
+
if (this == &rhs)
|
|
593
|
+
{
|
|
594
|
+
return *this;
|
|
595
|
+
}
|
|
596
|
+
if (_isRef && _body != NULL)
|
|
597
|
+
{
|
|
598
|
+
_body->removeRef();
|
|
599
|
+
}
|
|
600
|
+
_body = rhs._body;
|
|
601
|
+
_isRef = rhs._isRef;
|
|
602
|
+
rhs._body = NULL;
|
|
603
|
+
rhs._isRef = false;
|
|
604
|
+
return *this;
|
|
605
|
+
}
|
|
606
|
+
#endif // defined(__GXX_EXPERIMENTAL_CXX0X__) || _MSC_VER >= 1600
|
|
607
|
+
|
|
608
|
+
BorrowRefHandle& operator=(const BorrowRefHandle& rhs)
|
|
609
|
+
{
|
|
610
|
+
if (this == &rhs)
|
|
611
|
+
{
|
|
612
|
+
return *this;
|
|
613
|
+
}
|
|
614
|
+
T* body = _body;
|
|
615
|
+
_body = rhs._body;
|
|
616
|
+
if (rhs._isRef && rhs._body != NULL)
|
|
617
|
+
{
|
|
618
|
+
rhs._body->addRef();
|
|
619
|
+
}
|
|
620
|
+
if (_isRef && body != NULL)
|
|
621
|
+
{
|
|
622
|
+
body->removeRef();
|
|
623
|
+
}
|
|
624
|
+
_isRef = rhs._isRef;
|
|
625
|
+
|
|
626
|
+
return *this;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
const T& get() const
|
|
630
|
+
{
|
|
631
|
+
return *_body;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
T& get()
|
|
635
|
+
{
|
|
636
|
+
return *_body;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
T* operator->(void)
|
|
640
|
+
{
|
|
641
|
+
return _body;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
const T* operator->(void) const
|
|
645
|
+
{
|
|
646
|
+
return _body;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
bool isRef(void) const
|
|
650
|
+
{
|
|
651
|
+
return _isRef;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
bool isValid() const
|
|
655
|
+
{
|
|
656
|
+
return (_body != NULL);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
bool release(void)
|
|
660
|
+
{
|
|
661
|
+
T* body = _body;
|
|
662
|
+
_body = NULL;
|
|
663
|
+
if (_isRef && body != NULL)
|
|
664
|
+
{
|
|
665
|
+
return body->removeRef();
|
|
666
|
+
}
|
|
667
|
+
return false;
|
|
668
|
+
}
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
///
|
|
673
|
+
/// Template for reference counted handle on a RefBody.
|
|
674
|
+
///
|
|
675
|
+
template<class T>
|
|
676
|
+
class RefHandle
|
|
677
|
+
{
|
|
678
|
+
T* _body;
|
|
679
|
+
public:
|
|
680
|
+
RefHandle() : _body(NULL) {;}
|
|
681
|
+
virtual ~RefHandle()
|
|
682
|
+
{
|
|
683
|
+
if (_body != NULL)
|
|
684
|
+
{
|
|
685
|
+
_body->removeRef();
|
|
686
|
+
}
|
|
687
|
+
_body = NULL;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
RefHandle(T* body)
|
|
691
|
+
{
|
|
692
|
+
if (body != NULL)
|
|
693
|
+
{
|
|
694
|
+
body->addRef();
|
|
695
|
+
}
|
|
696
|
+
_body = body;
|
|
697
|
+
}
|
|
698
|
+
RefHandle(const RefHandle& rhs)
|
|
699
|
+
{
|
|
700
|
+
if (rhs._body != NULL)
|
|
701
|
+
{
|
|
702
|
+
rhs._body->addRef();
|
|
703
|
+
}
|
|
704
|
+
_body = rhs._body;
|
|
705
|
+
}
|
|
706
|
+
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || _MSC_VER >= 1600
|
|
707
|
+
RefHandle(RefHandle&& rhs) : _body(rhs._body)
|
|
708
|
+
{
|
|
709
|
+
rhs._body = NULL;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
const RefHandle& operator=(RefHandle&& rhs)
|
|
713
|
+
{
|
|
714
|
+
if (this == &rhs)
|
|
715
|
+
{
|
|
716
|
+
return *this;
|
|
717
|
+
}
|
|
718
|
+
if (_body != NULL)
|
|
719
|
+
{
|
|
720
|
+
_body->removeRef();
|
|
721
|
+
}
|
|
722
|
+
_body = rhs._body;
|
|
723
|
+
rhs._body = NULL;
|
|
724
|
+
return *this;
|
|
725
|
+
}
|
|
726
|
+
#endif // defined(__GXX_EXPERIMENTAL_CXX0X__) || _MSC_VER >= 1600
|
|
727
|
+
const RefHandle& operator=(const RefHandle& rhs)
|
|
728
|
+
{
|
|
729
|
+
if (this == &rhs)
|
|
730
|
+
{
|
|
731
|
+
return *this;
|
|
732
|
+
}
|
|
733
|
+
T* body = _body;
|
|
734
|
+
_body = rhs._body;
|
|
735
|
+
if (rhs._body != NULL)
|
|
736
|
+
{
|
|
737
|
+
rhs._body->addRef();
|
|
738
|
+
}
|
|
739
|
+
if (body != NULL)
|
|
740
|
+
{
|
|
741
|
+
body->removeRef();
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
return *this;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
const T& get() const
|
|
748
|
+
{
|
|
749
|
+
return *_body;
|
|
750
|
+
}
|
|
751
|
+
T& get()
|
|
752
|
+
{
|
|
753
|
+
return *_body;
|
|
754
|
+
}
|
|
755
|
+
T* operator->(void)
|
|
756
|
+
{
|
|
757
|
+
return _body;
|
|
758
|
+
}
|
|
759
|
+
const T* operator->(void) const
|
|
760
|
+
{
|
|
761
|
+
return _body;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
bool isValid() const
|
|
766
|
+
{
|
|
767
|
+
return (_body != NULL);
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
///
|
|
773
|
+
/// Class that uses RAII to flip a bool only during its lifetime.
|
|
774
|
+
///
|
|
775
|
+
class FlagFlip
|
|
776
|
+
{
|
|
777
|
+
public:
|
|
778
|
+
#if __cplusplus >= 201100L || _MSC_VER >= 1900
|
|
779
|
+
FlagFlip(std::atomic<bool>* pFlag_) : _pFlag(pFlag_)
|
|
780
|
+
#else
|
|
781
|
+
FlagFlip(volatile bool * pFlag_) : _pFlag(pFlag_)
|
|
782
|
+
#endif
|
|
783
|
+
{
|
|
784
|
+
*_pFlag = !*_pFlag;
|
|
785
|
+
}
|
|
786
|
+
~FlagFlip()
|
|
787
|
+
{
|
|
788
|
+
*_pFlag = !*_pFlag;
|
|
789
|
+
}
|
|
790
|
+
private:
|
|
791
|
+
#if __cplusplus >= 201100L || _MSC_VER >= 1900
|
|
792
|
+
std::atomic<bool>* _pFlag;
|
|
793
|
+
#else
|
|
794
|
+
volatile bool* _pFlag;
|
|
795
|
+
#endif
|
|
796
|
+
};
|
|
797
|
+
|
|
798
|
+
///
|
|
799
|
+
/// Class that uses RAII to set/unset an 8bit atomic
|
|
800
|
+
///
|
|
801
|
+
class AtomicFlagFlip
|
|
802
|
+
{
|
|
803
|
+
public:
|
|
804
|
+
AtomicFlagFlip(AMPS_ATOMIC_TYPE_8* pCount_) : _pCount(pCount_)
|
|
805
|
+
{
|
|
806
|
+
AMPS_FETCH_OR_8(_pCount, 1);
|
|
807
|
+
}
|
|
808
|
+
~AtomicFlagFlip()
|
|
809
|
+
{
|
|
810
|
+
AMPS_FETCH_AND_8(_pCount, 0);
|
|
811
|
+
}
|
|
812
|
+
private:
|
|
813
|
+
AMPS_ATOMIC_TYPE_8* _pCount;
|
|
814
|
+
};
|
|
815
|
+
|
|
816
|
+
///
|
|
817
|
+
/// Base class for all exceptions in AMPS.
|
|
818
|
+
/// May be constructed with text, or with a client handle,
|
|
819
|
+
/// in which case the exception text is made equal to the last
|
|
820
|
+
/// error message on that client.
|
|
821
|
+
///
|
|
822
|
+
class AMPSException : public std::runtime_error
|
|
823
|
+
{
|
|
824
|
+
protected:
|
|
825
|
+
amps_result _result;
|
|
826
|
+
public:
|
|
827
|
+
///
|
|
828
|
+
/// Construct an AMPSException from a text message.
|
|
829
|
+
///
|
|
830
|
+
/// \param message_ The text of the error message.
|
|
831
|
+
/// \param result_ The last amps_result you were given.
|
|
832
|
+
AMPSException(const std::string& message_,
|
|
833
|
+
amps_result result_)
|
|
834
|
+
: std::runtime_error(message_),
|
|
835
|
+
_result(result_)
|
|
836
|
+
{
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
///
|
|
840
|
+
/// Construct an AMPSException from the last error message
|
|
841
|
+
/// on client.
|
|
842
|
+
/// \param client_ The client to retrieve an error message from.
|
|
843
|
+
/// \param result_ The result code you last retrieved from this client.
|
|
844
|
+
///
|
|
845
|
+
AMPSException(amps_handle client_,
|
|
846
|
+
amps_result result_)
|
|
847
|
+
: std::runtime_error(""),
|
|
848
|
+
_result(result_)
|
|
849
|
+
{
|
|
850
|
+
char buffer[1024];
|
|
851
|
+
amps_client_get_error(client_, buffer,
|
|
852
|
+
sizeof(buffer));
|
|
853
|
+
buffer[sizeof(buffer) - 1] = '\0';
|
|
854
|
+
(std::runtime_error&)*this = std::runtime_error(buffer);
|
|
855
|
+
}
|
|
856
|
+
virtual ~AMPSException() throw() {;}
|
|
857
|
+
|
|
858
|
+
///
|
|
859
|
+
/// Returns a null-terminated string containing self's
|
|
860
|
+
/// error message.
|
|
861
|
+
///
|
|
862
|
+
const char* toString() const
|
|
863
|
+
{
|
|
864
|
+
return what();
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
///
|
|
868
|
+
/// Returns the actual name of the subclass thrown --
|
|
869
|
+
/// useful when RTTI is disabled, but you'd still like to log
|
|
870
|
+
/// the exact exception type.
|
|
871
|
+
///
|
|
872
|
+
virtual const char* getClassName() const
|
|
873
|
+
{
|
|
874
|
+
return "AMPSException";
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
///
|
|
878
|
+
/// Constructs and throws the appropriate exception
|
|
879
|
+
/// corresponding to a given result
|
|
880
|
+
/// \param context_ The object to pass to the exception's constructor.
|
|
881
|
+
/// \param result_ the result that should be used to determine the exception type.
|
|
882
|
+
template <class T>
|
|
883
|
+
static void throwFor(const T& context_, amps_result result_);
|
|
884
|
+
};
|
|
885
|
+
|
|
886
|
+
#define AMPS_EX_TYPE(x, b) \
|
|
887
|
+
class x : public b\
|
|
888
|
+
{\
|
|
889
|
+
public:\
|
|
890
|
+
x(const std::string& message, amps_result result = AMPS_E_OK)\
|
|
891
|
+
: b(message, result) {;}\
|
|
892
|
+
x(amps_handle client, amps_result result)\
|
|
893
|
+
: b(client, result) {;}\
|
|
894
|
+
virtual const char* getClassName() const { return #x; }\
|
|
895
|
+
};
|
|
896
|
+
AMPS_EX_TYPE(CommandException, AMPSException)
|
|
897
|
+
AMPS_EX_TYPE(ConnectionException, AMPSException)
|
|
898
|
+
AMPS_EX_TYPE(UsageException, AMPSException)
|
|
899
|
+
AMPS_EX_TYPE(StoreException, AMPSException)
|
|
900
|
+
AMPS_EX_TYPE(MessageStreamFullException, AMPSException)
|
|
901
|
+
AMPS_EX_TYPE(ConnectionRefusedException, ConnectionException)
|
|
902
|
+
AMPS_EX_TYPE(DisconnectedException, ConnectionException)
|
|
903
|
+
AMPS_EX_TYPE(AlreadyConnectedException, ConnectionException)
|
|
904
|
+
AMPS_EX_TYPE(AuthenticationException, ConnectionException)
|
|
905
|
+
AMPS_EX_TYPE(InvalidURIException, ConnectionException)
|
|
906
|
+
AMPS_EX_TYPE(NameInUseException, ConnectionException)
|
|
907
|
+
AMPS_EX_TYPE(NotEntitledException, ConnectionException)
|
|
908
|
+
AMPS_EX_TYPE(ReconnectMaximumExceededException, ConnectionException)
|
|
909
|
+
AMPS_EX_TYPE(RetryOperationException, ConnectionException)
|
|
910
|
+
AMPS_EX_TYPE(TimedOutException, ConnectionException)
|
|
911
|
+
AMPS_EX_TYPE(TransportTypeException, ConnectionException)
|
|
912
|
+
AMPS_EX_TYPE(BadFilterException, CommandException)
|
|
913
|
+
AMPS_EX_TYPE(BadSowKeyException, CommandException)
|
|
914
|
+
AMPS_EX_TYPE(BadRegexTopicException, CommandException)
|
|
915
|
+
AMPS_EX_TYPE(DuplicateLogonException, CommandException)
|
|
916
|
+
AMPS_EX_TYPE(InvalidBookmarkException, CommandException)
|
|
917
|
+
AMPS_EX_TYPE(InvalidOptionsException, CommandException)
|
|
918
|
+
AMPS_EX_TYPE(InvalidOrderByException, CommandException)
|
|
919
|
+
AMPS_EX_TYPE(InvalidSubIdException, CommandException)
|
|
920
|
+
AMPS_EX_TYPE(InvalidTopicException, CommandException)
|
|
921
|
+
AMPS_EX_TYPE(LogonRequiredException, CommandException)
|
|
922
|
+
AMPS_EX_TYPE(MissingFieldsException, CommandException)
|
|
923
|
+
AMPS_EX_TYPE(PublishException, CommandException)
|
|
924
|
+
AMPS_EX_TYPE(SubscriptionAlreadyExistsException, CommandException)
|
|
925
|
+
AMPS_EX_TYPE(SubidInUseException, CommandException)
|
|
926
|
+
AMPS_EX_TYPE(UnknownException, CommandException)
|
|
927
|
+
AMPS_EX_TYPE(PublishStoreGapException, StoreException)
|
|
928
|
+
|
|
929
|
+
template <class T> // static
|
|
930
|
+
void AMPSException::throwFor(const T& context_, amps_result result_)
|
|
931
|
+
{
|
|
932
|
+
switch (result_)
|
|
933
|
+
{
|
|
934
|
+
case AMPS_E_OK:
|
|
935
|
+
return;
|
|
936
|
+
case AMPS_E_COMMAND:
|
|
937
|
+
throw CommandException(context_, result_);
|
|
938
|
+
case AMPS_E_CONNECTION:
|
|
939
|
+
throw ConnectionException(context_, result_);
|
|
940
|
+
case AMPS_E_TOPIC:
|
|
941
|
+
throw InvalidTopicException(context_, result_);
|
|
942
|
+
case AMPS_E_FILTER:
|
|
943
|
+
throw BadFilterException(context_, result_);
|
|
944
|
+
case AMPS_E_RETRY:
|
|
945
|
+
throw RetryOperationException(context_, result_);
|
|
946
|
+
case AMPS_E_DISCONNECTED:
|
|
947
|
+
throw DisconnectedException(context_, result_);
|
|
948
|
+
case AMPS_E_CONNECTION_REFUSED:
|
|
949
|
+
throw ConnectionRefusedException(context_, result_);
|
|
950
|
+
case AMPS_E_URI:
|
|
951
|
+
throw InvalidURIException(context_, result_);
|
|
952
|
+
case AMPS_E_TRANSPORT_TYPE:
|
|
953
|
+
throw TransportTypeException(context_, result_);
|
|
954
|
+
case AMPS_E_USAGE:
|
|
955
|
+
throw UsageException(context_, result_);
|
|
956
|
+
default:
|
|
957
|
+
throw AMPSException(context_, result_);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
#if defined (_MSC_VER)
|
|
962
|
+
|
|
963
|
+
#ifdef _WIN32
|
|
964
|
+
#if _WIN32_WINNT < 0x0600
|
|
965
|
+
#define AMPS_START_TIMER(timeout) \
|
|
966
|
+
__declspec(align(8)) LARGE_INTEGER timer_freq, timer_start, timer_end; \
|
|
967
|
+
timer_freq.QuadPart = timer_start.QuadPart = timer_end.QuadPart = 0LL; \
|
|
968
|
+
double timer_timeout = (double)timeout; \
|
|
969
|
+
QueryPerformanceFrequency(&timer_freq); \
|
|
970
|
+
double timer_ms_freq = timer_freq.QuadPart/1000.0; \
|
|
971
|
+
QueryPerformanceCounter(&timer_start);
|
|
972
|
+
|
|
973
|
+
#define AMPS_CHECK_TIMER(x) \
|
|
974
|
+
QueryPerformanceCounter(&timer_end); \
|
|
975
|
+
x = (((timer_end.QuadPart - timer_start.QuadPart)/timer_ms_freq) > timer_timeout);
|
|
976
|
+
|
|
977
|
+
#define AMPS_RESET_TIMER(timedOut, timeout) \
|
|
978
|
+
QueryPerformanceCounter(&timer_end); \
|
|
979
|
+
timeout = (int)(timer_timeout - ((timer_end.QuadPart - timer_start.QuadPart)/timer_ms_freq)); \
|
|
980
|
+
timedOut = (timeout <= 0);
|
|
981
|
+
|
|
982
|
+
#else
|
|
983
|
+
#define AMPS_START_TIMER(timeout) \
|
|
984
|
+
ULONGLONG timer_start, timer_end; \
|
|
985
|
+
ULONGLONG timer_timeout = (ULONGLONG)timeout; \
|
|
986
|
+
timer_start = timer_end = 0LL; \
|
|
987
|
+
timer_start = GetTickCount64();
|
|
988
|
+
|
|
989
|
+
#define AMPS_CHECK_TIMER(x) \
|
|
990
|
+
timer_end = 0ULL; \
|
|
991
|
+
while (timer_end == 0ULL) timer_end = GetTickCount64(); \
|
|
992
|
+
x = ((timer_end - timer_start) > timer_timeout);
|
|
993
|
+
|
|
994
|
+
#define AMPS_RESET_TIMER(timedOut, timeout) \
|
|
995
|
+
timer_end = 0ULL; \
|
|
996
|
+
while (timer_end == 0ULL) timer_end = GetTickCount64(); \
|
|
997
|
+
timeout = (long)(timer_timeout - (timer_end - timer_start)); \
|
|
998
|
+
timedOut = (timeout <= 0);
|
|
999
|
+
#endif
|
|
1000
|
+
#endif
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
class Timer
|
|
1004
|
+
{
|
|
1005
|
+
public:
|
|
1006
|
+
Timer(double timeoutMillis_ = 0.0)
|
|
1007
|
+
: _timeout(timeoutMillis_)
|
|
1008
|
+
{
|
|
1009
|
+
#if _WIN32_WINNT < 0x0600
|
|
1010
|
+
__declspec(align(8)) LARGE_INTEGER freq;
|
|
1011
|
+
QueryPerformanceFrequency(&freq);
|
|
1012
|
+
_freq = freq.QuadPart / 1000.0;
|
|
1013
|
+
#endif
|
|
1014
|
+
reset();
|
|
1015
|
+
}
|
|
1016
|
+
void setTimeout(double timeoutMillis_)
|
|
1017
|
+
{
|
|
1018
|
+
_timeout = timeoutMillis_;
|
|
1019
|
+
}
|
|
1020
|
+
double getTimeout(void) const
|
|
1021
|
+
{
|
|
1022
|
+
return _timeout;
|
|
1023
|
+
}
|
|
1024
|
+
void start(void)
|
|
1025
|
+
{
|
|
1026
|
+
#if _WIN32_WINNT < 0x0600
|
|
1027
|
+
QueryPerformanceCounter(&_start);
|
|
1028
|
+
#else
|
|
1029
|
+
_start = 0ULL;
|
|
1030
|
+
while (_start == 0ULL)
|
|
1031
|
+
{
|
|
1032
|
+
_start = GetTickCount64();
|
|
1033
|
+
}
|
|
1034
|
+
#endif
|
|
1035
|
+
}
|
|
1036
|
+
void reset(void)
|
|
1037
|
+
{
|
|
1038
|
+
#if _WIN32_WINNT < 0x0600
|
|
1039
|
+
_start.QuadPart = 0;
|
|
1040
|
+
#else
|
|
1041
|
+
_start = 0ULL;
|
|
1042
|
+
_end = 0ULL;
|
|
1043
|
+
#endif
|
|
1044
|
+
}
|
|
1045
|
+
bool check(void)
|
|
1046
|
+
{
|
|
1047
|
+
if (_timeout == 0.0)
|
|
1048
|
+
{
|
|
1049
|
+
return false; // -V550
|
|
1050
|
+
}
|
|
1051
|
+
#if _WIN32_WINNT < 0x0600
|
|
1052
|
+
if (_start.QuadPart == 0)
|
|
1053
|
+
{
|
|
1054
|
+
QueryPerformanceCounter(&_start);
|
|
1055
|
+
}
|
|
1056
|
+
QueryPerformanceCounter(&_end);
|
|
1057
|
+
return (((_end.QuadPart - _start.QuadPart) / _freq) > _timeout);
|
|
1058
|
+
#else
|
|
1059
|
+
while (_start == 0ULL)
|
|
1060
|
+
{
|
|
1061
|
+
_start = GetTickCount64();
|
|
1062
|
+
}
|
|
1063
|
+
_end = 0ULL;
|
|
1064
|
+
while (_end == 0ULL)
|
|
1065
|
+
{
|
|
1066
|
+
_end = GetTickCount64();
|
|
1067
|
+
}
|
|
1068
|
+
ULONGLONG elapsed = _end - _start;
|
|
1069
|
+
return ((elapsed * 1.0) > _timeout);
|
|
1070
|
+
#endif
|
|
1071
|
+
}
|
|
1072
|
+
bool checkAndGetRemaining(double* remaining_)
|
|
1073
|
+
{
|
|
1074
|
+
if (_timeout == 0.0)
|
|
1075
|
+
{
|
|
1076
|
+
*remaining_ = 1000.0;
|
|
1077
|
+
return false; // -V550
|
|
1078
|
+
}
|
|
1079
|
+
#if _WIN32_WINNT < 0x0600
|
|
1080
|
+
QueryPerformanceCounter(&_end);
|
|
1081
|
+
double elapsed = ((_end.QuadPart - _start.QuadPart) / _freq);
|
|
1082
|
+
#else
|
|
1083
|
+
_end = 0ULL;
|
|
1084
|
+
while (_end == 0ULL)
|
|
1085
|
+
{
|
|
1086
|
+
_end = GetTickCount64();
|
|
1087
|
+
}
|
|
1088
|
+
ULONGLONG elapsed = _end - _start;
|
|
1089
|
+
#endif
|
|
1090
|
+
*remaining_ = _timeout - elapsed;
|
|
1091
|
+
return *remaining_ <= 0.0;
|
|
1092
|
+
}
|
|
1093
|
+
bool checkAndGetRemaining(long* remaining_)
|
|
1094
|
+
{
|
|
1095
|
+
if (_timeout == 0.0)
|
|
1096
|
+
{
|
|
1097
|
+
*remaining_ = 1000;
|
|
1098
|
+
return false; // -V550
|
|
1099
|
+
}
|
|
1100
|
+
#if _WIN32_WINNT < 0x0600
|
|
1101
|
+
QueryPerformanceCounter(&_end);
|
|
1102
|
+
double elapsed = ((_end.QuadPart - _start.QuadPart) / _freq);
|
|
1103
|
+
#else
|
|
1104
|
+
_end = 0ULL;
|
|
1105
|
+
while (_end == 0ULL)
|
|
1106
|
+
{
|
|
1107
|
+
_end = GetTickCount64();
|
|
1108
|
+
}
|
|
1109
|
+
ULONGLONG elapsed = _end - _start;
|
|
1110
|
+
#endif
|
|
1111
|
+
*remaining_ = (long)(_timeout - elapsed);
|
|
1112
|
+
return *remaining_ <= 0;
|
|
1113
|
+
}
|
|
1114
|
+
private:
|
|
1115
|
+
#if _WIN32_WINNT < 0x0600
|
|
1116
|
+
__declspec(align(8)) LARGE_INTEGER _start, _end;
|
|
1117
|
+
double _freq;
|
|
1118
|
+
#else
|
|
1119
|
+
ULONGLONG _start, _end;
|
|
1120
|
+
#endif
|
|
1121
|
+
double _timeout;
|
|
1122
|
+
};
|
|
1123
|
+
|
|
1124
|
+
#else
|
|
1125
|
+
#define AMPS_START_TIMER(timeout) \
|
|
1126
|
+
struct timespec timer_start = {0, 0}; \
|
|
1127
|
+
long timer_timeout = timeout; \
|
|
1128
|
+
clock_gettime(CLOCK_REALTIME, &timer_start); \
|
|
1129
|
+
struct timespec timer_end = {timer_start.tv_sec, timer_start.tv_nsec};
|
|
1130
|
+
|
|
1131
|
+
#define AMPS_CHECK_TIMER(x) \
|
|
1132
|
+
clock_gettime(CLOCK_REALTIME, &timer_end); \
|
|
1133
|
+
if (timer_end.tv_nsec < timer_start.tv_nsec) \
|
|
1134
|
+
{ \
|
|
1135
|
+
timer_end.tv_sec -= 1; \
|
|
1136
|
+
timer_end.tv_nsec += 1000000000; \
|
|
1137
|
+
} \
|
|
1138
|
+
x = ((((timer_end.tv_sec - timer_start.tv_sec) * 1000) + \
|
|
1139
|
+
((timer_end.tv_nsec-timer_start.tv_nsec)/1000000)) > timer_timeout);
|
|
1140
|
+
|
|
1141
|
+
#define AMPS_RESET_TIMER(timedOut, timeout) \
|
|
1142
|
+
clock_gettime(CLOCK_REALTIME, &timer_end); \
|
|
1143
|
+
if (timer_end.tv_nsec < timer_start.tv_nsec) \
|
|
1144
|
+
{ \
|
|
1145
|
+
timer_end.tv_sec -= 1; \
|
|
1146
|
+
timer_end.tv_nsec += 1000000000; \
|
|
1147
|
+
} \
|
|
1148
|
+
timeout = (int)((double)timer_timeout - \
|
|
1149
|
+
((((double)(timer_end.tv_sec - timer_start.tv_sec)) * 1000.0) + \
|
|
1150
|
+
(((double)(timer_end.tv_nsec-timer_start.tv_nsec))/1000000.0))) + 1; \
|
|
1151
|
+
timedOut = (timeout <= 0);
|
|
1152
|
+
|
|
1153
|
+
class Timer
|
|
1154
|
+
{
|
|
1155
|
+
public:
|
|
1156
|
+
Timer(double timeoutMillis_ = 0.0) : _timeout(timeoutMillis_)
|
|
1157
|
+
{
|
|
1158
|
+
reset();
|
|
1159
|
+
}
|
|
1160
|
+
void setTimeout(double timeoutMillis_)
|
|
1161
|
+
{
|
|
1162
|
+
_timeout = timeoutMillis_;
|
|
1163
|
+
}
|
|
1164
|
+
double getTimeout(void) const
|
|
1165
|
+
{
|
|
1166
|
+
return _timeout;
|
|
1167
|
+
}
|
|
1168
|
+
void start(void)
|
|
1169
|
+
{
|
|
1170
|
+
clock_gettime(CLOCK_REALTIME, &_start);
|
|
1171
|
+
}
|
|
1172
|
+
void reset(void)
|
|
1173
|
+
{
|
|
1174
|
+
_start.tv_sec = 0;
|
|
1175
|
+
_start.tv_nsec = 0;
|
|
1176
|
+
_end.tv_sec = 0;
|
|
1177
|
+
_end.tv_nsec = 0;
|
|
1178
|
+
}
|
|
1179
|
+
bool check(void)
|
|
1180
|
+
{
|
|
1181
|
+
if (_timeout == 0.0)
|
|
1182
|
+
{
|
|
1183
|
+
return false; // -V550
|
|
1184
|
+
}
|
|
1185
|
+
if (_start.tv_sec == 0 && _start.tv_nsec == 0)
|
|
1186
|
+
{
|
|
1187
|
+
clock_gettime(CLOCK_REALTIME, &_start);
|
|
1188
|
+
}
|
|
1189
|
+
clock_gettime(CLOCK_REALTIME, &_end);
|
|
1190
|
+
return (((double)((_end.tv_sec - _start.tv_sec) * 1000) + \
|
|
1191
|
+
(((double)(_end.tv_nsec - _start.tv_nsec)) / 1000000.0)) > _timeout);
|
|
1192
|
+
}
|
|
1193
|
+
bool checkAndGetRemaining(double* remaining_)
|
|
1194
|
+
{
|
|
1195
|
+
if (_timeout == 0.0) // -V550
|
|
1196
|
+
{
|
|
1197
|
+
*remaining_ = 1000.0;
|
|
1198
|
+
return false;
|
|
1199
|
+
}
|
|
1200
|
+
clock_gettime(CLOCK_REALTIME, &_end);
|
|
1201
|
+
double elapsed = ((double)((_end.tv_sec - _start.tv_sec) * 1000) + \
|
|
1202
|
+
(((double)(_end.tv_nsec - _start.tv_nsec)) / 1000000.0));
|
|
1203
|
+
*remaining_ = _timeout - elapsed;
|
|
1204
|
+
return *remaining_ <= 0.0;
|
|
1205
|
+
}
|
|
1206
|
+
bool checkAndGetRemaining(long* remaining_)
|
|
1207
|
+
{
|
|
1208
|
+
if (_timeout == 0.0) // -V550
|
|
1209
|
+
{
|
|
1210
|
+
*remaining_ = 1000;
|
|
1211
|
+
return false;
|
|
1212
|
+
}
|
|
1213
|
+
clock_gettime(CLOCK_REALTIME, &_end);
|
|
1214
|
+
double elapsed = ((double)((_end.tv_sec - _start.tv_sec) * 1000) + \
|
|
1215
|
+
(((double)(_end.tv_nsec - _start.tv_nsec)) / 1000000.0));
|
|
1216
|
+
*remaining_ = (long)(_timeout - elapsed);
|
|
1217
|
+
return *remaining_ <= 0;
|
|
1218
|
+
}
|
|
1219
|
+
private:
|
|
1220
|
+
struct timespec _start, _end;
|
|
1221
|
+
double _timeout;
|
|
1222
|
+
};
|
|
1223
|
+
#endif
|
|
1224
|
+
|
|
1225
|
+
/**
|
|
1226
|
+
* Wrapper class around amps_uri_parse. Construct with a URI and
|
|
1227
|
+
* then use the member functions to extract part values from the URI.
|
|
1228
|
+
*/
|
|
1229
|
+
class URI
|
|
1230
|
+
{
|
|
1231
|
+
public:
|
|
1232
|
+
URI(const std::string& uri_)
|
|
1233
|
+
: _uri(uri_),
|
|
1234
|
+
_port(0),
|
|
1235
|
+
_isValid(false)
|
|
1236
|
+
{
|
|
1237
|
+
parse();
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
const std::string& uri(void) const
|
|
1241
|
+
{
|
|
1242
|
+
return _uri;
|
|
1243
|
+
}
|
|
1244
|
+
const std::string& host(void) const
|
|
1245
|
+
{
|
|
1246
|
+
return _host;
|
|
1247
|
+
}
|
|
1248
|
+
const std::string& transport(void) const
|
|
1249
|
+
{
|
|
1250
|
+
return _transport;
|
|
1251
|
+
}
|
|
1252
|
+
const std::string& user(void) const
|
|
1253
|
+
{
|
|
1254
|
+
return _user;
|
|
1255
|
+
}
|
|
1256
|
+
const std::string& password(void) const
|
|
1257
|
+
{
|
|
1258
|
+
return _password;
|
|
1259
|
+
}
|
|
1260
|
+
int port(void) const
|
|
1261
|
+
{
|
|
1262
|
+
return _port;
|
|
1263
|
+
}
|
|
1264
|
+
const std::string& protocol(void) const
|
|
1265
|
+
{
|
|
1266
|
+
return _protocol;
|
|
1267
|
+
}
|
|
1268
|
+
const std::string& messageType(void) const
|
|
1269
|
+
{
|
|
1270
|
+
return _messageType;
|
|
1271
|
+
}
|
|
1272
|
+
bool hasOption(const std::string& key_) const
|
|
1273
|
+
{
|
|
1274
|
+
return _map.find(key_) != _map.end();
|
|
1275
|
+
}
|
|
1276
|
+
const std::string& option(const std::string& key_)
|
|
1277
|
+
{
|
|
1278
|
+
return _map[key_];
|
|
1279
|
+
}
|
|
1280
|
+
bool isValid(void) const
|
|
1281
|
+
{
|
|
1282
|
+
return _isValid;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
bool isTrue(const std::string& key_)
|
|
1286
|
+
{
|
|
1287
|
+
if (_map.find(key_) != _map.end())
|
|
1288
|
+
{
|
|
1289
|
+
const std::string& value = _map[key_];
|
|
1290
|
+
if (value.size() == 1)
|
|
1291
|
+
{
|
|
1292
|
+
return value == "T" || value == "t" || value == "1";
|
|
1293
|
+
}
|
|
1294
|
+
else if (value.size() == 4)
|
|
1295
|
+
{
|
|
1296
|
+
return value == "True" || value == "true" || value == "TRUE";
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
return false;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
int getInt(const std::string& key_)
|
|
1303
|
+
{
|
|
1304
|
+
if (_map.find(key_) != _map.end())
|
|
1305
|
+
{
|
|
1306
|
+
const std::string& value = _map[key_];
|
|
1307
|
+
return atoi(value.c_str());
|
|
1308
|
+
}
|
|
1309
|
+
return -1;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
private:
|
|
1313
|
+
void parse(void)
|
|
1314
|
+
{
|
|
1315
|
+
amps_uri_state uriState;
|
|
1316
|
+
memset(&uriState, 0, sizeof(amps_uri_state));
|
|
1317
|
+
while (uriState.part_id < AMPS_URI_ERROR)
|
|
1318
|
+
{
|
|
1319
|
+
amps_uri_parse(_uri.c_str(), _uri.size(), &uriState);
|
|
1320
|
+
switch (uriState.part_id)
|
|
1321
|
+
{
|
|
1322
|
+
case AMPS_URI_TRANSPORT:
|
|
1323
|
+
_transport.assign(uriState.part, uriState.part_length);
|
|
1324
|
+
break;
|
|
1325
|
+
case AMPS_URI_USER:
|
|
1326
|
+
_user = _unescape(uriState.part, uriState.part_length);
|
|
1327
|
+
break;
|
|
1328
|
+
case AMPS_URI_PASSWORD:
|
|
1329
|
+
_password = _unescape(uriState.part, uriState.part_length);
|
|
1330
|
+
break;
|
|
1331
|
+
case AMPS_URI_HOST:
|
|
1332
|
+
_host.assign(uriState.part, uriState.part_length);
|
|
1333
|
+
break;
|
|
1334
|
+
case AMPS_URI_PORT:
|
|
1335
|
+
{
|
|
1336
|
+
std::string port(uriState.part, uriState.part_length);
|
|
1337
|
+
_port = atoi(port.c_str());
|
|
1338
|
+
}
|
|
1339
|
+
break;
|
|
1340
|
+
case AMPS_URI_PROTOCOL:
|
|
1341
|
+
_protocol.assign(uriState.part, uriState.part_length);
|
|
1342
|
+
break;
|
|
1343
|
+
case AMPS_URI_MESSAGE_TYPE:
|
|
1344
|
+
_messageType.assign(uriState.part, uriState.part_length);
|
|
1345
|
+
break;
|
|
1346
|
+
case AMPS_URI_OPTION_KEY:
|
|
1347
|
+
_lastKey.assign(uriState.part, uriState.part_length);
|
|
1348
|
+
break;
|
|
1349
|
+
case AMPS_URI_OPTION_VALUE:
|
|
1350
|
+
_map[_lastKey] = std::string(uriState.part, uriState.part_length);
|
|
1351
|
+
break;
|
|
1352
|
+
default:
|
|
1353
|
+
break;
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
_isValid = uriState.part_id == AMPS_URI_END;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
static char _hexval(char c)
|
|
1360
|
+
{
|
|
1361
|
+
if (c >= '0' && c <= '9')
|
|
1362
|
+
{
|
|
1363
|
+
return static_cast<char>(c - '0');
|
|
1364
|
+
}
|
|
1365
|
+
if (c >= 'a' && c <= 'f')
|
|
1366
|
+
{
|
|
1367
|
+
return static_cast<char>(0xa + c - 'a');
|
|
1368
|
+
}
|
|
1369
|
+
if (c >= 'A' && c <= 'F')
|
|
1370
|
+
{
|
|
1371
|
+
return static_cast<char>(0xa + c - 'A');
|
|
1372
|
+
}
|
|
1373
|
+
return 0;
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
std::string _unescape(const char* data_, size_t length_)
|
|
1377
|
+
{
|
|
1378
|
+
std::string result;
|
|
1379
|
+
for (const char* p = data_, *pe = data_ + length_; p < pe; ++p)
|
|
1380
|
+
{
|
|
1381
|
+
if (*p == '%' && pe - p >= 3)
|
|
1382
|
+
{
|
|
1383
|
+
result += (char)( (0x10 * _hexval(p[1])) + _hexval(p[2]) );
|
|
1384
|
+
p += 2;
|
|
1385
|
+
}
|
|
1386
|
+
else
|
|
1387
|
+
{
|
|
1388
|
+
result += *p;
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
return result;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
|
|
1395
|
+
std::string _uri;
|
|
1396
|
+
std::string _transport;
|
|
1397
|
+
std::string _user;
|
|
1398
|
+
std::string _password;
|
|
1399
|
+
std::string _host;
|
|
1400
|
+
std::string _protocol;
|
|
1401
|
+
std::string _messageType;
|
|
1402
|
+
std::string _lastKey;
|
|
1403
|
+
|
|
1404
|
+
std::map<std::string, std::string> _map;
|
|
1405
|
+
int _port;
|
|
1406
|
+
bool _isValid;
|
|
1407
|
+
};
|
|
1408
|
+
|
|
1409
|
+
/// Converts a string version, such as "3.8.1.5" into the same numeric
|
|
1410
|
+
/// form used internally and returned by getServerVersion. This can
|
|
1411
|
+
/// be used to do comparisons such as
|
|
1412
|
+
/// client.getServerVersion() >= "3.8"
|
|
1413
|
+
/// Conversion works with any string that starts with a number, and will
|
|
1414
|
+
/// assume 0 for any portions of the version not present. So "4" will
|
|
1415
|
+
/// return 4000000, equivalent to "4.0.0.0"
|
|
1416
|
+
/// \param data_ The pointer the start of the character data to convert.
|
|
1417
|
+
/// \param len_ The length of the character data to convert.
|
|
1418
|
+
/// \param defaultVersion_ The value to return for unreleased versions.
|
|
1419
|
+
/// \return The size_t equivalent of the version.
|
|
1420
|
+
/// \throw CommandException If any characters other than . or 0-9 are found
|
|
1421
|
+
inline size_t convertVersionToNumber(const char* data_, size_t len_,
|
|
1422
|
+
size_t defaultVersion_ = AMPS_DEFAULT_MIN_VERSION)
|
|
1423
|
+
{
|
|
1424
|
+
if (len_ == 0)
|
|
1425
|
+
{
|
|
1426
|
+
return 0;
|
|
1427
|
+
}
|
|
1428
|
+
size_t result = 0;
|
|
1429
|
+
// Has a version, use it
|
|
1430
|
+
// named instead of numbered, default to defaultVersion_
|
|
1431
|
+
if (data_[0] < '0' || data_[0] > '9')
|
|
1432
|
+
{
|
|
1433
|
+
// Must be a named branch, assume minimum version
|
|
1434
|
+
return defaultVersion_;
|
|
1435
|
+
}
|
|
1436
|
+
else
|
|
1437
|
+
{
|
|
1438
|
+
size_t dots = 0;
|
|
1439
|
+
long lastDot = -1;
|
|
1440
|
+
for (size_t i = 0; dots < 4 && i < len_; ++i)
|
|
1441
|
+
{
|
|
1442
|
+
if (data_[i] == '.')
|
|
1443
|
+
{
|
|
1444
|
+
++dots;
|
|
1445
|
+
result *= 10;
|
|
1446
|
+
if ((long)i - lastDot > 5)
|
|
1447
|
+
{
|
|
1448
|
+
throw CommandException("Too many digits between dots found translating version string.");
|
|
1449
|
+
}
|
|
1450
|
+
else if (i - (size_t)lastDot >= 4)
|
|
1451
|
+
{
|
|
1452
|
+
result *= 10;
|
|
1453
|
+
result += 99;
|
|
1454
|
+
}
|
|
1455
|
+
else
|
|
1456
|
+
{
|
|
1457
|
+
if (i - (size_t)lastDot == 3)
|
|
1458
|
+
{
|
|
1459
|
+
result += (size_t)(data_[i - 2] - '0');
|
|
1460
|
+
}
|
|
1461
|
+
result *= 10;
|
|
1462
|
+
result += (size_t)(data_[i - 1] - '0');
|
|
1463
|
+
}
|
|
1464
|
+
lastDot = (long)i;
|
|
1465
|
+
}
|
|
1466
|
+
else if (data_[i] < '0' || data_[i] > '9')
|
|
1467
|
+
{
|
|
1468
|
+
if (dots == 3 && i - (size_t)lastDot <= 5 // -V658
|
|
1469
|
+
&& (long)i - lastDot > 1)
|
|
1470
|
+
{
|
|
1471
|
+
++dots;
|
|
1472
|
+
result *= 10;
|
|
1473
|
+
if (i - (size_t)lastDot >= 4)
|
|
1474
|
+
{
|
|
1475
|
+
result *= 10;
|
|
1476
|
+
result += 99;
|
|
1477
|
+
}
|
|
1478
|
+
else
|
|
1479
|
+
{
|
|
1480
|
+
if (i - (size_t)lastDot == 3)
|
|
1481
|
+
{
|
|
1482
|
+
result += (size_t)(data_[i - 2] - '0');
|
|
1483
|
+
}
|
|
1484
|
+
result *= 10;
|
|
1485
|
+
result += (size_t)(data_[i - 1] - '0');
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
else
|
|
1489
|
+
{
|
|
1490
|
+
throw CommandException("Invalid character found in version string");
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
if (i == len_ - 1)
|
|
1494
|
+
{
|
|
1495
|
+
++dots;
|
|
1496
|
+
result *= 10;
|
|
1497
|
+
if (i - (size_t)lastDot > 4)
|
|
1498
|
+
{
|
|
1499
|
+
throw CommandException("Too many digits between dots found translating version string.");
|
|
1500
|
+
}
|
|
1501
|
+
else if (i - (size_t)lastDot >= 3)
|
|
1502
|
+
{
|
|
1503
|
+
result *= 10;
|
|
1504
|
+
result += 99;
|
|
1505
|
+
}
|
|
1506
|
+
else
|
|
1507
|
+
{
|
|
1508
|
+
if (i - (size_t)lastDot == 2)
|
|
1509
|
+
{
|
|
1510
|
+
result += (size_t)(data_[i - 1] - '0');
|
|
1511
|
+
}
|
|
1512
|
+
result *= 10;
|
|
1513
|
+
result += (size_t)(data_[i] - '0');
|
|
1514
|
+
}
|
|
1515
|
+
lastDot = (long)i;
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
// For shortened versions, need to add zeroes
|
|
1519
|
+
for (; dots < 4; ++dots)
|
|
1520
|
+
{
|
|
1521
|
+
result *= 100;
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
return result;
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
class VersionInfo
|
|
1528
|
+
{
|
|
1529
|
+
public:
|
|
1530
|
+
/// Create a default VersionInfo.
|
|
1531
|
+
VersionInfo() : _versionString("default"), _versionNum(0)
|
|
1532
|
+
{
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
/// Create a VersionInfo to represent the given version string.
|
|
1536
|
+
/// \param version_ The version string to represent.
|
|
1537
|
+
VersionInfo(const char* version_)
|
|
1538
|
+
: _versionString(version_ ? version_ : "default")
|
|
1539
|
+
, _versionNum(0)
|
|
1540
|
+
{
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
/// Create a VersionInfo to represent the given version string.
|
|
1544
|
+
/// \param version_ The version string to represent.
|
|
1545
|
+
VersionInfo(const std::string& version_)
|
|
1546
|
+
: _versionString(version_)
|
|
1547
|
+
, _versionNum(0)
|
|
1548
|
+
{
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
/// Create a VersionInfo to represent the given version string.
|
|
1552
|
+
/// \param version_ The version to copy.
|
|
1553
|
+
VersionInfo(const VersionInfo& info_)
|
|
1554
|
+
: _versionString(info_._versionString)
|
|
1555
|
+
, _versionNum(info_._versionNum)
|
|
1556
|
+
{ ; }
|
|
1557
|
+
|
|
1558
|
+
/// Set the version string.
|
|
1559
|
+
/// \param version_ The version string to represent.
|
|
1560
|
+
void setVersion(const char* version_)
|
|
1561
|
+
{
|
|
1562
|
+
_versionString = version_;
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
/// Set the version string.
|
|
1566
|
+
/// \param version_ The version string to represent.
|
|
1567
|
+
void setVersion(const std::string& version_)
|
|
1568
|
+
{
|
|
1569
|
+
_versionString = version_;
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
/// Get the version string.
|
|
1573
|
+
/// \returns The version string.
|
|
1574
|
+
std::string getVersionString() const
|
|
1575
|
+
{
|
|
1576
|
+
return _versionString;
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
/// Get the version as a amps_uint64_t with 4 digits for
|
|
1580
|
+
/// major version, 4 digits for minor version, 5 digits for
|
|
1581
|
+
/// maintenance version, and 5 digits for patch version.
|
|
1582
|
+
/// \returns The version string as an unsigned 64-bit value.
|
|
1583
|
+
amps_uint64_t getVersionUint64() const
|
|
1584
|
+
{
|
|
1585
|
+
if (_versionNum == 0)
|
|
1586
|
+
{
|
|
1587
|
+
_versionNum = parseVersion(_versionString);
|
|
1588
|
+
}
|
|
1589
|
+
return _versionNum;
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
/// Get the version as a size_t with 2 digits each for major,
|
|
1593
|
+
/// minor, maintenance, and patch.
|
|
1594
|
+
/// \returns The version as a size_t with 2 digits each for major,
|
|
1595
|
+
/// minor, maintenance, and patch. This will use 99 for any value
|
|
1596
|
+
/// that is 99 or larger. This is how previous versions of the client
|
|
1597
|
+
/// represented server versions.
|
|
1598
|
+
size_t getOldStyleVersion() const
|
|
1599
|
+
{
|
|
1600
|
+
return convertVersionToNumber(_versionString.data(), _versionString.length());
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
VersionInfo& operator=(const VersionInfo& info_)
|
|
1604
|
+
{
|
|
1605
|
+
_versionString = info_._versionString;
|
|
1606
|
+
_versionNum = info_._versionNum;
|
|
1607
|
+
return *this;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
bool operator<(const VersionInfo& info_) const
|
|
1611
|
+
{
|
|
1612
|
+
return getVersionUint64() < info_.getVersionUint64();
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
bool operator<=(const VersionInfo& info_) const
|
|
1616
|
+
{
|
|
1617
|
+
return getVersionUint64() <= info_.getVersionUint64();
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
bool operator==(const VersionInfo& info_) const
|
|
1621
|
+
{
|
|
1622
|
+
return getVersionUint64() == info_.getVersionUint64();
|
|
1623
|
+
}
|
|
1624
|
+
|
|
1625
|
+
bool operator!=(const VersionInfo& info_) const
|
|
1626
|
+
{
|
|
1627
|
+
return getVersionUint64() != info_.getVersionUint64();
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
bool operator>=(const VersionInfo& info_) const
|
|
1631
|
+
{
|
|
1632
|
+
return getVersionUint64() >= info_.getVersionUint64();
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
bool operator>(const VersionInfo& info_) const
|
|
1636
|
+
{
|
|
1637
|
+
return getVersionUint64() > info_.getVersionUint64();
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1640
|
+
/// Parse a version string into an amps_uint64_t with 4 digits for
|
|
1641
|
+
/// major version, 4 digits for minor version, 5 digits for
|
|
1642
|
+
/// maintenance version, and 5 digits for patch version.
|
|
1643
|
+
/// This will fill in 0's for any missing portions of the version
|
|
1644
|
+
/// string and will return the default server version for any
|
|
1645
|
+
/// string with non-numeric, non-dot characters. It will only
|
|
1646
|
+
/// parse the first 4 levels, if there is an additional dot it will
|
|
1647
|
+
/// stop parsing and return the value for the first 4 levels only.
|
|
1648
|
+
/// The return value for "5" would 500000000000000.
|
|
1649
|
+
/// The return value for "5.2.3.0.1" would 500020000300000.
|
|
1650
|
+
/// \param version_ The version string to parse.
|
|
1651
|
+
/// \returns The version string as an unsigned 64-bit value.
|
|
1652
|
+
static amps_uint64_t parseVersion(const std::string& version_)
|
|
1653
|
+
{
|
|
1654
|
+
const int MAXVALUES = 4;
|
|
1655
|
+
const int MAXDIGITS[] = { 4, 4, 5, 5 };
|
|
1656
|
+
|
|
1657
|
+
amps_uint64_t versionNum = 0;
|
|
1658
|
+
if (version_.empty() || !isdigit(version_[0]))
|
|
1659
|
+
{
|
|
1660
|
+
// Start with non-numeric is a special build
|
|
1661
|
+
return AMPS_DEFAULT_SERVER_VERSION;
|
|
1662
|
+
}
|
|
1663
|
+
int digits = 0;
|
|
1664
|
+
int values = 0;
|
|
1665
|
+
amps_uint64_t current = 0;
|
|
1666
|
+
for (std::string::const_iterator c = version_.begin(), e = version_.end(); c != e; ++c)
|
|
1667
|
+
{
|
|
1668
|
+
if (isdigit(*c))
|
|
1669
|
+
{
|
|
1670
|
+
if (++digits > MAXDIGITS[values])
|
|
1671
|
+
{
|
|
1672
|
+
// Too many digits, just return default
|
|
1673
|
+
return AMPS_DEFAULT_SERVER_VERSION;
|
|
1674
|
+
}
|
|
1675
|
+
current *= (amps_uint64_t)10;
|
|
1676
|
+
current += (amps_uint64_t)(*c - '0');
|
|
1677
|
+
}
|
|
1678
|
+
else
|
|
1679
|
+
{
|
|
1680
|
+
if (*c == '.')
|
|
1681
|
+
{
|
|
1682
|
+
versionNum += current;
|
|
1683
|
+
// Ninja releases add beyond 4 levels, treat them as the first 4
|
|
1684
|
+
if (++values >= MAXVALUES)
|
|
1685
|
+
{
|
|
1686
|
+
return versionNum;
|
|
1687
|
+
}
|
|
1688
|
+
// Move over for next current value
|
|
1689
|
+
for (int i = 0; i < MAXDIGITS[values]; ++i)
|
|
1690
|
+
{
|
|
1691
|
+
versionNum *= (amps_uint64_t)10;
|
|
1692
|
+
}
|
|
1693
|
+
digits = 0;
|
|
1694
|
+
current = 0;
|
|
1695
|
+
}
|
|
1696
|
+
else
|
|
1697
|
+
{
|
|
1698
|
+
// A non-numeric, non-dot means it's a special build
|
|
1699
|
+
return AMPS_DEFAULT_SERVER_VERSION;
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
versionNum += current;
|
|
1704
|
+
// Fill in missing 0's from last value and if necessary add more for missing parts of version.
|
|
1705
|
+
while (++values < MAXVALUES)
|
|
1706
|
+
{
|
|
1707
|
+
for (int i = 0; i < MAXDIGITS[values]; ++i)
|
|
1708
|
+
{
|
|
1709
|
+
versionNum *= (amps_uint64_t)10;
|
|
1710
|
+
}
|
|
1711
|
+
}
|
|
1712
|
+
return versionNum;
|
|
1713
|
+
}
|
|
1714
|
+
private:
|
|
1715
|
+
std::string _versionString;
|
|
1716
|
+
mutable amps_uint64_t _versionNum;
|
|
1717
|
+
};
|
|
1718
|
+
|
|
1719
|
+
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
#endif
|