NAME

ACE_Configuration - Base class for configuration databases

SYNOPSIS

#include <ace/Configuration.h>

class ACE_Configuration { public: enum VALUETYPE { STRING, INTEGER, BINARY, INVALID }; virtual ~ACE_Configuration (void); virtual const ACE_Configuration_Section_Key& root_section (void); virtual int open_section ( const ACE_Configuration_Section_Key &base, const TCHAR *sub_section, int create, ACE_Configuration_Section_Key& result ) = 0; virtual int remove_section ( const ACE_Configuration_Section_Key &key, const TCHAR *sub_section, int recursive ) = 0; virtual int enumerate_values ( const ACE_Configuration_Section_Key& key, int index, ACE_TString& name, VALUETYPE& type ) = 0; virtual int enumerate_sections ( const ACE_Configuration_Section_Key& key, int index, ACE_TString& name ) = 0; virtual int set_string_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, const ACE_TString& value ) = 0; virtual int set_integer_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, u_int value ) = 0; virtual int set_binary_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, const void* data, u_int length ) = 0; virtual int get_string_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, ACE_TString& value ) = 0; virtual int get_integer_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, u_int& value ) = 0; virtual int get_binary_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, void*& data, u_int& length ) = 0; virtual int remove_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name ) = 0; int expand_path ( const ACE_Configuration_Section_Key& key, const ACE_TString& path_in, ACE_Configuration_Section_Key& key_out, int create = 1 ); virtual int export_config (const TCHAR* filename); virtual int import_config (const TCHAR* filename); protected: ACE_Configuration (void); ACE_Section_Key_Internal* get_internal_key ( const ACE_Configuration_Section_Key& key ); int validate_name (const TCHAR* name); int export_section ( const ACE_Configuration_Section_Key& section, const ACE_TString& path, FILE* out ); ACE_Configuration (const ACE_Configuration& rhs); ACE_Configuration& operator= (const ACE_Configuration& rhs); ACE_Configuration_Section_Key root_; };

DESCRIPTION

The ACE configuration API provides a portable abstraction for program configuration. The API supports a tree based hierarchy of configuration sections. Each section contains other sections or values. Values may contain string, unsigned integer and binary data.

PUBLIC MEMBERS

virtual ~ACE_Configuration (void);

virtual const ACE_Configuration_Section_Key& root_section (void);

virtual int open_section (
    const ACE_Configuration_Section_Key &base,
    const TCHAR *sub_section,
    int create,
    ACE_Configuration_Section_Key& result
    ) = 0;

virtual int remove_section (
    const ACE_Configuration_Section_Key &key,
    const TCHAR *sub_section,
    int recursive
    ) = 0;

virtual int enumerate_values (
    const ACE_Configuration_Section_Key& key,
    int index,
    ACE_TString& name,
    VALUETYPE& type
    ) = 0;

virtual int enumerate_sections (
    const ACE_Configuration_Section_Key& key,
    int index,
    ACE_TString& name
    ) = 0;

virtual int set_string_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    const ACE_TString& value
    ) = 0;

virtual int set_integer_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    u_int value
    ) = 0;

virtual int set_binary_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    const void* data,
    u_int length
    ) = 0;

virtual int get_string_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    ACE_TString& value
    ) = 0;

virtual int get_integer_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    u_int& value
    ) = 0;

virtual int get_binary_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name,
    void*& data,
    u_int& length
    ) = 0;

virtual int remove_value (
    const ACE_Configuration_Section_Key& key,
    const TCHAR* name
    ) = 0;

int expand_path (
    const ACE_Configuration_Section_Key& key,
    const ACE_TString& path_in,
    ACE_Configuration_Section_Key& key_out,
    int create = 1
    );

virtual int export_config (const TCHAR* filename);

virtual int import_config (const TCHAR* filename);

PROTECTED MEMBERS

ACE_Configuration (void);

ACE_Section_Key_Internal* get_internal_key (
    const ACE_Configuration_Section_Key& key
    );

int validate_name (const TCHAR* name);

int export_section (
    const ACE_Configuration_Section_Key& section,
    const ACE_TString& path,
    FILE* out
    );
    Used when exporting a configuration to a file

ACE_Configuration (const ACE_Configuration& rhs);

ACE_Configuration& operator= (const ACE_Configuration& rhs);

ACE_Configuration_Section_Key root_;

AUTHOR

Chris Hafey chris@stentorsoft.com

TODO

- Add locking for thread safety. - Need to investigate what happens if memory mapped file gets mapped to a location different than it was created with. - Implement export and import of binary values - Add dynamic buffer when importing. currently it will not allow importing of values greater than a fixed ammount (4096 bytes) - Replace unsigned int with a type that is fixed accross platforms.

LIBRARY

ace