1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <cstdint>
#include "opentelemetry/nostd/span.h"
#include "opentelemetry/version.h"
OPENTELEMETRY_BEGIN_NAMESPACE
namespace trace
{
// TraceFlags represents options for a Trace. These options are propagated to all child Spans
// and determine features such as whether a Span should be traced. TraceFlags
// are implemented as a bitmask.
class TraceFlags final
{
public:
static constexpr uint8_t kIsSampled = 1;
static constexpr uint8_t kIsRandom = 2;
/**
* Valid flags in W3C Trace Context version 1.
* See https://www.w3.org/TR/trace-context-1/#trace-flags
*/
static constexpr uint8_t kAllW3CTraceContext1Flags = kIsSampled;
/**
* Valid flags in W3C Trace Context version 2.
* See https://www.w3.org/TR/trace-context-1/#trace-flags
*/
static constexpr uint8_t kAllW3CTraceContext2Flags = kIsSampled | kIsRandom;
TraceFlags() noexcept : rep_{0} {}
explicit TraceFlags(uint8_t flags) noexcept : rep_(flags) {}
bool IsSampled() const noexcept { return rep_ & kIsSampled; }
bool IsRandom() const noexcept { return rep_ & kIsRandom; }
// Populates the buffer with the lowercase base16 representation of the flags.
void ToLowerBase16(nostd::span<char, 2> buffer) const noexcept
{
constexpr char kHex[] = "0123456789ABCDEF";
buffer[0] = kHex[(rep_ >> 4) & 0xF];
buffer[1] = kHex[(rep_ >> 0) & 0xF];
}
uint8_t flags() const noexcept { return rep_; }
bool operator==(const TraceFlags &that) const noexcept { return rep_ == that.rep_; }
bool operator!=(const TraceFlags &that) const noexcept { return !(*this == that); }
// Copies the TraceFlags to dest.
void CopyBytesTo(nostd::span<uint8_t, 1> dest) const noexcept { dest[0] = rep_; }
private:
uint8_t rep_;
};
} // namespace trace
OPENTELEMETRY_END_NAMESPACE
|