19 #ifndef SBUILD_BASIC_KEYFILE_H
20 #define SBUILD_BASIC_KEYFILE_H
23 #include <sbuild/sbuild-log.h>
24 #include <sbuild/sbuild-keyfile-base.h>
25 #include <sbuild/sbuild-parse-error.h>
26 #include <sbuild/sbuild-parse-value.h>
27 #include <sbuild/sbuild-types.h>
29 #include <sbuild/sbuild-util.h>
36 #include <boost/format.hpp>
70 typename K::group_name_type
group;
76 typename K::key_type
key;
137 template <
typename K,
typename P = basic_keyfile_parser<K> >
167 typedef std::tuple<key_type,value_type,comment_type,size_type>
174 typedef std::tuple<group_name_type,item_map_type,comment_type,size_type>
group_type;
328 template <
typename T>
335 <<
", key=" << key << std::endl;
339 value_type const& strval(std::get<1>(*found_item));
377 template <
typename T>
384 bool status =
get_value(group, key, value);
433 std::string
const& locale,
452 std::string
const& locale,
468 template <
typename C>
479 for (
typename value_list::const_iterator pos = items.begin();
484 typename C::value_type tmp;
506 container.push_back(tmp);
527 template <
typename C>
551 template <
typename C>
562 for (
typename value_list::const_iterator pos = items.begin();
567 typename C::value_type tmp;
589 container.insert(tmp);
610 template <
typename C>
630 template <
typename T>
648 template <
typename T>
655 set_value(group, key, value, comment, 0);
668 template <
typename T>
676 std::ostringstream os;
677 os.imbue(std::locale::classic());
678 os << std::boolalpha << value;
682 assert (found_group != 0);
686 typename item_map_type::iterator pos = items.find(key);
687 if (pos != items.end())
690 (
typename item_map_type::value_type(key,
704 template <
typename I>
724 template <
typename I>
746 template <
typename I>
757 for (I pos = begin; pos != end;)
759 std::ostringstream os;
760 os.imbue(std::locale::classic());
761 os << std::boolalpha << *pos;
770 set_value (group, key, strval, comment, line);
782 template <
typename I>
789 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
790 std::sort(l.begin(), l.end());
804 template <
typename I>
812 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
813 std::sort(l.begin(), l.end());
828 template <
typename I>
837 std::vector<typename std::iterator_traits<I>::value_type> l(begin, end);
838 std::sort(l.begin(), l.end());
876 template <
typename _K,
typename _P>
888 template <
class charT,
class traits>
890 std::basic_istream<charT,traits>&
900 while (std::getline(stream, line))
902 state.parse_line(line);
910 tmp.
set_group(state.group, state.comment, state.line_number);
914 if (state.key_set && state.value_set)
916 if (tmp.
has_key(state.group, state.key))
919 tmp.
set_value(state.group, state.key, state.value, state.comment, state.line_number);
938 template <
class charT,
class traits>
940 std::basic_ostream<charT,traits>&
941 operator << (std::basic_ostream<charT,traits>& stream,
946 for (
typename group_map_type::const_iterator gp = kf.groups.begin();
947 gp != kf.groups.end();
957 if (comment.length() > 0)
960 stream <<
'[' << groupname <<
']' <<
'\n';
963 for (
typename item_map_type::const_iterator it = items.begin();
968 key_type const& key(std::get<0>(item));
972 if (comment.length() > 0)
975 stream << key <<
'=' << value <<
'\n';
1050 std::ostream& stream);
1070 template<
class C,
typename T>
1073 T (C::* method)()
const,
1081 basic_keyfile.
set_value(group, key, (
object.*method)());
1083 catch (std::runtime_error
const& e)
1101 template<
class C,
typename T>
1104 T
const& (C::* method)()
const,
1112 basic_keyfile.
set_value(group, key, (
object.*method)());
1114 catch (std::runtime_error
const& e)
1133 template<
class C,
typename T>
1136 T (C::* method)()
const,
1145 (
object.*method)().begin(),
1146 (
object.*method)().end());
1148 catch (std::runtime_error
const& e)
1168 template<
class C,
typename T>
1171 T
const& (C::* method)()
const,
1180 (
object.*method)().begin(),
1181 (
object.*method)().end());
1183 catch (std::runtime_error
const& e)
1202 template<
class C,
typename T>
1205 T (C::* method)()
const,
1214 (
object.*method)().begin(),
1215 (
object.*method)().end());
1217 catch (std::runtime_error
const& e)
1237 template<
class C,
typename T>
1240 T
const& (C::* method)()
const,
1249 (
object.*method)().begin(),
1250 (
object.*method)().end());
1252 catch (std::runtime_error
const& e)
1272 template<
class C,
typename T>
1275 void (C::* method)(T param),
1284 if (basic_keyfile.
get_value(group, key, priority, value)
1286 (
object.*method)(value);
1288 catch (std::runtime_error
const& e)
1312 template<
class C,
typename T>
1315 void (C::* method)(T
const& param),
1324 if (basic_keyfile.
get_value(group, key, priority, value)
1326 (
object.*method)(value);
1328 catch (std::runtime_error
const& e)
1352 template<
class C,
typename T>
1355 void (C::* method)(T param),
1366 (
object.*method)(value);
1368 catch (std::runtime_error
const& e)
1395 template<
class C,
typename T>
1398 void (C::* method)(T
const& param),
1409 (
object.*method)(value);
1411 catch (std::runtime_error
const& e)
1437 template<
class C,
typename T>
1440 void (C::* method)(T param),
1449 if (basic_keyfile.
get_set_value(group, key, priority, value)
1451 (
object.*method)(value);
1453 catch (std::runtime_error
const& e)
1480 template<
class C,
typename T>
1483 void (C::* method)(T
const& param),
1492 if (basic_keyfile.
get_set_value(group, key, priority, value)
1494 (
object.*method)(value);
1496 catch (std::runtime_error
const& e)
1511 #include <sbuild/sbuild-basic-keyfile.tcc>