cppfig 0.1.0
Modern C++20 compile-time type-safe configuration library
Loading...
Searching...
No Matches
cppfig::Configuration< Schema, SerializerT, ThreadPolicy > Class Template Reference

Main configuration manager. More...

#include <configuration.h>

Inheritance diagram for cppfig::Configuration< Schema, SerializerT, ThreadPolicy >:
[legend]
Collaboration diagram for cppfig::Configuration< Schema, SerializerT, ThreadPolicy >:
[legend]

Public Types

using serializer_type = SerializerT
 
using data_type = Value
 
- Public Types inherited from cppfig::IConfigurationProvider< Derived, Schema >
using schema_type = Schema
 

Public Member Functions

 Configuration (std::string file_path)
 Creates a configuration manager with a file path.
 
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto GetImpl () const -> typename S::value_type
 Gets the value for a setting type.
 
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto SetImpl (typename S::value_type value) -> Status
 Sets the value for a setting type.
 
auto LoadImpl () -> Status
 Loads configuration from the file.
 
auto SaveImpl () const -> Status
 Saves the current configuration to the file.
 
auto DiffImpl () const -> ConfigDiff
 Returns the diff between file values and defaults.
 
auto ValidateAllImpl () const -> Status
 Validates all current values against their validators.
 
auto GetFilePathImpl () const -> std::string_view
 Returns the file path.
 
auto GetFileValues () const -> const Value &
 Returns the current file values.
 
auto GetDefaults () const -> const Value &
 Returns the default values.
 
auto Load () -> Status override
 Loads configuration from the file.
 
auto Save () const -> Status override
 Saves the current configuration to the file.
 
auto GetFilePath () const -> std::string_view override
 Returns the file path.
 
auto ValidateAll () const -> Status override
 Validates all current values.
 
auto GetDiffString () const -> std::string override
 Gets a string representation of the diff.
 
- Public Member Functions inherited from cppfig::IConfigurationProvider< Derived, Schema >
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto Get () const -> typename S::value_type
 Gets the value for a setting type.
 
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto Set (typename S::value_type value) -> Status
 Sets the value for a setting type.
 
auto Load () -> Status
 Loads configuration from the file.
 
auto Save () const -> Status
 Saves the current configuration to the file.
 
auto Diff () const -> ConfigDiff
 Returns the diff between file values and defaults.
 
auto ValidateAll () const -> Status
 Validates all current values against their validators.
 
auto GetFilePath () const -> std::string_view
 Returns the file path.
 
- Public Member Functions inherited from cppfig::IConfigurationProviderVirtual
virtual ~IConfigurationProviderVirtual ()=default
 

Additional Inherited Members

- Protected Member Functions inherited from cppfig::IConfigurationProvider< Derived, Schema >
 IConfigurationProvider ()=default
 
 ~IConfigurationProvider ()=default
 
 IConfigurationProvider (const IConfigurationProvider &)=default
 
 IConfigurationProvider (IConfigurationProvider &&)=default
 
auto operator= (const IConfigurationProvider &) -> IConfigurationProvider &=default
 
auto operator= (IConfigurationProvider &&) -> IConfigurationProvider &=default
 
- Protected Member Functions inherited from cppfig::IConfigurationProviderVirtual
 IConfigurationProviderVirtual ()=default
 
 IConfigurationProviderVirtual (const IConfigurationProviderVirtual &)=default
 
 IConfigurationProviderVirtual (IConfigurationProviderVirtual &&)=default
 
auto operator= (const IConfigurationProviderVirtual &) -> IConfigurationProviderVirtual &=default
 
auto operator= (IConfigurationProviderVirtual &&) -> IConfigurationProviderVirtual &=default
 

Detailed Description

template<typename Schema, Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
class cppfig::Configuration< Schema, SerializerT, ThreadPolicy >

Main configuration manager.

This class manages configuration values with:

  • Compile-time type-safe access via setting types
  • Environment variable overrides
  • Validation
  • Automatic file creation with defaults
  • Schema migration (adding new settings)
  • Optional thread safety via a pluggable ThreadPolicy

Thread Safety: By default, the class uses SingleThreadedPolicy (zero overhead). For concurrent access from multiple threads, specify MultiThreadedPolicy:

// Single-threaded (default, zero overhead):
cppfig::Configuration<MySchema> config("config.json");
// Thread-safe (reader-writer locking):
config("config.json");
Main configuration manager.
Definition configuration.h:83

With MultiThreadedPolicy:

  • Multiple threads may call Get concurrently (shared/reader lock).
  • Calls to Set, Load mutate internal state under an exclusive/writer lock.
  • Save, Diff, ValidateAll acquire a shared/reader lock.
  • Validation in Set is performed before acquiring the exclusive lock.

Usage:

// Define settings
struct AppName {
static constexpr std::string_view path = "app.name";
using value_type = std::string;
static auto default_value() -> std::string { return "MyApp"; }
};
struct ServerPort {
static constexpr std::string_view path = "server.port";
static constexpr std::string_view env_override = "SERVER_PORT";
using value_type = int;
static auto default_value() -> int { return 8080; }
static auto validator() -> Validator<int> { return Range(1, 65535); }
};
// Create schema and configuration
using MySchema = ConfigSchema<AppName, ServerPort>;
Configuration<MySchema> config("config.json");
// Load and use
config.Load();
std::string name = config.Get<AppName>();
int port = config.Get<ServerPort>();
config.Set<ServerPort>(9000);
config.Save();
auto Range(T min_value, T max_value) -> Validator< T >
Creates a validator that checks if a numeric value is within [min, max].
Definition validator.h:113
Template Parameters
SchemaThe ConfigSchema type defining all settings.
SerializerTThe serializer to use (defaults to ConfSerializer).
ThreadPolicyThe threading policy (defaults to SingleThreadedPolicy).

Member Typedef Documentation

◆ data_type

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
using cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::data_type = Value

◆ serializer_type

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
using cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::serializer_type = SerializerT

Constructor & Destructor Documentation

◆ Configuration()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::Configuration ( std::string  file_path)
inlineexplicit

Creates a configuration manager with a file path.

Parameters
file_pathPath to the configuration file.

Member Function Documentation

◆ DiffImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::DiffImpl ( ) const -> ConfigDiff
inline

Returns the diff between file values and defaults.

Thread safety: acquires a shared (reader) lock.

◆ GetDefaults()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetDefaults ( ) const -> const Value&
inline

Returns the default values.

Thread safety: defaults_ is immutable after construction — safe to call concurrently without synchronization.

◆ GetDiffString()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetDiffString ( ) const -> std::string
inlineoverridevirtual

Gets a string representation of the diff.

Implements cppfig::IConfigurationProviderVirtual.

◆ GetFilePath()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetFilePath ( ) const -> std::string_view
inlineoverridevirtual

Returns the file path.

Implements cppfig::IConfigurationProviderVirtual.

◆ GetFilePathImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetFilePathImpl ( ) const -> std::string_view
inline

Returns the file path.

Thread safety: file_path_ is immutable after construction — no lock needed.

◆ GetFileValues()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetFileValues ( ) const -> const Value&
inline

Returns the current file values.

Warning
The returned reference is not protected after the call returns. In multi-threaded code, prefer Get<Setting>() for safe access.

◆ GetImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::GetImpl ( ) const -> typename S::value_type
inline

Gets the value for a setting type.

Resolution order:

  1. Environment variable (if configured)
  2. File value (if present)
  3. Default value

Thread safety: acquires a shared (reader) lock when reading file values.

◆ Load()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::Load ( ) -> Status
inlineoverridevirtual

Loads configuration from the file.

Implements cppfig::IConfigurationProviderVirtual.

◆ LoadImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::LoadImpl ( ) -> Status
inline

Loads configuration from the file.

Thread safety: acquires an exclusive (writer) lock for the entire operation because it mutates file_values_.

◆ Save()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::Save ( ) const -> Status
inlineoverridevirtual

Saves the current configuration to the file.

Implements cppfig::IConfigurationProviderVirtual.

◆ SaveImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::SaveImpl ( ) const -> Status
inline

Saves the current configuration to the file.

Thread safety: acquires a shared (reader) lock because it only reads file_values_ (file I/O is serialized by the OS for the same path).

◆ SetImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
template<IsSetting S>
requires (Schema::template has_setting<S>)
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::SetImpl ( typename S::value_type  value) -> Status
inline

Sets the value for a setting type.

Thread safety: validation runs without holding any lock; the actual mutation of internal state acquires an exclusive (writer) lock.

◆ ValidateAll()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::ValidateAll ( ) const -> Status
inlineoverridevirtual

Validates all current values.

Implements cppfig::IConfigurationProviderVirtual.

◆ ValidateAllImpl()

template<typename Schema , Serializer SerializerT = ConfSerializer, typename ThreadPolicy = SingleThreadedPolicy>
auto cppfig::Configuration< Schema, SerializerT, ThreadPolicy >::ValidateAllImpl ( ) const -> Status
inline

Validates all current values against their validators.

Thread safety: acquires a shared (reader) lock.


The documentation for this class was generated from the following file: