sbuild::keyfile Class Reference

Configuration file parser. More...

#include <sbuild-keyfile.h>

Collaboration diagram for sbuild::keyfile:

Collaboration graph
[legend]
List of all members.

Public Types

typedef runtime_error_custom<
keyfile
error
 Exception type.
enum  priority {
  PRIORITY_OPTIONAL, PRIORITY_REQUIRED, PRIORITY_DISALLOWED, PRIORITY_DEPRECATED,
  PRIORITY_OBSOLETE
}
 Configuration parameter priority. More...

Public Member Functions

 keyfile ()
 The constructor.
 keyfile (std::string const &file)
 The constructor.
 keyfile (std::istream &stream)
 The constructor.
virtual ~keyfile ()
 The destructor.
string_list get_groups () const
 Get a list of groups.
string_list get_keys (std::string const &group) const
 Get a list of keys in a group.
bool has_group (std::string const &group) const
 Check if a group exists.
bool has_key (std::string const &group, std::string const &key) const
 Check if a key exists.
void set_group (std::string const &group, std::string const &comment)
 Set a group.
std::string get_comment (std::string const &group) const
 Get a group comment.
std::string get_comment (std::string const &group, std::string const &key) const
 Get a key comment.
template<typename T>
bool get_value (std::string const &group, std::string const &key, T &value) const
 Get a key value.
template<typename T>
bool get_value (std::string const &group, std::string const &key, priority priority, T &value) const
 Get a key value.
bool get_locale_string (std::string const &group, std::string const &key, std::string &value) const
 Get a localised key string value.
bool get_locale_string (std::string const &group, std::string const &key, priority priority, std::string &value) const
 Get a localised key string value.
bool get_locale_string (std::string const &group, std::string const &key, std::string const &locale, std::string &value) const
 Get a localised key string value for a specific locale.
bool get_locale_string (std::string const &group, std::string const &key, std::string const &locale, priority priority, std::string &value) const
 Get a localised key string value for a specific locale.
template<typename T, template< typename T > class C>
bool get_list_value (std::string const &group, std::string const &key, C< T > &value) const
 Get a key value as a list.
template<typename T, template< typename T > class C>
bool get_list_value (std::string const &group, std::string const &key, priority priority, C< T > &value) const
 Get a key value as a list.
template<typename T>
void set_value (std::string const &group, std::string const &key, T const &value)
 Set a key value.
template<typename T>
void set_value (std::string const &group, std::string const &key, T const &value, std::string const &comment)
 Set a key value.
template<typename T, template< typename T > class C>
void set_list_value (std::string const &group, std::string const &key, C< T > const &value)
 Set a key value from a list.
template<typename T, template< typename T > class C>
void set_list_value (std::string const &group, std::string const &key, C< T > const &value, std::string const &comment)
 Set a key value from a list.
void remove_group (std::string const &group)
 Remove a group.
void remove_key (std::string const &group, std::string const &key)
 Remove a key.
keyfileoperator+= (keyfile const &rhs)
 Add a keyfile to the keyfile.

Private Types

typedef std::tr1::tuple< std::string,
std::string, std::string > 
item_type
 Key-value-comment tuple.
typedef std::map< std::string,
item_type
item_map_type
 Map between key name and key-value-comment tuple.
typedef std::tr1::tuple< std::string,
item_map_type, std::string > 
group_type
 Group-items-comment tuple.
typedef std::map< std::string,
group_type
group_map_type
 Map between group name and group-items-comment tuple.

Private Member Functions

const group_typefind_group (std::string const &group) const
 Find a group by it's name.
group_typefind_group (std::string const &group)
 Find a group by it's name.
const item_typefind_item (std::string const &group, std::string const &key) const
 Find a key by it's group and name.
item_typefind_item (std::string const &group, std::string const &key)
 Find a key by it's group and name.
void check_priority (std::string const &group, std::string const &key, priority priority, bool valid) const
 Check if a key is missing or present when not permitted.

Static Private Member Functions

static void print_comment (std::string const &comment, std::ostream &stream)
 Print a comment to a stream.

Private Attributes

group_map_type groups
 The top-level groups.
char separator
 The separator used as a list item delimiter.

Friends

keyfile operator+ (keyfile const &lhs, keyfile const &rhs)
 Add a keyfile to the keyfile.
template<class charT, class traits>
std::basic_istream< charT,
traits > & 
operator>> (std::basic_istream< charT, traits > &stream, keyfile &kf)
 keyfile initialisation from an istream.
template<class charT, class traits>
std::basic_ostream< charT,
traits > & 
operator<< (std::basic_ostream< charT, traits > &stream, keyfile const &kf)
 keyfile output to an ostream.

Detailed Description

Configuration file parser.

This class loads an INI-style configuration file from a file or stream. The format is documented in schroot.conf(5). It is based upon the Glib GKeyFile class, which it is intended to replace.


Member Typedef Documentation

typedef runtime_error_custom<keyfile> sbuild::keyfile::error
 

Exception type.

typedef std::map<std::string,group_type> sbuild::keyfile::group_map_type [private]
 

Map between group name and group-items-comment tuple.

typedef std::tr1::tuple<std::string,item_map_type,std::string> sbuild::keyfile::group_type [private]
 

Group-items-comment tuple.

typedef std::map<std::string,item_type> sbuild::keyfile::item_map_type [private]
 

Map between key name and key-value-comment tuple.

typedef std::tr1::tuple<std::string,std::string,std::string> sbuild::keyfile::item_type [private]
 

Key-value-comment tuple.


Member Enumeration Documentation

enum sbuild::keyfile::priority
 

Configuration parameter priority.

Enumerator:
PRIORITY_OPTIONAL  The parameter is optional.
PRIORITY_REQUIRED  The parameter is required.
PRIORITY_DISALLOWED  The parameter is not allowed in this context.
PRIORITY_DEPRECATED  The parameter is deprecated, but functional.
PRIORITY_OBSOLETE  The parameter is obsolete, and not functional.


Constructor & Destructor Documentation

keyfile::keyfile  ) 
 

The constructor.

keyfile::keyfile std::string const &  file  ) 
 

The constructor.

Parameters:
file the file to load the configuration from.

keyfile::keyfile std::istream &  stream  ) 
 

The constructor.

Parameters:
stream the stream to load the configuration from.

keyfile::~keyfile  )  [virtual]
 

The destructor.


Member Function Documentation

void keyfile::check_priority std::string const &  group,
std::string const &  key,
priority  priority,
bool  valid
const [private]
 

Check if a key is missing or present when not permitted.

Parameters:
group the group the key is in.
key the key to get.
priority the key priority.
valid true if key exists, false if not existing.

keyfile::group_type * keyfile::find_group std::string const &  group  )  [private]
 

Find a group by it's name.

Parameters:
group the group to find.
Returns:
the group, or 0 if not found.

const keyfile::group_type * keyfile::find_group std::string const &  group  )  const [private]
 

Find a group by it's name.

Parameters:
group the group to find.
Returns:
the group, or 0 if not found.

keyfile::item_type * keyfile::find_item std::string const &  group,
std::string const &  key
[private]
 

Find a key by it's group and name.

Parameters:
group the group the key is in.
key the key to find
Returns:
the key, or 0 if not found.

const keyfile::item_type * keyfile::find_item std::string const &  group,
std::string const &  key
const [private]
 

Find a key by it's group and name.

Parameters:
group the group the key is in.
key the key to find
Returns:
the key, or 0 if not found.

std::string keyfile::get_comment std::string const &  group,
std::string const &  key
const
 

Get a key comment.

Parameters:
group the group to find.
key the key to find.
Returns:
the comment.

std::string keyfile::get_comment std::string const &  group  )  const
 

Get a group comment.

Parameters:
group the group to find.
Returns:
the comment.

string_list keyfile::get_groups  )  const
 

Get a list of groups.

Returns:
a list of groups in the keyfile. If no groups exist, the list will be empty.

string_list keyfile::get_keys std::string const &  group  )  const
 

Get a list of keys in a group.

Parameters:
group the group to use.
Returns:
a list of keys in a group. If no keys exist in the group, or the group does not exist, the list will be empty.

template<typename T, template< typename T > class C>
bool sbuild::keyfile::get_list_value std::string const &  group,
std::string const &  key,
priority  priority,
C< T > &  value
const [inline]
 

Get a key value as a list.

If the value does not exist, is deprecated or obsolete, warn appropriately.

Parameters:
group the group the key is in.
key the key to get.
priority the priority of the option.
value the list value to store the key's value in. The value type must be settable from an istream and be copyable. The list must be a container with a standard insert method.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

template<typename T, template< typename T > class C>
bool sbuild::keyfile::get_list_value std::string const &  group,
std::string const &  key,
C< T > &  value
const [inline]
 

Get a key value as a list.

Parameters:
group the group the key is in.
key the key to get.
value the list value to store the key's value in. The value type must be settable from an istream and be copyable. The list must be a container with a standard insert method.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

Here is the call graph for this function:

bool keyfile::get_locale_string std::string const &  group,
std::string const &  key,
std::string const &  locale,
priority  priority,
std::string &  value
const
 

Get a localised key string value for a specific locale.

If the value does not exist, is deprecated or obsolete, warn appropriately.

Parameters:
group the group the key is in.
key the key to get.
locale the locale to use.
priority the priority of the option.
value the string to store the key's localised value in.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

bool keyfile::get_locale_string std::string const &  group,
std::string const &  key,
std::string const &  locale,
std::string &  value
const
 

Get a localised key string value for a specific locale.

Parameters:
group the group the key is in.
key the key to get.
locale the locale to use.
value the string to store the key's localised value in.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

bool keyfile::get_locale_string std::string const &  group,
std::string const &  key,
priority  priority,
std::string &  value
const
 

Get a localised key string value.

If the value does not exist, is deprecated or obsolete, warn appropriately.

Parameters:
group the group the key is in.
key the key to get.
priority the priority of the option.
value the string to store the key's localised value in.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

bool keyfile::get_locale_string std::string const &  group,
std::string const &  key,
std::string &  value
const
 

Get a localised key string value.

Parameters:
group the group the key is in.
key the key to get.
value the string to store the key's localised value in.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

template<typename T>
bool sbuild::keyfile::get_value std::string const &  group,
std::string const &  key,
priority  priority,
T &  value
const [inline]
 

Get a key value.

If the value does not exist, is deprecated or obsolete, warn appropriately.

Parameters:
group the group the key is in.
key the key to get.
priority the priority of the option.
value the value to store the key's value in. This must be settable from an istream and be copyable.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

Here is the call graph for this function:

template<typename T>
bool sbuild::keyfile::get_value std::string const &  group,
std::string const &  key,
T &  value
const [inline]
 

Get a key value.

Parameters:
group the group the key is in.
key the key to get.
value the value to store the key's value in. This must be settable from an istream and be copyable.
Returns:
true if the key was found, otherwise false (in which case value will be unchanged).

Here is the call graph for this function:

bool keyfile::has_group std::string const &  group  )  const
 

Check if a group exists.

Parameters:
group the group to check for.
Returns:
true if the group exists, otherwise false.

bool keyfile::has_key std::string const &  group,
std::string const &  key
const
 

Check if a key exists.

Parameters:
group the group the key is in.
key the key to check for.
Returns:
true if the key exists, otherwise false.

keyfile & keyfile::operator+= keyfile const &  rhs  ) 
 

Add a keyfile to the keyfile.

Parameters:
rhs the keyfile to add.
Returns:
the modified keyfile.

void keyfile::print_comment std::string const &  comment,
std::ostream &  stream
[static, private]
 

Print a comment to a stream.

The comment will have hash ('#') marks printed at the start of each line.

Parameters:
comment the comment to print.
stream the stream to output to.

void keyfile::remove_group std::string const &  group  ) 
 

Remove a group.

Parameters:
group the group to remove.

void keyfile::remove_key std::string const &  group,
std::string const &  key
 

Remove a key.

Parameters:
group the group the key is in.
key the key to remove.

void keyfile::set_group std::string const &  group,
std::string const &  comment
 

Set a group.

The group will be created (and the comment set) only if the group does not already exist.

Parameters:
group the group to set.
comment the comment to set.

template<typename T, template< typename T > class C>
void sbuild::keyfile::set_list_value std::string const &  group,
std::string const &  key,
C< T > const &  value,
std::string const &  comment
[inline]
 

Set a key value from a list.

Parameters:
group the group the key is in.
key the key to set.
value the list value to get the key's value from. The value type must allow output to an ostream. The list must be a container with a standard forward iterator.
comment the comment for this key.

template<typename T, template< typename T > class C>
void sbuild::keyfile::set_list_value std::string const &  group,
std::string const &  key,
C< T > const &  value
[inline]
 

Set a key value from a list.

Parameters:
group the group the key is in.
key the key to set.
value the list value to get the key's value from. The value type must allow output to an ostream. The list must be a container with a standard forward iterator.

template<typename T>
void sbuild::keyfile::set_value std::string const &  group,
std::string const &  key,
T const &  value,
std::string const &  comment
[inline]
 

Set a key value.

Parameters:
group the group the key is in.
key the key to set.
value the value to get the key's value from. This must
comment the comment for this key. allow output to an ostream.

template<typename T>
void sbuild::keyfile::set_value std::string const &  group,
std::string const &  key,
T const &  value
[inline]
 

Set a key value.

Parameters:
group the group the key is in.
key the key to set.
value the value to get the key's value from. This must allow output to an ostream.


Friends And Related Function Documentation

keyfile operator+ keyfile const &  lhs,
keyfile const &  rhs
[friend]
 

Add a keyfile to the keyfile.

Parameters:
lhs the keyfile to add to.
rhs the values to add.
Returns:
the new keyfile.

template<class charT, class traits>
std::basic_ostream<charT,traits>& operator<< std::basic_ostream< charT, traits > &  stream,
keyfile const &  kf
[friend]
 

keyfile output to an ostream.

template<class charT, class traits>
std::basic_istream<charT,traits>& operator>> std::basic_istream< charT, traits > &  stream,
keyfile kf
[friend]
 

keyfile initialisation from an istream.


Member Data Documentation

group_map_type sbuild::keyfile::groups [private]
 

The top-level groups.

char sbuild::keyfile::separator [private]
 

The separator used as a list item delimiter.


The documentation for this class was generated from the following files:
Generated on Sun Mar 19 12:08:56 2006 for schroot by  doxygen 1.4.6