blob: 9e97b263bbbcc4ae6d19f6c2838fd43ee1198c97 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_
#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_
#include <cstdint>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "quiche/common/platform/api/quiche_export.h"
#define QUIC_FLAG(flag, value) QUICHE_EXPORT_PRIVATE extern bool FLAGS_##flag;
#include "quiche/quic/core/quic_flags_list.h"
#undef QUIC_FLAG
// Protocol flags. TODO(bnc): Move to quiche_protocol_flags_list.h.
#define QUIC_PROTOCOL_FLAG(type, flag, ...) \
QUICHE_EXPORT_PRIVATE extern type FLAGS_##flag;
#include "quiche/quic/core/quic_protocol_flags_list.h"
#undef QUIC_PROTOCOL_FLAG
// Protocol flags.
#define QUICHE_PROTOCOL_FLAG(type, flag, ...) \
QUICHE_EXPORT_PRIVATE extern type FLAGS_##flag;
#include "quiche/common/quiche_protocol_flags_list.h"
#undef QUICHE_PROTOCOL_FLAG
#define GetQuicheFlagImpl(flag) GetQuicheFlagImplImpl(FLAGS_##flag)
inline bool GetQuicheFlagImplImpl(bool flag) { return flag; }
inline int32_t GetQuicheFlagImplImpl(int32_t flag) { return flag; }
inline int64_t GetQuicheFlagImplImpl(int64_t flag) { return flag; }
inline uint64_t GetQuicheFlagImplImpl(uint64_t flag) { return flag; }
inline double GetQuicheFlagImplImpl(double flag) { return flag; }
inline std::string GetQuicheFlagImplImpl(const std::string& flag) {
return flag;
}
#define SetQuicheFlagImpl(flag, value) ((FLAGS_##flag) = (value))
// ------------------------------------------------------------------------
// QUICHE feature flags implementation.
// ------------------------------------------------------------------------
#define QUICHE_RELOADABLE_FLAG(flag) quic_reloadable_flag_##flag
#define QUICHE_RESTART_FLAG(flag) quic_restart_flag_##flag
#define GetQuicheReloadableFlagImpl(module, flag) \
GetQuicheFlag(QUICHE_RELOADABLE_FLAG(flag))
#define SetQuicheReloadableFlagImpl(module, flag, value) \
SetQuicheFlag(QUICHE_RELOADABLE_FLAG(flag), value)
#define GetQuicheRestartFlagImpl(module, flag) \
GetQuicheFlag(QUICHE_RESTART_FLAG(flag))
#define SetQuicheRestartFlagImpl(module, flag, value) \
SetQuicheFlag(QUICHE_RESTART_FLAG(flag), value)
#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FLAGS_IMPL_H_