summaryrefslogtreecommitdiffstats
path: root/include/span.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--include/span.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/include/span.h b/include/span.h
new file mode 100644
index 0000000..14c0b6c
--- /dev/null
+++ b/include/span.h
@@ -0,0 +1,94 @@
+/***
+ * Copyright 2020 HAProxy Technologies
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _OPENTRACING_C_WRAPPER_SPAN_H_
+#define _OPENTRACING_C_WRAPPER_SPAN_H_
+
+#define OT_LF(a) { fields[a].key, str_value[a] }
+
+
+class otc_hash {
+ public:
+ size_t operator() (int64_t key) const { return key; }
+};
+
+
+class otc_equal_to {
+ public:
+ bool operator() (int64_t a, int64_t b) const { return a == b; }
+};
+
+
+# ifdef OT_THREADS_NO_LOCKING
+template<typename T>
+ using Handle = std::unordered_map<
+ int64_t,
+ std::unique_ptr<T>,
+ otc_hash,
+ otc_equal_to
+ >;
+struct HandleData {
+ int64_t key;
+ int64_t alloc_fail_cnt;
+ int64_t erase_cnt;
+ int64_t destroy_cnt;
+};
+
+# define OT_LOCK_GUARD(a,...)
+# define OT_LOCK(a,b)
+
+extern thread_local Handle<opentracing::Span> ot_span_handle;
+extern thread_local Handle<opentracing::SpanContext> ot_span_context_handle;
+extern struct HandleData ot_span;
+extern struct HandleData ot_span_context;
+# else
+template<typename T> struct Handle {
+ std::unordered_map<
+ int64_t,
+ std::unique_ptr<T>,
+ otc_hash,
+ otc_equal_to
+ > handle;
+ int64_t key;
+ int64_t alloc_fail_cnt;
+ int64_t erase_cnt;
+ int64_t destroy_cnt;
+ std::mutex mutex;
+};
+
+# define ot_span_handle ot_span.handle
+# define ot_span_context_handle ot_span_context.handle
+# define OT_LOCK_GUARD(a,...) const std::lock_guard<std::mutex> guard_##a(ot_##a.mutex, ##__VA_ARGS__)
+# define OT_LOCK(a,b) std::lock(ot_##a.mutex, ot_##b.mutex); OT_LOCK_GUARD(a, std::adopt_lock); OT_LOCK_GUARD(b, std::adopt_lock);
+
+extern struct Handle<opentracing::Span> ot_span;
+extern struct Handle<opentracing::SpanContext> ot_span_context;
+# endif /* OT_THREADS_NO_LOCKING */
+
+
+struct otc_span *ot_span_new(void);
+void ot_nolock_span_destroy(struct otc_span **span);
+struct otc_span_context *ot_span_context_new(const struct otc_span *span);
+
+#endif /* _OPENTRACING_C_WRAPPER_SPAN_H_ */
+
+/*
+ * Local variables:
+ * c-indent-level: 8
+ * c-basic-offset: 8
+ * End:
+ *
+ * vi: noexpandtab shiftwidth=8 tabstop=8
+ */