diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Util/src/ConfigurationMapper.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Util/src/ConfigurationMapper.cpp')
-rw-r--r-- | contrib/libs/poco/Util/src/ConfigurationMapper.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/contrib/libs/poco/Util/src/ConfigurationMapper.cpp b/contrib/libs/poco/Util/src/ConfigurationMapper.cpp new file mode 100644 index 0000000000..d76f9c0b6d --- /dev/null +++ b/contrib/libs/poco/Util/src/ConfigurationMapper.cpp @@ -0,0 +1,101 @@ +// +// ConfigurationMapper.cpp +// +// Library: Util +// Package: Configuration +// Module: ConfigurationMapper +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "Poco/Util/ConfigurationMapper.h" + + +namespace Poco { +namespace Util { + + +ConfigurationMapper::ConfigurationMapper(const std::string& fromPrefix, const std::string& toPrefix, AbstractConfiguration* pConfig): + _fromPrefix(fromPrefix), + _toPrefix(toPrefix), + _pConfig(pConfig) +{ + poco_check_ptr (pConfig); + + if (!_fromPrefix.empty()) _fromPrefix += '.'; + if (!_toPrefix.empty()) _toPrefix += '.'; + + _pConfig->duplicate(); +} + + +ConfigurationMapper::~ConfigurationMapper() +{ + _pConfig->release(); +} + + +bool ConfigurationMapper::getRaw(const std::string& key, std::string& value) const +{ + std::string translatedKey = translateKey(key); + return _pConfig->getRaw(translatedKey, value); +} + + +void ConfigurationMapper::setRaw(const std::string& key, const std::string& value) +{ + std::string translatedKey = translateKey(key); + _pConfig->setRaw(translatedKey, value); +} + + +void ConfigurationMapper::enumerate(const std::string& key, Keys& range) const +{ + std::string cKey(key); + if (!cKey.empty()) cKey += '.'; + std::string::size_type keyLen = cKey.length(); + if (keyLen < _toPrefix.length()) + { + if (_toPrefix.compare(0, keyLen, cKey) == 0) + { + std::string::size_type pos = _toPrefix.find_first_of('.', keyLen); + poco_assert_dbg(pos != std::string::npos); + range.push_back(_toPrefix.substr(keyLen, pos - keyLen)); + } + } + else + { + std::string translatedKey; + if (cKey == _toPrefix) + { + translatedKey = _fromPrefix; + if (!translatedKey.empty()) + translatedKey.resize(translatedKey.length() - 1); + } + else translatedKey = translateKey(key); + _pConfig->enumerate(translatedKey, range); + } +} + + +void ConfigurationMapper::removeRaw(const std::string& key) +{ + std::string translatedKey = translateKey(key); + _pConfig->remove(translatedKey); +} + + +std::string ConfigurationMapper::translateKey(const std::string& key) const +{ + std::string result(key); + if (result.compare(0, _toPrefix.size(), _toPrefix) == 0) + result.replace(0, _toPrefix.size(), _fromPrefix); + return result; +} + + +} } // namespace Poco::Util |