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)27inline bool GetQuicheFlagImplImpl(bool flag) { return flag; } GetQuicheFlagImplImpl(int32_t flag)28inline int32_t GetQuicheFlagImplImpl(int32_t flag) { return flag; } GetQuicheFlagImplImpl(int64_t flag)29inline int64_t GetQuicheFlagImplImpl(int64_t flag) { return flag; } GetQuicheFlagImplImpl(uint64_t flag)30inline uint64_t GetQuicheFlagImplImpl(uint64_t flag) { return flag; } GetQuicheFlagImplImpl(double flag)31inline double GetQuicheFlagImplImpl(double flag) { return flag; } GetQuicheFlagImplImpl(const std::string & flag)32inline 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