19 #ifndef SBUILD_KEYFILE_H
20 #define SBUILD_KEYFILE_H
23 #include <sbuild/log.h>
24 #include <sbuild/parse-error.h>
25 #include <sbuild/parse-value.h>
26 #include <sbuild/types.h>
27 #include <sbuild/util.h>
35 #include <boost/format.hpp>
36 #include <boost/any.hpp>
114 typedef std::tuple<key_type,internal_value_type,comment_type,size_type>
121 typedef std::tuple<group_name_type,item_map_type,comment_type,size_type>
group_type;
261 template <
typename T>
268 <<
", key=" << key << std::endl;
275 parse_value(boost::any_cast<std::string const&>(strval), value);
310 template <
typename T>
317 bool status =
get_value(group, key, value);
366 const std::string& locale,
385 const std::string& locale,
401 template <
typename C>
412 for (
const auto& item : items)
414 typename C::value_type tmp;
436 container.push_back(tmp);
457 template <
typename C>
481 template <
typename C>
492 for (
const auto& item : items)
494 typename C::value_type tmp;
516 container.insert(tmp);
537 template <
typename C>
557 template <
typename T>
575 template <
typename T>
582 set_value(group, key, value, comment, 0);
604 assert (found_group != 0);
608 typename item_map_type::iterator pos = items.find(key);
609 if (pos != items.end())
612 (
typename item_map_type::value_type(key,
628 template <
typename T>
636 std::ostringstream os;
637 os.imbue(std::locale::classic());
638 os << std::boolalpha << value;
642 assert (found_group != 0);
646 typename item_map_type::iterator pos = items.find(key);
647 if (pos != items.end())
650 (
typename item_map_type::value_type(key,
664 template <
typename I>
684 template <
typename I>
706 template <
typename I>
717 for (I pos = begin; pos != end;)
719 std::ostringstream os;
720 os.imbue(std::locale::classic());
721 os << std::boolalpha << *pos;
730 set_value (group, key, strval, comment, line);
742 template <
typename I>
749 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
750 std::sort(l.begin(), l.end());
764 template <
typename I>
772 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
773 std::sort(l.begin(), l.end());
788 template <
typename I>
797 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
798 std::sort(l.begin(), l.end());
913 template<
class C,
typename T>
916 T (C::* method)()
const,
924 keyfile.
set_value(group, key, (
object.*method)());
926 catch (
const std::runtime_error& e)
944 template<
class C,
typename T>
947 T
const& (C::* method)()
const,
955 keyfile.
set_value(group, key, (
object.*method)());
957 catch (
const std::runtime_error& e)
976 template<
class C,
typename T>
979 T (C::* method)()
const,
988 (
object.*method)().begin(),
989 (
object.*method)().end());
991 catch (
const std::runtime_error& e)
1011 template<
class C,
typename T>
1014 T
const& (C::* method)()
const,
1023 (
object.*method)().begin(),
1024 (
object.*method)().end());
1026 catch (
const std::runtime_error& e)
1045 template<
class C,
typename T>
1048 T (C::* method)()
const,
1057 (
object.*method)().begin(),
1058 (
object.*method)().end());
1060 catch (
const std::runtime_error& e)
1080 template<
class C,
typename T>
1083 T
const& (C::* method)()
const,
1092 (
object.*method)().begin(),
1093 (
object.*method)().end());
1095 catch (
const std::runtime_error& e)
1115 template<
class C,
typename T>
1118 void (C::* method)(T param),
1127 if (keyfile.
get_value(group, key, priority, value)
1129 (
object.*method)(value);
1131 catch (
const std::runtime_error& e)
1155 template<
class C,
typename T>
1158 void (C::* method)(T
const& param),
1167 if (keyfile.
get_value(group, key, priority, value)
1169 (
object.*method)(value);
1171 catch (
const std::runtime_error& e)
1195 template<
class C,
typename T>
1198 void (C::* method)(T param),
1209 (
object.*method)(value);
1211 catch (
const std::runtime_error& e)
1238 template<
class C,
typename T>
1241 void (C::* method)(T
const& param),
1252 (
object.*method)(value);
1254 catch (
const std::runtime_error& e)
1280 template<
class C,
typename T>
1283 void (C::* method)(T param),
1294 (
object.*method)(value);
1296 catch (
const std::runtime_error& e)
1323 template<
class C,
typename T>
1326 void (C::* method)(T
const& param),
1337 (
object.*method)(value);
1339 catch (
const std::runtime_error& e)