NAME

ACE_Configuration_Heap - The concrete implementation of a allocator based configuration database

SYNOPSIS

#include <ace/Configuration.h>

class ACE_Configuration_Heap : public ACE_Configuration { public: ACE_Configuration_Heap (void); virtual ~ACE_Configuration_Heap (void); int open ( const TCHAR* file_name, void* base_address = ACE_DEFAULT_BASE_ADDR, int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE ); int open (int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE); virtual int open_section ( const ACE_Configuration_Section_Key& base, const TCHAR* sub_section, int create, ACE_Configuration_Section_Key& result ); virtual int remove_section ( const ACE_Configuration_Section_Key& key, const TCHAR* sub_section, int recursive ); virtual int enumerate_values ( const ACE_Configuration_Section_Key& key, int Index, ACE_TString& name, VALUETYPE& type ); virtual int enumerate_sections ( const ACE_Configuration_Section_Key& key, int Index, ACE_TString& name ); virtual int set_string_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, const ACE_TString& value ); virtual int set_integer_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, u_int value ); virtual int set_binary_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, const void* data, u_int length ); virtual int get_string_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, ACE_TString& value ); virtual int get_integer_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, u_int& value ); virtual int get_binary_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name, void* &data, u_int &length ); virtual int remove_value ( const ACE_Configuration_Section_Key& key, const TCHAR* name ); private: int add_section ( const ACE_Configuration_Section_Key& base, const TCHAR* sub_section, ACE_Configuration_Section_Key& result ); int create_index (void); int create_index_helper (void *buffer); int value_open_helper (size_t hash_table_size, void *buffer); int section_open_helper (size_t hash_table_size, void *buffer); int load_key ( const ACE_Configuration_Section_Key& key, ACE_TString& name ); int new_section ( const ACE_TString& section, ACE_Configuration_Section_Key& result ); ACE_Configuration_Heap (const ACE_Configuration_Heap& rhs); ACE_Configuration_Heap& operator= ( const ACE_Configuration_Heap& rhs ); ACE_Allocator *allocator_; SECTION_MAP *index_; int default_map_size_; };

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

ACE_Configuration_Heap (void);

virtual ~ACE_Configuration_Heap (void);

int open (
    const TCHAR* file_name,
    void* base_address = ACE_DEFAULT_BASE_ADDR,
    int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE
    );

int open (int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE);

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

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

virtual int enumerate_values (
    const ACE_Configuration_Section_Key& key,
    int Index,
    ACE_TString& name,
    VALUETYPE& type
    );

virtual int enumerate_sections (
    const ACE_Configuration_Section_Key& key,
    int Index,
    ACE_TString& name
    );

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

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

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

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

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

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

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

PRIVATE MEMBERS

int add_section (
    const ACE_Configuration_Section_Key& base,
    const TCHAR* sub_section,
    ACE_Configuration_Section_Key& result
    );

int create_index (void);

int create_index_helper (void *buffer);

int value_open_helper (size_t hash_table_size, void *buffer);

int section_open_helper (size_t hash_table_size, void *buffer);

int load_key (
    const ACE_Configuration_Section_Key& key,
    ACE_TString& name
    );

int new_section (
    const ACE_TString& section,
    ACE_Configuration_Section_Key& result
    );

ACE_Configuration_Heap (const ACE_Configuration_Heap& rhs);

ACE_Configuration_Heap& operator= (const ACE_Configuration_Heap& rhs);

ACE_Allocator *allocator_;

SECTION_MAP *index_;

int default_map_size_;

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