| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | // 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_NAMESPACEnamespace 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 traceOPENTELEMETRY_END_NAMESPACE
 |