# Poco::Util

# class LayeredConfiguration

Library: Util
Package: Configuration
Header: Poco/Util/LayeredConfiguration.h

## Description

A LayeredConfiguration consists of a number of AbstractConfigurations.

When reading a configuration property in a LayeredConfiguration, all added configurations are searched, in order of their priority. Configurations with lower priority values have precedence.

When setting a property, the property is always written to the first writeable configuration (see addWriteable()). If no writeable configuration has been added to the LayeredConfiguration, and an attempt is made to set a property, a RuntimeException is thrown.

Every configuration added to the LayeredConfiguration has a priority value. The priority determines the position where the configuration is inserted, with lower priority values coming before higher priority values.

If no priority is specified, a priority of 0 is assumed.

## Inheritance

Direct Base Classes: AbstractConfiguration

All Base Classes: Poco::RefCountedObject, AbstractConfiguration

## Member Summary

Member Functions: add, addWriteable, enumerate, find, getRaw, highest, insert, lowest, removeConfiguration, removeRaw, setRaw

Inherited Functions: createLocalView, createView, duplicate, enableEvents, enumerate, eventsEnabled, expand, getBool, getDouble, getInt, getInt16, getInt32, getInt64, getRaw, getRawString, getString, getUInt, getUInt16, getUInt32, getUInt64, has, hasOption, hasProperty, keys, operator =, parseBool, parseInt, parseInt16, parseInt64, parseUInt, parseUInt16, parseUInt64, referenceCount, release, remove, removeRaw, setBool, setDouble, setInt, setInt16, setInt32, setInt64, setRaw, setRawWithEvent, setString, setUInt, setUInt16, setUInt32, setUInt64

## Nested Classes

### struct ConfigItem

## Types Aliases

### Ptr

using Ptr = Poco::AutoPtr < LayeredConfiguration >;

## Constructors

### LayeredConfiguration

LayeredConfiguration();

Creates the LayeredConfiguration.

## Destructor

### ~LayeredConfiguration

~LayeredConfiguration();

## Member Functions

### add

void add(
AbstractConfiguration::Ptr pConfig
);

Adds a read-only configuration to the back of the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### add

void add(
AbstractConfiguration::Ptr pConfig,
const std::string & label
);

Adds a read-only configuration with the given label to the back of the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### add

void add(
AbstractConfiguration::Ptr pConfig,
int priority
);

Adds a read-only configuration to the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### add

void add(
AbstractConfiguration::Ptr pConfig,
const std::string & label,
int priority
);

Adds a read-only configuration with the given label to the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### add

void add(
AbstractConfiguration::Ptr pConfig,
int priority,
bool writeable
);

Adds a configuration to the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### add

void add(
AbstractConfiguration::Ptr pConfig,
const std::string & label,
int priority,
bool writeable
);

Adds a configuration with the given label to the LayeredConfiguration. The LayeredConfiguration takes shared ownership of the given configuration.

### addWriteable

void addWriteable(
AbstractConfiguration::Ptr pConfig,
int priority
);

Adds a writeable configuration to the LayeredConfiguration. The LayeredConfiguration does not take ownership of the given configuration. In other words, the configuration's reference count is incremented.

### find

AbstractConfiguration::Ptr find(
const std::string & label
) const;

Finds and returns the configuration with the given label.

Returns null if no such configuration can be found.

### removeConfiguration

void removeConfiguration(
AbstractConfiguration::Ptr pConfig
);

Removes the given configuration from the LayeredConfiguration.

Does nothing if the given configuration is not part of the LayeredConfiguration.

### enumerate

void enumerate(
const std::string & key,
Keys & range
) const override;

See also: Poco::Util::AbstractConfiguration::enumerate()

### getRaw

bool getRaw(
const std::string & key,
std::string & value
) const override;

See also: Poco::Util::AbstractConfiguration::getRaw()

### highest

int highest() const;

### insert

void insert(
const ConfigItem & item
);

### lowest

int lowest() const;

### removeRaw

void removeRaw(
const std::string & key
) override;

See also: Poco::Util::AbstractConfiguration::removeRaw()

### setRaw

void setRaw(
const std::string & key,
const std::string & value
) override;

See also: Poco::Util::AbstractConfiguration::setRaw()