Config Class Reference

A config file reader. More...

#include <edelib/Config.h>

Inheritance diagram for Config:

DesktopFile

List of all members.

Public Member Functions

 Config ()
 ~Config ()
bool load (const char *fname)
bool save (const char *fname)
 operator bool (void) const
void clear (void)
bool get (const char *section, const char *key, char *ret, unsigned int size)
bool get_localized (const char *section, const char *key, char *ret, unsigned int size)
bool get_allocated (const char *section, const char *key, char **ret, unsigned int &retsize)
bool get (const char *section, const char *key, bool &ret, bool dfl=false)
bool get (const char *section, const char *key, int &ret, int dfl=0)
bool get (const char *section, const char *key, float &ret, float dfl=0)
bool get (const char *section, const char *key, long &ret, long dfl=0)
bool get (const char *section, const char *key, double &ret, double dfl=0)
bool get (const char *section, const char *key, char &ret, char dfl=0)
void set (const char *section, const char *key, char *val)
void set (const char *section, const char *key, const char *val)
void set_localized (const char *section, const char *key, char *val)
void set_localized (const char *section, const char *key, const char *val)
void set (const char *section, const char *key, bool val)
void set (const char *section, const char *key, int val)
void set (const char *section, const char *key, long val)
void set (const char *section, const char *key, float val)
void set (const char *section, const char *key, double val)
bool exist (const char *section)
bool key_exist (const char *section, const char *key)
unsigned int num_sections (void)
unsigned int line (void)
int error (void)
const char * strerror (void)
const char * strerror (int code)


Detailed Description

A config file reader.

This class is aimed for reading and storing classic INI files in form:

  # this is a comment
  [section1]
   item = value

  [section2]
   item = value
Section names can be words or multiple words separated by spaces. All leading and following spaces will be trimmed, like:
  [ some long section ] -> "some long section"

Duplicate sections will be merged in one (later when used as output), but in case of duplicate key lines, only last will be considered. Like in this sample:

  [my section]
    idea = bad   <- ignored
    idea = good

In above case, using

   get("my section", "idea", &val, valsz) 
will set val to "good".

During reading phase, file is checked is malformed and if that was true, CONF_ERR_BAD will be returned as error code. Target line can be inspected with line() function.

Althought there are various INI specifications, currently supported one is very basic, without subsections support, like:

  [parent]
    item = value
  [parent/child]
    item = value

Later option can be checked like:

   get("parent/child", "item", &val, valsz);

Todo:
don't allow [] sections

What Config as localized keys should read: LC_MESSAGES or LANG ??? I'm using for now LANG, but fd.o people said it should be LC_MESSAGES. Inspect this.


Constructor & Destructor Documentation

Config (  ) 

Constructor

~Config (  ) 

Destructor


Member Function Documentation

void clear ( void   ) 

Clear all internal data.

int error ( void   ) 

Get error code.

This can be used to inspect why file can't be read.

Returns:
one of ConfigErrors values

bool exist ( const char *  section  ) 

Check if section exist.

Returns:
true if exist, or false if not.

bool get ( const char *  section,
const char *  key,
char &  ret,
char  dfl = 0 
)

Get char value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
double &  ret,
double  dfl = 0 
)

Get double value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
long &  ret,
long  dfl = 0 
)

Get long value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
float &  ret,
float  dfl = 0 
)

Get float value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
int &  ret,
int  dfl = 0 
)

Get int value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
bool &  ret,
bool  dfl = false 
)

Get bool value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret where to place returned value
dfl default value, in case real value not found

bool get ( const char *  section,
const char *  key,
char *  ret,
unsigned int  size 
)

Get char* value from named section.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret buffer to copy returned value
size size of buffer

bool get_allocated ( const char *  section,
const char *  key,
char **  ret,
unsigned int &  retsize 
)

This function is the same as get() with char*, except returned data is allocated. Use must call delete[] on returned data. If this function returns false, returned data will not be allocated and retsize will be 0.

Returns:
true if value exists
Parameters:
section name of target section
key name of target key
ret is allocated by this function ad returned value will be copied in it
retsize size of buffer

bool get_localized ( const char *  section,
const char *  key,
char *  ret,
unsigned int  size 
)

Get localized character data. This method behaves the same as get() with character data, except it will search first keys with locale tags, which coresponds system locale settings. This keys looks like:

   # localized value
   Key[de] = localized value in german

   # unlocalized value
   Key = some value

Function will try to find out current locale settings and if fails, of specific key with locale tag does not exist, it will try with ordinary unlocalized value.

Returns:
true if value exist
Parameters:
section name of target section
key name of target key
ret buffer to copy returned value
size size of buffer

bool key_exist ( const char *  section,
const char *  key 
)

Check if key exists in given section.

Returns:
true if exists, of false if not.

unsigned int line ( void   ) 

Get current line number.

This function can be used if file is malformed

Returns:
problematic line

bool load ( const char *  fname  ) 

Load file. Config's internal content will be cleared.

Returns:
true if file reading was ok, otherwise false.
Parameters:
fname path to config file.

Reimplemented in DesktopFile.

unsigned int num_sections ( void   ) 

Return number of sections.

Returns:
number of sections.

operator bool ( void   )  const [inline]

Validate is previous operation was succesfull.

This is an shorthand for various error() checks, so it can be used:

   Config c;
   c.load("/no/file");
   if(!c) // do something smart

Returns:
true if everything is fine, or false

Reimplemented in DesktopFile.

References edelib::CONF_SUCCESS.

bool save ( const char *  fname  ) 

Save content to the file.

Returns:
true if file saving was ok, otherwise false.
Parameters:
fname path to store config file.

Reimplemented in DesktopFile.

void set ( const char *  section,
const char *  key,
double  val 
)

Set double value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
float  val 
)

Set float value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
long  val 
)

Set long value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
int  val 
)

Set int value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
bool  val 
)

Set bool value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
const char *  val 
)

Set const char* value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set ( const char *  section,
const char *  key,
char *  val 
)

Set char* value in named section. If section, or key does not exists, they will be created.

Parameters:
section name of target section
key name of target key
val value to store within key

void set_localized ( const char *  section,
const char *  key,
const char *  val 
)

Set const char* value for localized named section. Description for get_localized() applies here too.

Parameters:
section name of target section
key name of target key
val value to store within key

void set_localized ( const char *  section,
const char *  key,
char *  val 
)

Set char* value for localized named section. Description for get_localized() applies here too.

Parameters:
section name of target section
key name of target key
val value to store within key

const char* strerror ( int  code  ) 

Interpret parameter and return associated error code.

Returns:
string name for error code
Parameters:
code one of ConfigErrors values

const char* strerror ( void   ) 

Get error in string form.

Returns:
current error in string form


The documentation for this class was generated from the following file:

Generated on Thu Dec 24 05:12:27 2009 for edelib by  doxygen 1.5.9