diff options
Diffstat (limited to 'ace/Configuration.h')
-rw-r--r-- | ace/Configuration.h | 690 |
1 files changed, 0 insertions, 690 deletions
diff --git a/ace/Configuration.h b/ace/Configuration.h deleted file mode 100644 index a5151645e78..00000000000 --- a/ace/Configuration.h +++ /dev/null @@ -1,690 +0,0 @@ -/* -*- C++ -*- */ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// ace -// -// = FILENAME -// Configuration.h -// -// = AUTHOR -// Chris Hafey <chris@stentorsoft.com> -// -// = 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. -// -// = 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. -// - 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. -// -// ============================================================================ - -#ifndef ACE_CONFIGURATION_H -#define ACE_CONFIGURATION_H -#include "ace/pre.h" - -#include "ace/ACE.h" -#include "ace/SString.h" -#include "ace/Hash_Map_With_Allocator_T.h" -#include "ace/Malloc.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -// configurable parameters - -#if !defined (ACE_CONFIG_SECTION_INDEX) -# define ACE_CONFIG_SECTION_INDEX "Config_Section_Index" -#endif /* ! ACE_CONFIG_SECTION_INDEX */ - -#if !defined (ACE_DEFAULT_CONFIG_SECTION_SIZE) -#define ACE_DEFAULT_CONFIG_SECTION_SIZE 16 -#endif /* ACE_DEFAULT_CONFIG_SECTION_SIZE */ - -class ACE_Export ACE_Section_Key_Internal -{ - // = TITLE - // A base class for internal handles to section keys for - // configuration implementations - // - // = DESCRIPTION - // Implementations subclass this base class to represent a - // section key. -public: - virtual ~ACE_Section_Key_Internal (void); - // Virtual destructor, make sure descendants are virtual! - - virtual int add_ref (void); - // Increment reference count - - virtual int dec_ref (void); - // Decrement reference count. Will delete this if count gets to 0 -protected: - ACE_Section_Key_Internal (void); - ACE_Section_Key_Internal (const ACE_Section_Key_Internal& rhs); - ACE_Section_Key_Internal& operator= (ACE_Section_Key_Internal& rhs); - - u_int ref_count_; -}; - -class ACE_Export ACE_Configuration_Section_Key -{ - // = TITLE - // Referenced counted wrapper for <ACE_Section_Key_Internal>. - // - // = DESCRIPTION - // Reference counted wrapper class for the abstract internal - // section key. A user gets one of these to represent a section - // in the configuration database. - friend class ACE_Configuration; -public: - ACE_Configuration_Section_Key (void); - // Default ctor - - ACE_EXPLICIT ACE_Configuration_Section_Key (ACE_Section_Key_Internal *key); - // ctor based on a pointer to a concrete internal key, does an - // add_ref on <key>. - - ACE_Configuration_Section_Key (const ACE_Configuration_Section_Key &rhs); - // Copy ctor, does an add_ref on rhs.key_. - - ~ACE_Configuration_Section_Key (void); - // destructor, does a <dec_ref> on <key_>. - - ACE_Configuration_Section_Key & - operator= (const ACE_Configuration_Section_Key &rhs); - // assignment operator, does a <dec_ref> on <key_> and <add_ref> to - // <rhs.key_> -private: - ACE_Section_Key_Internal *key_; -}; - -class ACE_Export ACE_Configuration -{ - // = TITLE - // Base class for configuration databases - // - // = DESCRIPTION - // This class provides an interface for configuration databases. -public: - enum VALUETYPE - { - STRING, - INTEGER, - BINARY, - INVALID - }; - // Enumeration for the various types of values we can store. - - virtual ~ACE_Configuration (void); - // destructor - - virtual const ACE_Configuration_Section_Key& root_section (void); - // Returns the root section of this configuration. - - virtual int open_section (const ACE_Configuration_Section_Key &base, - const ACE_TCHAR *sub_section, - int create, - ACE_Configuration_Section_Key& result) = 0; - // Finds a <sub_section> in <base> and places the resulting key in - // <result>. If create is non zero, the sub_section will be created - // if it doesn't exist - - virtual int remove_section (const ACE_Configuration_Section_Key &key, - const ACE_TCHAR *sub_section, - int recursive) = 0; - // Removes the <sub_section> from <key>. If recursive is non zero, - // any subkeys below <sub_section> are remove as well. - - virtual int enumerate_values (const ACE_Configuration_Section_Key& key, - int index, - ACE_TString& name, - VALUETYPE& type) = 0; - // method to enumerate through the <name> and <type> of values in a - // <key>. To begin iteration, <index> must be zero. to continue - // iteration, invoke enumerate_values again while incrementing - // index. Each iteration will return the <name> of the value and - // its <type>. This method returns 0 on success, <0 on error and 1 - // when there are no more values to iterate through. Note - you may - // not delete or add values while enumerating. If you need to do - // this, you start the enumeration over again. - - virtual int enumerate_sections (const ACE_Configuration_Section_Key& key, - int index, ACE_TString& name) = 0; - // method to enumerate through the <name> subsections in <key>. To - // begin iteration, <index> must zero. to continue iteration, invoke - // enumerate_sections again while incrementing index. Each - // iteration will return the <name> of the sub section. This method - // returns 0 on success, <0 on error and 1 when there are no more - // subsections to iterate through. Note - you may not delete or add - // values while enumerating. If you need to do this, you start the - // enumeration over again. - - virtual int set_string_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - const ACE_TString& value) = 0; - // sets the value in <key> with <name> to a string of <value> - - virtual int set_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int value) = 0; - // sets the value in <key> with <name> to an integer of <value> - - virtual int set_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - const void* data, - u_int length) = 0; - // sets the value in <key> with <name> to binary data of <data> with - // <length>. - - virtual int get_string_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - ACE_TString& value) = 0; - // gets the string value of <name> from <key> and places it in - // <value>. Returns non zero on error (if value is not a string). - - virtual int get_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int& value) = 0; - // gets the integer value of <name> from <key> and places it in - // <value>. Returns non zero on error (if value is not an integer). - - virtual int get_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - void*& data, - u_int& length) = 0; - // gets the binary value of <name> from <key> and places a copy in - // <data> and sets <length> to the length of the data. caller is - // responsible for freeing <data>. Returns non zero on error (if - // value is not binary). - - virtual int find_value(const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - VALUETYPE& type) = 0; - // checks to see if an entry of <name> is in <key> and places the - // data type in <type>. Returns 0 on success (entry is found), - // -1 on error - - - virtual int remove_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name) = 0; - // Removes the the value <name> from <key>. returns non zero on - // error. - - int expand_path (const ACE_Configuration_Section_Key& key, - const ACE_TString& path_in, - ACE_Configuration_Section_Key& key_out, - int create = 1); - // Expands <path_in> to <key_out> from <key>. If create is true, - // the subsections are created. Returns 0 on success, non zero on - // error The path consists of sections separated by the backslash - // '\'. - - virtual int export_config (const ACE_TCHAR* filename); - // Exports the configuration database to filename. If <filename> is - // alredy present, it is overwritten. - - virtual int import_config (const ACE_TCHAR* filename); - // Imports the configuration database from filename. Any existing - // data is not removed. - -protected: - ACE_Configuration (void); - // Default ctor - - ACE_Section_Key_Internal* get_internal_key - (const ACE_Configuration_Section_Key& key); - // resolves the internal key from a section key - - int validate_name (const ACE_TCHAR* name); - // tests to see if <name> is valid. <name> must be < 255 characters - // and not contain the path separator '\', brackets [] or = (maybe - // just restrict to alphanumeric?) returns non zero if name is not - // valid - - int export_section (const ACE_Configuration_Section_Key& section, - const ACE_TString& path, - FILE* out); - // Used when exporting a configuration to a file - - // Not used - ACE_Configuration (const ACE_Configuration& rhs); - ACE_Configuration& operator= (const ACE_Configuration& rhs); - ACE_Configuration_Section_Key root_; -}; - -#if defined (ACE_WIN32) - -class ACE_Export ACE_Section_Key_Win32 : public ACE_Section_Key_Internal -{ - // = TITLE - // The Win32 registry implementation of an internal section key. - // - // = DESCRIPTION - // Holds the HKEY for a section (registry key). -public: - ACE_Section_Key_Win32 (HKEY hKey); - // constructor based on an HKEY - - HKEY hKey_; - -protected: - virtual ~ACE_Section_Key_Win32 (void); - // destructor - invokes <RegCloseKey> - - // Not used - ACE_Section_Key_Win32 (const ACE_Section_Key_Win32& rhs); - ACE_Section_Key_Win32& operator= (const ACE_Section_Key_Win32& rhs); -}; - -class ACE_Export ACE_Configuration_Win32Registry : public ACE_Configuration -{ - // = TITLE - // The win32 registry implementation of a configuration database - // - // = DESCRIPTION - // The win32 implementation basically makes calls through to the - // registry functions. The API is very similar so very little - // work must be done -public: - - ACE_EXPLICIT ACE_Configuration_Win32Registry (HKEY hKey); - // constructor for registry configuration database. hKey is the - // base registry key to attach to. This class takes ownership of - // hKey, it will invoke <RegCloseKey> on it upon destruction. - - virtual ~ACE_Configuration_Win32Registry (void); - // destructor - - virtual int open_section (const ACE_Configuration_Section_Key& base, - const ACE_TCHAR* sub_section, - int create, - ACE_Configuration_Section_Key& result); - - virtual int remove_section (const ACE_Configuration_Section_Key& key, - const ACE_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 ACE_TCHAR* name, - const ACE_TString& value); - - virtual int set_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int value); - - virtual int set_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - const void* data, - u_int length); - - virtual int get_string_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - ACE_TString& value); - - virtual int get_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int& value); - - virtual int get_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - void*& data, - u_int& length); - - virtual int find_value(const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - VALUETYPE& type); - - virtual int remove_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name); - // Removes the the value <name> from <key>. returns non zero on error - - static HKEY resolve_key (HKEY hKey, - const ACE_TCHAR* path, - int create = 1); - // This method traverses <path> through <hKey>. It is useful when - // you want the HKEY for a specific registry key, especially when - // initializing this implementation. Caller is responsible for - // closeing this key when it is no longer used. If create is 1 - // (default) the keys are create if they don't already exist. - // Returns 0 on error - -protected: - - int load_key (const ACE_Configuration_Section_Key& key, HKEY& hKey); - // Gets the HKEY for a configuration section - - // Not used - ACE_Configuration_Win32Registry (void); - ACE_Configuration_Win32Registry (const ACE_Configuration_Win32Registry& rhs); - ACE_Configuration_Win32Registry& operator= (const ACE_Configuration_Win32Registry& rhs); -}; -#endif /* ACE_WIN32 */ - -// ACE_Allocator version - -typedef ACE_Allocator_Adapter <ACE_Malloc <ACE_MMAP_MEMORY_POOL, - ACE_SYNCH_MUTEX> > - PERSISTENT_ALLOCATOR; -typedef ACE_Allocator_Adapter <ACE_Malloc <ACE_LOCAL_MEMORY_POOL, - ACE_SYNCH_MUTEX> > - HEAP_ALLOCATOR; - -class ACE_Export ACE_Configuration_ExtId -{ - // = TITLE - // External ID for the section and value hash - // - // = DESCRIPTION - // Contains a pointer to the section or value name. -public: - ACE_Configuration_ExtId (void); - // defeault ctor - - ACE_EXPLICIT ACE_Configuration_ExtId (const ACE_TCHAR* name); - // named constructor - - ACE_Configuration_ExtId (const ACE_Configuration_ExtId& rhs); - // copy ctor - - ~ACE_Configuration_ExtId (void); - // destructor - - ACE_Configuration_ExtId& operator= (const ACE_Configuration_ExtId& rhs); - // assignment operator - - int operator== (const ACE_Configuration_ExtId &rhs) const; - // Equality comparison operator (must match name_). - - int operator!= (const ACE_Configuration_ExtId &rhs) const; - // Inequality comparison operator. - - void free (ACE_Allocator* allocator); - // Frees the name of the value. needed since we don't know the - // allocator name_ was created in - - u_long hash (void) const; - // <hash> function is required in order for this class to be usable by - // ACE_Hash_Map_Manager. - - // = Data members. - - const ACE_TCHAR * name_; - - // Accessors - const ACE_TCHAR *name (void); -}; - -typedef ACE_Hash_Map_With_Allocator<ACE_Configuration_ExtId, int> - SUBSECTION_MAP; -typedef ACE_Hash_Map_Manager_Ex<ACE_Configuration_ExtId, - int, - ACE_Hash<ACE_Configuration_ExtId>, - ACE_Equal_To<ACE_Configuration_ExtId>, - ACE_Null_Mutex> - SUBSECTION_HASH; -typedef ACE_Hash_Map_Entry<ACE_Configuration_ExtId, int> - SUBSECTION_ENTRY; - -class ACE_Export ACE_Configuration_Value_IntId -{ - // = TITLE - // The section hash table internal value class - // - // = DESCRIPTION - // This class is present as the internal portion of a section's - // value hash table It may store string, integer or binary data. -public: - ACE_Configuration_Value_IntId (void); - // default constructor - - ACE_EXPLICIT ACE_Configuration_Value_IntId (ACE_TCHAR* string); - // string constructor, takes ownership of string - - ACE_EXPLICIT ACE_Configuration_Value_IntId (u_int integer); - // integer constructor - - ACE_Configuration_Value_IntId (void* data, u_int length); - // binary constructor, takes ownership of data - - ACE_Configuration_Value_IntId (const ACE_Configuration_Value_IntId& rhs); - // copy ctor - - ~ACE_Configuration_Value_IntId (void); - // destructor - - ACE_Configuration_Value_IntId& operator= ( - const ACE_Configuration_Value_IntId& rhs); - // Assignment operator - - void free (ACE_Allocator* allocator); - - // = Data members. - - ACE_Configuration::VALUETYPE type_; - void* data_; - // points to the string value or binary data or IS the integer - // (XXX need to change this since sizeof (u_int) is - // not the same accross different platforms) - u_int length_; - // Length is only used when type_ == BINARY -}; - -typedef ACE_Hash_Map_With_Allocator<ACE_Configuration_ExtId, - ACE_Configuration_Value_IntId> - VALUE_MAP; -typedef ACE_Hash_Map_Manager_Ex<ACE_Configuration_ExtId, - ACE_Configuration_Value_IntId, - ACE_Hash<ACE_Configuration_ExtId>, - ACE_Equal_To<ACE_Configuration_ExtId>, - ACE_Null_Mutex> - VALUE_HASH; -typedef ACE_Hash_Map_Entry<ACE_Configuration_ExtId, - ACE_Configuration_Value_IntId> - VALUE_ENTRY; - -class ACE_Export ACE_Configuration_Section_IntId -{ - // = TITLE - // The internal ID for a section hash table - // - // = DESCRIPTION - // Contains a hash table containing value name/values -public: - ACE_Configuration_Section_IntId (void); - // default ctor - - ACE_EXPLICIT ACE_Configuration_Section_IntId (VALUE_MAP* value_hash_map, - SUBSECTION_MAP* section_hash_map); - // named ctor - - ACE_Configuration_Section_IntId (const ACE_Configuration_Section_IntId& rhs); - // copy ctor - - ~ACE_Configuration_Section_IntId (void); - // destructor - - ACE_Configuration_Section_IntId& operator= ( - const ACE_Configuration_Section_IntId& rhs); - // asignment operator - - void free (ACE_Allocator* allocator); - // frees the hash table and all its values - - // = Data Members. - VALUE_MAP* value_hash_map_; - - SUBSECTION_MAP* section_hash_map_; -}; -typedef ACE_Hash_Map_With_Allocator<ACE_Configuration_ExtId, - ACE_Configuration_Section_IntId> - SECTION_MAP; -typedef ACE_Hash_Map_Manager_Ex<ACE_Configuration_ExtId, - ACE_Configuration_Section_IntId, - ACE_Hash<ACE_Configuration_ExtId>, - ACE_Equal_To<ACE_Configuration_ExtId>, - ACE_Null_Mutex> - SECTION_HASH; -typedef ACE_Hash_Map_Entry<ACE_Configuration_ExtId, - ACE_Configuration_Section_IntId> - SECTION_ENTRY; - -class ACE_Export ACE_Configuration_Section_Key_Heap - : public ACE_Section_Key_Internal -{ - // = TITLE - // Internal section key class for heap based configuration - // database. - // - // = DESCRIPTION - // Contains a value iterator and full path name of section. -public: - ACE_Configuration_Section_Key_Heap (const ACE_TCHAR* path); - // constructor based on the full path of the section - - ACE_TCHAR* path_; - //the path itself - - VALUE_HASH::ITERATOR* value_iter_; - // The value iterator - - SUBSECTION_HASH::ITERATOR* section_iter_; - // The sub section iterator -protected: - virtual ~ACE_Configuration_Section_Key_Heap (void); - // destructor - will delete the iterators - - // Not used - ACE_Configuration_Section_Key_Heap (const ACE_Configuration_Section_Key_Heap& rhs); - ACE_Configuration_Section_Key_Heap& operator= (const ACE_Configuration_Section_Key_Heap& rhs); -}; - -class ACE_Export ACE_Configuration_Heap : public ACE_Configuration -{ - // = TITLE - // The concrete implementation of a allocator based - // configuration database - // - // = DESCRIPTION - // This class uses ACE's Allocators to manage a memory - // representation of a configuraiton database. A persistent heap - // may be used to store configurations persistently -public: - - ACE_Configuration_Heap (void); - // Default ctor - - virtual ~ACE_Configuration_Heap (void); - // destructor - - int open (const ACE_TCHAR* file_name, - void* base_address = ACE_DEFAULT_BASE_ADDR, - int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE); - // opens a configuration based on a file name - - int open (int default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE); - // opens a heap based configuration - - virtual int open_section (const ACE_Configuration_Section_Key& base, - const ACE_TCHAR* sub_section, - int create, ACE_Configuration_Section_Key& result); - - virtual int remove_section (const ACE_Configuration_Section_Key& key, - const ACE_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 ACE_TCHAR* name, - const ACE_TString& value); - - virtual int set_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int value); - - virtual int set_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - const void* data, - u_int length); - - virtual int get_string_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - ACE_TString& value); - - virtual int get_integer_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - u_int& value); - - virtual int get_binary_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - void* &data, - u_int &length); - - virtual int find_value(const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name, - VALUETYPE& type); - - virtual int remove_value (const ACE_Configuration_Section_Key& key, - const ACE_TCHAR* name); - // Removes the the value <name> from <key>. returns non zero on error - -private: - int add_section (const ACE_Configuration_Section_Key& base, - const ACE_TCHAR* sub_section, - ACE_Configuration_Section_Key& result); - // adds a new section - - int create_index (void); - // Helper for the <open> method. - - int create_index_helper (void *buffer); - // Helper for <create_index> method: places hash table into an - // allocated space. - - 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_; -}; - -#include "ace/post.h" -#endif /* ACE_CONFIGURATION_H */ |