couchbase 3.1.1-universal-darwin-20 → 3.2.0-universal-darwin-20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/CMakeLists.txt +3 -1
- data/ext/build_version.hxx.in +1 -1
- data/ext/cmake/Testing.cmake +1 -0
- data/ext/cmake/ThirdPartyDependencies.cmake +6 -0
- data/ext/cmake/VersionInfo.cmake +3 -0
- data/ext/couchbase/bucket.hxx +47 -28
- data/ext/couchbase/cbsasl/client.h +1 -1
- data/ext/couchbase/cbsasl/context.cc +1 -1
- data/ext/couchbase/cbsasl/context.h +3 -3
- data/ext/couchbase/cbsasl/mechanism.cc +5 -8
- data/ext/couchbase/cbsasl/mechanism.h +1 -4
- data/ext/couchbase/cbsasl/plain/plain.cc +1 -1
- data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +30 -36
- data/ext/couchbase/cluster.hxx +40 -22
- data/ext/couchbase/cluster_options.hxx +7 -1
- data/ext/couchbase/configuration.hxx +37 -16
- data/ext/couchbase/couchbase.cxx +1145 -291
- data/ext/couchbase/error_map.hxx +1 -1
- data/ext/couchbase/errors.hxx +25 -17
- data/ext/couchbase/io/dns_client.hxx +3 -3
- data/ext/couchbase/io/dns_codec.hxx +4 -5
- data/ext/couchbase/io/dns_config.hxx +5 -6
- data/ext/couchbase/io/dns_message.hxx +3 -3
- data/ext/couchbase/io/http_command.hxx +70 -35
- data/ext/couchbase/io/http_session.hxx +4 -3
- data/ext/couchbase/io/http_session_manager.hxx +28 -19
- data/ext/couchbase/io/mcbp_command.hxx +51 -19
- data/ext/couchbase/io/mcbp_context.hxx +1 -1
- data/ext/couchbase/io/mcbp_parser.hxx +4 -4
- data/ext/couchbase/io/mcbp_session.hxx +91 -101
- data/ext/couchbase/io/query_cache.hxx +2 -2
- data/ext/couchbase/io/retry_orchestrator.hxx +2 -4
- data/ext/couchbase/io/retry_reason.hxx +2 -2
- data/ext/couchbase/io/retry_strategy.hxx +1 -6
- data/ext/couchbase/io/streams.hxx +7 -7
- data/ext/couchbase/metrics/logging_meter.hxx +228 -0
- data/ext/couchbase/metrics/logging_meter_options.hxx +28 -0
- data/ext/couchbase/metrics/meter.hxx +49 -0
- data/ext/couchbase/metrics/noop_meter.hxx +43 -0
- data/ext/couchbase/operations.hxx +4 -0
- data/ext/couchbase/operations/analytics_dataset_create.hxx +16 -12
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +11 -11
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +6 -6
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +10 -11
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +10 -11
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +9 -11
- data/ext/couchbase/operations/analytics_index_create.hxx +14 -13
- data/ext/couchbase/operations/analytics_index_drop.hxx +18 -12
- data/ext/couchbase/operations/analytics_index_get_all.hxx +8 -6
- data/ext/couchbase/operations/analytics_link.hxx +39 -0
- data/ext/couchbase/operations/analytics_link_azure_blob_external.hxx +145 -0
- data/ext/couchbase/operations/analytics_link_connect.hxx +14 -12
- data/ext/couchbase/operations/analytics_link_couchbase_remote.hxx +220 -0
- data/ext/couchbase/operations/analytics_link_create.hxx +128 -0
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +11 -12
- data/ext/couchbase/operations/analytics_link_drop.hxx +130 -0
- data/ext/couchbase/operations/analytics_link_get_all.hxx +160 -0
- data/ext/couchbase/operations/analytics_link_replace.hxx +128 -0
- data/ext/couchbase/operations/analytics_link_s3_external.hxx +122 -0
- data/ext/couchbase/operations/bucket_create.hxx +8 -8
- data/ext/couchbase/operations/bucket_drop.hxx +5 -5
- data/ext/couchbase/operations/bucket_flush.hxx +5 -5
- data/ext/couchbase/operations/bucket_get.hxx +7 -7
- data/ext/couchbase/operations/bucket_get_all.hxx +7 -5
- data/ext/couchbase/operations/bucket_settings.hxx +40 -49
- data/ext/couchbase/operations/bucket_update.hxx +8 -8
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +7 -7
- data/ext/couchbase/operations/collection_create.hxx +11 -11
- data/ext/couchbase/operations/collection_drop.hxx +12 -10
- data/ext/couchbase/operations/collections_manifest_get.hxx +3 -3
- data/ext/couchbase/operations/design_document.hxx +2 -2
- data/ext/couchbase/operations/document_analytics.hxx +29 -36
- data/ext/couchbase/operations/document_append.hxx +3 -3
- data/ext/couchbase/operations/document_decrement.hxx +3 -3
- data/ext/couchbase/operations/document_exists.hxx +2 -2
- data/ext/couchbase/operations/document_get.hxx +3 -3
- data/ext/couchbase/operations/document_get_and_lock.hxx +5 -3
- data/ext/couchbase/operations/document_get_and_touch.hxx +5 -3
- data/ext/couchbase/operations/document_get_projected.hxx +10 -11
- data/ext/couchbase/operations/document_increment.hxx +3 -3
- data/ext/couchbase/operations/document_insert.hxx +3 -3
- data/ext/couchbase/operations/document_lookup_in.hxx +12 -18
- data/ext/couchbase/operations/document_mutate_in.hxx +13 -18
- data/ext/couchbase/operations/document_prepend.hxx +3 -3
- data/ext/couchbase/operations/document_query.hxx +39 -41
- data/ext/couchbase/operations/document_remove.hxx +3 -3
- data/ext/couchbase/operations/document_replace.hxx +3 -3
- data/ext/couchbase/operations/document_search.hxx +56 -61
- data/ext/couchbase/operations/document_touch.hxx +3 -3
- data/ext/couchbase/operations/document_unlock.hxx +3 -3
- data/ext/couchbase/operations/document_upsert.hxx +3 -3
- data/ext/couchbase/operations/document_view.hxx +23 -23
- data/ext/couchbase/operations/group_drop.hxx +5 -5
- data/ext/couchbase/operations/group_get.hxx +7 -7
- data/ext/couchbase/operations/group_get_all.hxx +6 -6
- data/ext/couchbase/operations/group_upsert.hxx +11 -11
- data/ext/couchbase/operations/http_noop.hxx +6 -6
- data/ext/couchbase/operations/mcbp_noop.hxx +3 -3
- data/ext/couchbase/operations/query_index_build_deferred.hxx +6 -6
- data/ext/couchbase/operations/query_index_create.hxx +10 -8
- data/ext/couchbase/operations/query_index_drop.hxx +8 -8
- data/ext/couchbase/operations/query_index_get_all.hxx +43 -39
- data/ext/couchbase/operations/rbac.hxx +40 -63
- data/ext/couchbase/operations/role_get_all.hxx +6 -6
- data/ext/couchbase/operations/scope_create.hxx +10 -10
- data/ext/couchbase/operations/scope_drop.hxx +9 -9
- data/ext/couchbase/operations/scope_get_all.hxx +8 -8
- data/ext/couchbase/operations/search_get_stats.hxx +5 -3
- data/ext/couchbase/operations/search_index.hxx +6 -15
- data/ext/couchbase/operations/search_index_analyze_document.hxx +11 -11
- data/ext/couchbase/operations/search_index_control_ingest.hxx +9 -9
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +9 -9
- data/ext/couchbase/operations/search_index_control_query.hxx +9 -9
- data/ext/couchbase/operations/search_index_drop.hxx +11 -9
- data/ext/couchbase/operations/search_index_get.hxx +11 -9
- data/ext/couchbase/operations/search_index_get_all.hxx +11 -11
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +10 -10
- data/ext/couchbase/operations/search_index_get_stats.hxx +10 -8
- data/ext/couchbase/operations/search_index_upsert.hxx +12 -10
- data/ext/couchbase/operations/user_drop.hxx +5 -5
- data/ext/couchbase/operations/user_get.hxx +7 -7
- data/ext/couchbase/operations/user_get_all.hxx +6 -6
- data/ext/couchbase/operations/user_upsert.hxx +9 -9
- data/ext/couchbase/operations/view_index_drop.hxx +10 -10
- data/ext/couchbase/operations/view_index_get.hxx +13 -15
- data/ext/couchbase/operations/view_index_get_all.hxx +17 -20
- data/ext/couchbase/operations/view_index_upsert.hxx +9 -7
- data/ext/couchbase/origin.hxx +14 -10
- data/ext/couchbase/platform/backtrace.c +1 -1
- data/ext/couchbase/platform/base64.cc +5 -5
- data/ext/couchbase/platform/base64.h +2 -5
- data/ext/couchbase/protocol/client_opcode.hxx +7 -4
- data/ext/couchbase/protocol/client_request.hxx +2 -2
- data/ext/couchbase/protocol/client_response.hxx +41 -16
- data/ext/couchbase/protocol/cmd_append.hxx +17 -16
- data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +4 -4
- data/ext/couchbase/protocol/cmd_decrement.hxx +10 -11
- data/ext/couchbase/protocol/cmd_exists.hxx +12 -15
- data/ext/couchbase/protocol/cmd_get.hxx +11 -14
- data/ext/couchbase/protocol/cmd_get_and_lock.hxx +10 -12
- data/ext/couchbase/protocol/cmd_get_and_touch.hxx +10 -12
- data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +13 -18
- data/ext/couchbase/protocol/cmd_get_collection_id.hxx +12 -15
- data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +12 -16
- data/ext/couchbase/protocol/cmd_get_error_map.hxx +14 -17
- data/ext/couchbase/protocol/cmd_hello.hxx +8 -10
- data/ext/couchbase/protocol/cmd_increment.hxx +9 -10
- data/ext/couchbase/protocol/cmd_insert.hxx +9 -9
- data/ext/couchbase/protocol/cmd_lookup_in.hxx +12 -13
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +11 -11
- data/ext/couchbase/protocol/cmd_noop.hxx +16 -20
- data/ext/couchbase/protocol/cmd_prepend.hxx +9 -10
- data/ext/couchbase/protocol/cmd_remove.hxx +10 -13
- data/ext/couchbase/protocol/cmd_replace.hxx +7 -7
- data/ext/couchbase/protocol/cmd_sasl_auth.hxx +8 -10
- data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +10 -15
- data/ext/couchbase/protocol/cmd_sasl_step.hxx +10 -12
- data/ext/couchbase/protocol/cmd_select_bucket.hxx +14 -18
- data/ext/couchbase/protocol/cmd_touch.hxx +8 -11
- data/ext/couchbase/protocol/cmd_unlock.hxx +10 -14
- data/ext/couchbase/protocol/cmd_upsert.hxx +8 -8
- data/ext/couchbase/protocol/datatype.hxx +3 -3
- data/ext/couchbase/protocol/durability_level.hxx +2 -2
- data/ext/couchbase/protocol/frame_info_id.hxx +4 -4
- data/ext/couchbase/protocol/hello_feature.hxx +2 -2
- data/ext/couchbase/protocol/magic.hxx +2 -2
- data/ext/couchbase/protocol/server_opcode.hxx +2 -2
- data/ext/couchbase/protocol/server_request.hxx +1 -1
- data/ext/couchbase/protocol/status.hxx +4 -7
- data/ext/couchbase/protocol/unsigned_leb128.h +5 -20
- data/ext/couchbase/service_type.hxx +4 -4
- data/ext/couchbase/tracing/constants.hxx +261 -0
- data/ext/couchbase/tracing/noop_tracer.hxx +50 -0
- data/ext/couchbase/tracing/request_tracer.hxx +77 -0
- data/ext/couchbase/tracing/threshold_logging_options.hxx +64 -0
- data/ext/couchbase/tracing/threshold_logging_tracer.hxx +366 -0
- data/ext/couchbase/utils/byteswap.hxx +1 -1
- data/ext/couchbase/utils/connection_string.hxx +21 -1
- data/ext/couchbase/utils/name_codec.hxx +41 -0
- data/ext/couchbase/utils/url_codec.hxx +236 -0
- data/ext/couchbase/version.hxx +1 -1
- data/ext/test/CMakeLists.txt +1 -0
- data/ext/test/test_native_trivial_query.cxx +60 -0
- data/ext/third_party/hdr_histogram_c/CMakeLists.txt +84 -0
- data/ext/third_party/hdr_histogram_c/COPYING.txt +121 -0
- data/ext/third_party/hdr_histogram_c/LICENSE.txt +41 -0
- data/ext/third_party/hdr_histogram_c/config.cmake.in +6 -0
- data/ext/third_party/hdr_histogram_c/src/CMakeLists.txt +83 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_atomic.h +146 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_encoding.c +322 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_encoding.h +79 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_endian.h +116 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram.c +1196 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram.h +516 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.c +1290 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.h +236 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log_no_op.c +171 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.c +227 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.h +109 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_malloc.h +19 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_tests.h +22 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_thread.c +108 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_thread.h +55 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_time.c +98 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_time.h +49 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.c +143 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.h +51 -0
- data/lib/couchbase/cluster.rb +1 -0
- data/lib/couchbase/errors.rb +3 -0
- data/lib/couchbase/libcouchbase.bundle +0 -0
- data/lib/couchbase/management/analytics_index_manager.rb +920 -226
- data/lib/couchbase/management/bucket_manager.rb +207 -69
- data/lib/couchbase/management/collection_manager.rb +173 -61
- data/lib/couchbase/management/query_index_manager.rb +357 -169
- data/lib/couchbase/options.rb +75 -3
- data/lib/couchbase/scope.rb +102 -0
- data/lib/couchbase/utils/time.rb +4 -0
- data/lib/couchbase/version.rb +6 -6
- metadata +48 -5
@@ -0,0 +1,109 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_interval_recorder.h
|
3
|
+
* Written by Michael Barker and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*/
|
6
|
+
|
7
|
+
#ifndef HDR_INTERVAL_RECORDER_H
|
8
|
+
#define HDR_INTERVAL_RECORDER_H 1
|
9
|
+
|
10
|
+
#include "hdr_writer_reader_phaser.h"
|
11
|
+
#include "hdr_histogram.h"
|
12
|
+
|
13
|
+
HDR_ALIGN_PREFIX(8)
|
14
|
+
struct hdr_interval_recorder
|
15
|
+
{
|
16
|
+
struct hdr_histogram* active;
|
17
|
+
struct hdr_histogram* inactive;
|
18
|
+
struct hdr_writer_reader_phaser phaser;
|
19
|
+
}
|
20
|
+
HDR_ALIGN_SUFFIX(8);
|
21
|
+
|
22
|
+
#ifdef __cplusplus
|
23
|
+
extern "C" {
|
24
|
+
#endif
|
25
|
+
|
26
|
+
int hdr_interval_recorder_init(struct hdr_interval_recorder* r);
|
27
|
+
|
28
|
+
int hdr_interval_recorder_init_all(
|
29
|
+
struct hdr_interval_recorder* r,
|
30
|
+
int64_t lowest_trackable_value,
|
31
|
+
int64_t highest_trackable_value,
|
32
|
+
int significant_figures);
|
33
|
+
|
34
|
+
void hdr_interval_recorder_destroy(struct hdr_interval_recorder* r);
|
35
|
+
|
36
|
+
int64_t hdr_interval_recorder_record_value(
|
37
|
+
struct hdr_interval_recorder* r,
|
38
|
+
int64_t value
|
39
|
+
);
|
40
|
+
|
41
|
+
int64_t hdr_interval_recorder_record_values(
|
42
|
+
struct hdr_interval_recorder* r,
|
43
|
+
int64_t value,
|
44
|
+
int64_t count
|
45
|
+
);
|
46
|
+
|
47
|
+
int64_t hdr_interval_recorder_record_corrected_value(
|
48
|
+
struct hdr_interval_recorder* r,
|
49
|
+
int64_t value,
|
50
|
+
int64_t expected_interval
|
51
|
+
);
|
52
|
+
|
53
|
+
int64_t hdr_interval_recorder_record_corrected_values(
|
54
|
+
struct hdr_interval_recorder* r,
|
55
|
+
int64_t value,
|
56
|
+
int64_t count,
|
57
|
+
int64_t expected_interval
|
58
|
+
);
|
59
|
+
|
60
|
+
int64_t hdr_interval_recorder_record_value_atomic(
|
61
|
+
struct hdr_interval_recorder* r,
|
62
|
+
int64_t value
|
63
|
+
);
|
64
|
+
|
65
|
+
int64_t hdr_interval_recorder_record_values_atomic(
|
66
|
+
struct hdr_interval_recorder* r,
|
67
|
+
int64_t value,
|
68
|
+
int64_t count
|
69
|
+
);
|
70
|
+
|
71
|
+
int64_t hdr_interval_recorder_record_corrected_value_atomic(
|
72
|
+
struct hdr_interval_recorder* r,
|
73
|
+
int64_t value,
|
74
|
+
int64_t expected_interval
|
75
|
+
);
|
76
|
+
|
77
|
+
int64_t hdr_interval_recorder_record_corrected_values_atomic(
|
78
|
+
struct hdr_interval_recorder* r,
|
79
|
+
int64_t value,
|
80
|
+
int64_t count,
|
81
|
+
int64_t expected_interval
|
82
|
+
);
|
83
|
+
|
84
|
+
/**
|
85
|
+
* The is generally the preferred approach for recylcing histograms through
|
86
|
+
* the recorder as it is safe when used from callers in multiple threads and
|
87
|
+
* the returned histogram won't automatically become active without being
|
88
|
+
* passed back into this method.
|
89
|
+
*
|
90
|
+
* @param r 'this' recorder
|
91
|
+
* @param histogram_to_recycle
|
92
|
+
* @return the histogram that was previous being recorded to.
|
93
|
+
*/
|
94
|
+
struct hdr_histogram* hdr_interval_recorder_sample_and_recycle(
|
95
|
+
struct hdr_interval_recorder* r,
|
96
|
+
struct hdr_histogram* histogram_to_recycle);
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @deprecated Prefer hdr_interval_recorder_sample_and_recycle
|
100
|
+
* @param r 'this' recorder
|
101
|
+
* @return the histogram that was previous being recorded to.
|
102
|
+
*/
|
103
|
+
struct hdr_histogram* hdr_interval_recorder_sample(struct hdr_interval_recorder* r);
|
104
|
+
|
105
|
+
#ifdef __cplusplus
|
106
|
+
}
|
107
|
+
#endif
|
108
|
+
|
109
|
+
#endif
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_malloc.h
|
3
|
+
* Written by Filipe Oliveira and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*
|
6
|
+
* Allocator selection.
|
7
|
+
*
|
8
|
+
* This file is used in order to change the HdrHistogram allocator at compile time.
|
9
|
+
* Just define the following defines to what you want to use. Also add
|
10
|
+
* the include of your alternate allocator if needed (not needed in order
|
11
|
+
* to use the default libc allocator). */
|
12
|
+
|
13
|
+
#ifndef HDR_MALLOC_H__
|
14
|
+
#define HDR_MALLOC_H__
|
15
|
+
#define hdr_malloc malloc
|
16
|
+
#define hdr_calloc calloc
|
17
|
+
#define hdr_realloc realloc
|
18
|
+
#define hdr_free free
|
19
|
+
#endif
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#ifndef HDR_TESTS_H
|
2
|
+
#define HDR_TESTS_H
|
3
|
+
|
4
|
+
/* These are functions used in tests and are not intended for normal usage. */
|
5
|
+
|
6
|
+
#include "hdr_histogram.h"
|
7
|
+
|
8
|
+
#ifdef __cplusplus
|
9
|
+
extern "C" {
|
10
|
+
#endif
|
11
|
+
|
12
|
+
int32_t counts_index_for(const struct hdr_histogram* h, int64_t value);
|
13
|
+
int hdr_encode_compressed(struct hdr_histogram* h, uint8_t** compressed_histogram, size_t* compressed_len);
|
14
|
+
int hdr_decode_compressed(uint8_t* buffer, size_t length, struct hdr_histogram** histogram);
|
15
|
+
void hdr_base64_decode_block(const char* input, uint8_t* output);
|
16
|
+
void hdr_base64_encode_block(const uint8_t* input, char* output);
|
17
|
+
|
18
|
+
#ifdef __cplusplus
|
19
|
+
}
|
20
|
+
#endif
|
21
|
+
|
22
|
+
#endif
|
@@ -0,0 +1,108 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_thread.c
|
3
|
+
* Written by Philip Orwig and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*/
|
6
|
+
|
7
|
+
#include <stdlib.h>
|
8
|
+
#include "hdr_thread.h"
|
9
|
+
|
10
|
+
#ifndef HDR_MALLOC_INCLUDE
|
11
|
+
#define HDR_MALLOC_INCLUDE "hdr_malloc.h"
|
12
|
+
#endif
|
13
|
+
|
14
|
+
#include HDR_MALLOC_INCLUDE
|
15
|
+
|
16
|
+
struct hdr_mutex* hdr_mutex_alloc(void)
|
17
|
+
{
|
18
|
+
return hdr_malloc(sizeof(hdr_mutex));
|
19
|
+
}
|
20
|
+
|
21
|
+
void hdr_mutex_free(struct hdr_mutex* mutex)
|
22
|
+
{
|
23
|
+
hdr_free(mutex);
|
24
|
+
}
|
25
|
+
|
26
|
+
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
|
27
|
+
|
28
|
+
#if !defined(WIN32_LEAN_AND_MEAN)
|
29
|
+
#define WIN32_LEAN_AND_MEAN
|
30
|
+
#endif
|
31
|
+
|
32
|
+
#include <windows.h>
|
33
|
+
#include <WinSock2.h>
|
34
|
+
|
35
|
+
int hdr_mutex_init(struct hdr_mutex* mutex)
|
36
|
+
{
|
37
|
+
InitializeCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
38
|
+
return 0;
|
39
|
+
}
|
40
|
+
|
41
|
+
void hdr_mutex_destroy(struct hdr_mutex* mutex)
|
42
|
+
{
|
43
|
+
DeleteCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
44
|
+
}
|
45
|
+
|
46
|
+
void hdr_mutex_lock(struct hdr_mutex* mutex)
|
47
|
+
{
|
48
|
+
EnterCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
49
|
+
}
|
50
|
+
|
51
|
+
void hdr_mutex_unlock(struct hdr_mutex* mutex)
|
52
|
+
{
|
53
|
+
LeaveCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
|
54
|
+
}
|
55
|
+
|
56
|
+
void hdr_yield()
|
57
|
+
{
|
58
|
+
Sleep(0);
|
59
|
+
}
|
60
|
+
|
61
|
+
int hdr_usleep(unsigned int useconds)
|
62
|
+
{
|
63
|
+
struct timeval tv;
|
64
|
+
|
65
|
+
tv.tv_sec = (long)useconds / 1000000;
|
66
|
+
tv.tv_usec = useconds % 1000000;
|
67
|
+
select(0, NULL, NULL, NULL, &tv);
|
68
|
+
|
69
|
+
return 0;
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
#else
|
74
|
+
#include <pthread.h>
|
75
|
+
#include <unistd.h>
|
76
|
+
|
77
|
+
int hdr_mutex_init(struct hdr_mutex* mutex)
|
78
|
+
{
|
79
|
+
return pthread_mutex_init(&mutex->_mutex, NULL);
|
80
|
+
}
|
81
|
+
|
82
|
+
void hdr_mutex_destroy(struct hdr_mutex* mutex)
|
83
|
+
{
|
84
|
+
pthread_mutex_destroy(&mutex->_mutex);
|
85
|
+
}
|
86
|
+
|
87
|
+
void hdr_mutex_lock(struct hdr_mutex* mutex)
|
88
|
+
{
|
89
|
+
pthread_mutex_lock(&mutex->_mutex);
|
90
|
+
}
|
91
|
+
|
92
|
+
void hdr_mutex_unlock(struct hdr_mutex* mutex)
|
93
|
+
{
|
94
|
+
pthread_mutex_unlock(&mutex->_mutex);
|
95
|
+
}
|
96
|
+
|
97
|
+
void hdr_yield()
|
98
|
+
{
|
99
|
+
sched_yield();
|
100
|
+
}
|
101
|
+
|
102
|
+
int hdr_usleep(unsigned int useconds)
|
103
|
+
{
|
104
|
+
return usleep(useconds);
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
#endif
|
@@ -0,0 +1,55 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_thread.h
|
3
|
+
* Written by Philip Orwig and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*/
|
6
|
+
|
7
|
+
#ifndef HDR_THREAD_H__
|
8
|
+
#define HDR_THREAD_H__
|
9
|
+
|
10
|
+
#include <stdint.h>
|
11
|
+
|
12
|
+
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
|
13
|
+
|
14
|
+
|
15
|
+
#define HDR_ALIGN_PREFIX(alignment) __declspec( align(alignment) )
|
16
|
+
#define HDR_ALIGN_SUFFIX(alignment)
|
17
|
+
|
18
|
+
typedef struct hdr_mutex
|
19
|
+
{
|
20
|
+
uint8_t _critical_section[40];
|
21
|
+
} hdr_mutex;
|
22
|
+
|
23
|
+
#else
|
24
|
+
|
25
|
+
#include <pthread.h>
|
26
|
+
|
27
|
+
#define HDR_ALIGN_PREFIX(alignment)
|
28
|
+
#define HDR_ALIGN_SUFFIX(alignment) __attribute__((aligned(alignment)))
|
29
|
+
|
30
|
+
typedef struct hdr_mutex
|
31
|
+
{
|
32
|
+
pthread_mutex_t _mutex;
|
33
|
+
} hdr_mutex;
|
34
|
+
#endif
|
35
|
+
|
36
|
+
#ifdef __cplusplus
|
37
|
+
extern "C" {
|
38
|
+
#endif
|
39
|
+
|
40
|
+
struct hdr_mutex* hdr_mutex_alloc(void);
|
41
|
+
void hdr_mutex_free(struct hdr_mutex*);
|
42
|
+
|
43
|
+
int hdr_mutex_init(struct hdr_mutex* mutex);
|
44
|
+
void hdr_mutex_destroy(struct hdr_mutex* mutex);
|
45
|
+
|
46
|
+
void hdr_mutex_lock(struct hdr_mutex* mutex);
|
47
|
+
void hdr_mutex_unlock(struct hdr_mutex* mutex);
|
48
|
+
|
49
|
+
void hdr_yield(void);
|
50
|
+
int hdr_usleep(unsigned int useconds);
|
51
|
+
|
52
|
+
#ifdef __cplusplus
|
53
|
+
}
|
54
|
+
#endif
|
55
|
+
#endif
|
@@ -0,0 +1,98 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_time.h
|
3
|
+
* Written by Michael Barker and Philip Orwig and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*/
|
6
|
+
|
7
|
+
#include "hdr_time.h"
|
8
|
+
|
9
|
+
#if defined(_WIN32) || defined(_WIN64)
|
10
|
+
|
11
|
+
#if !defined(WIN32_LEAN_AND_MEAN)
|
12
|
+
#define WIN32_LEAN_AND_MEAN
|
13
|
+
#endif
|
14
|
+
|
15
|
+
#include <windows.h>
|
16
|
+
|
17
|
+
static int s_clockPeriodSet = 0;
|
18
|
+
static double s_clockPeriod = 1.0;
|
19
|
+
|
20
|
+
void hdr_gettime(hdr_timespec* t)
|
21
|
+
{
|
22
|
+
LARGE_INTEGER num;
|
23
|
+
/* if this is distasteful, we can add in an hdr_time_init() */
|
24
|
+
if (!s_clockPeriodSet)
|
25
|
+
{
|
26
|
+
QueryPerformanceFrequency(&num);
|
27
|
+
s_clockPeriod = 1.0 / (double) num.QuadPart;
|
28
|
+
s_clockPeriodSet = 1;
|
29
|
+
}
|
30
|
+
|
31
|
+
QueryPerformanceCounter(&num);
|
32
|
+
double seconds = num.QuadPart * s_clockPeriod;
|
33
|
+
double integral;
|
34
|
+
double remainder = modf(seconds, &integral);
|
35
|
+
|
36
|
+
t->tv_sec = (long) integral;
|
37
|
+
t->tv_nsec = (long) (remainder * 1000000000);
|
38
|
+
}
|
39
|
+
|
40
|
+
#elif defined(__APPLE__)
|
41
|
+
|
42
|
+
#include <mach/clock.h>
|
43
|
+
#include <mach/mach.h>
|
44
|
+
|
45
|
+
|
46
|
+
void hdr_gettime(hdr_timespec* ts)
|
47
|
+
{
|
48
|
+
clock_serv_t cclock;
|
49
|
+
mach_timespec_t mts;
|
50
|
+
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
|
51
|
+
clock_get_time(cclock, &mts);
|
52
|
+
mach_port_deallocate(mach_task_self(), cclock);
|
53
|
+
ts->tv_sec = mts.tv_sec;
|
54
|
+
ts->tv_nsec = mts.tv_nsec;
|
55
|
+
}
|
56
|
+
|
57
|
+
|
58
|
+
void hdr_getnow(hdr_timespec* ts)
|
59
|
+
{
|
60
|
+
hdr_gettime(ts);
|
61
|
+
}
|
62
|
+
|
63
|
+
#elif defined(__linux__) || defined(__CYGWIN__) || defined(__OpenBSD__)
|
64
|
+
|
65
|
+
|
66
|
+
void hdr_gettime(hdr_timespec* t)
|
67
|
+
{
|
68
|
+
clock_gettime(CLOCK_MONOTONIC, (struct timespec*)t);
|
69
|
+
}
|
70
|
+
|
71
|
+
void hdr_getnow(hdr_timespec* t)
|
72
|
+
{
|
73
|
+
clock_gettime(CLOCK_REALTIME, (struct timespec*)t);
|
74
|
+
}
|
75
|
+
|
76
|
+
#else
|
77
|
+
|
78
|
+
#warning "Platform not supported\n"
|
79
|
+
|
80
|
+
#endif
|
81
|
+
|
82
|
+
double hdr_timespec_as_double(const hdr_timespec* t)
|
83
|
+
{
|
84
|
+
double d = t->tv_sec;
|
85
|
+
return d + (t->tv_nsec / 1000000000.0);
|
86
|
+
}
|
87
|
+
|
88
|
+
void hdr_timespec_from_double(hdr_timespec* t, double value)
|
89
|
+
{
|
90
|
+
int seconds = (int) value;
|
91
|
+
int milliseconds = (int) round((value - seconds) * 1000);
|
92
|
+
|
93
|
+
t->tv_sec = seconds;
|
94
|
+
t->tv_nsec = milliseconds * 1000000;
|
95
|
+
}
|
96
|
+
|
97
|
+
|
98
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
/**
|
2
|
+
* hdr_time.h
|
3
|
+
* Written by Michael Barker and released to the public domain,
|
4
|
+
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
|
5
|
+
*/
|
6
|
+
|
7
|
+
#ifndef HDR_TIME_H__
|
8
|
+
#define HDR_TIME_H__
|
9
|
+
|
10
|
+
#include <math.h>
|
11
|
+
#include <time.h>
|
12
|
+
|
13
|
+
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
|
14
|
+
|
15
|
+
typedef struct hdr_timespec
|
16
|
+
{
|
17
|
+
long tv_sec;
|
18
|
+
long tv_nsec;
|
19
|
+
} hdr_timespec;
|
20
|
+
|
21
|
+
#else
|
22
|
+
|
23
|
+
typedef struct timespec hdr_timespec;
|
24
|
+
|
25
|
+
#endif
|
26
|
+
|
27
|
+
#ifdef __cplusplus
|
28
|
+
extern "C" {
|
29
|
+
#endif
|
30
|
+
|
31
|
+
#if defined(_MSC_VER)
|
32
|
+
void hdr_gettime(hdr_timespec* t);
|
33
|
+
#else
|
34
|
+
void hdr_gettime(hdr_timespec* t);
|
35
|
+
#endif
|
36
|
+
|
37
|
+
void hdr_getnow(hdr_timespec* t);
|
38
|
+
|
39
|
+
double hdr_timespec_as_double(const hdr_timespec* t);
|
40
|
+
|
41
|
+
/* Assumes only millisecond accuracy. */
|
42
|
+
void hdr_timespec_from_double(hdr_timespec* t, double value);
|
43
|
+
|
44
|
+
#ifdef __cplusplus
|
45
|
+
}
|
46
|
+
#endif
|
47
|
+
|
48
|
+
#endif
|
49
|
+
|