1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_
6 #define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_
7 
8 #include <cstdint>
9 #include <map>
10 #include <memory>
11 #include <string>
12 #include <vector>
13 
14 #include "quiche/common/platform/api/quiche_export.h"
15 
16 #define QUIC_FLAG(flag, value) QUICHE_EXPORT extern bool FLAGS_##flag;
17 #include "quiche/quic/core/quic_flags_list.h"
18 #undef QUIC_FLAG
19 
20 // Protocol flags.
21 #define QUICHE_PROTOCOL_FLAG(type, flag, ...) \
22   QUICHE_EXPORT extern type FLAGS_##flag;
23 #include "quiche/common/quiche_protocol_flags_list.h"
24 #undef QUICHE_PROTOCOL_FLAG
25 
26 #define GetQuicheFlagImpl(flag) GetQuicheFlagImplImpl(FLAGS_##flag)
GetQuicheFlagImplImpl(bool flag)27 inline bool GetQuicheFlagImplImpl(bool flag) { return flag; }
GetQuicheFlagImplImpl(int32_t flag)28 inline int32_t GetQuicheFlagImplImpl(int32_t flag) { return flag; }
GetQuicheFlagImplImpl(int64_t flag)29 inline int64_t GetQuicheFlagImplImpl(int64_t flag) { return flag; }
GetQuicheFlagImplImpl(uint64_t flag)30 inline uint64_t GetQuicheFlagImplImpl(uint64_t flag) { return flag; }
GetQuicheFlagImplImpl(double flag)31 inline double GetQuicheFlagImplImpl(double flag) { return flag; }
GetQuicheFlagImplImpl(const std::string & flag)32 inline std::string GetQuicheFlagImplImpl(const std::string& flag) {
33   return flag;
34 }
35 #define SetQuicheFlagImpl(flag, value) ((FLAGS_##flag) = (value))
36 
37 // ------------------------------------------------------------------------
38 // QUICHE feature flags implementation.
39 // ------------------------------------------------------------------------
40 #define QUICHE_RELOADABLE_FLAG(flag) quic_reloadable_flag_##flag
41 #define QUICHE_RESTART_FLAG(flag) quic_restart_flag_##flag
42 #define GetQuicheReloadableFlagImpl(flag) \
43   GetQuicheFlag(QUICHE_RELOADABLE_FLAG(flag))
44 #define SetQuicheReloadableFlagImpl(flag, value) \
45   SetQuicheFlag(QUICHE_RELOADABLE_FLAG(flag), value)
46 #define GetQuicheRestartFlagImpl(flag) GetQuicheFlag(QUICHE_RESTART_FLAG(flag))
47 #define SetQuicheRestartFlagImpl(flag, value) \
48   SetQuicheFlag(QUICHE_RESTART_FLAG(flag), value)
49 
50 #endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_
51