ACE_Configuration_Heap Class Reference

The concrete implementation of a allocator based configuration database. More...

#include <Configuration.h>

Inheritance diagram for ACE_Configuration_Heap:

Inheritance graph
[legend]
Collaboration diagram for ACE_Configuration_Heap:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 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, size_t default_map_size=ACE_DEFAULT_CONFIG_SECTION_SIZE)
 Opens a configuration based on a file name.
int open (size_t 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)
 Removes a named section.
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)
 Sets a string-typed value.
virtual int set_integer_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, u_int value)
 Sets a integer-typed value.
virtual int set_binary_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, const void *data, size_t length)
 Sets a binary-typed value.
virtual int get_string_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, ACE_TString &value)
 Gets a string-typed value.
virtual int get_integer_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, u_int &value)
 Gets an integer-typed value.
virtual int get_binary_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, void *&data, size_t &length)
 Gets a binary-typed value.
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 Member Functions

int open_simple_section (const ACE_Configuration_Section_Key &base, const ACE_TCHAR *sub_section, int create, ACE_Configuration_Section_Key &result)
 <sub_section> may not contain path separators
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)
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_Heapoperator= (const ACE_Configuration_Heap &rhs)

Private Attributes

ACE_Allocatorallocator_
SECTION_MAPindex_
size_t default_map_size_

Detailed Description

The concrete implementation of a allocator based configuration database.

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

Note:
Before using this class you must call one of the open methods.
Todo:

Definition at line 786 of file Configuration.h.


Constructor & Destructor Documentation

ACE_Configuration_Heap::ACE_Configuration_Heap ( void   ) 

Default ctor.

Definition at line 1248 of file Configuration.cpp.

References ACE_NEW, ACE_TEXT, and ACE_Configuration::root_.

01249   : allocator_ (0),
01250     index_ (0),
01251     default_map_size_ (0)
01252 {
01253   ACE_Configuration_Section_Key_Heap *temp = 0;
01254 
01255   ACE_NEW (temp, ACE_Configuration_Section_Key_Heap (ACE_TEXT ("")));
01256   root_ = ACE_Configuration_Section_Key (temp);
01257 }

ACE_Configuration_Heap::~ACE_Configuration_Heap ( void   )  [virtual]

Destructor.

Definition at line 1259 of file Configuration.cpp.

References allocator_, and ACE_Allocator::sync().

01260 {
01261   if (allocator_)
01262     allocator_->sync ();
01263 
01264   delete allocator_;
01265 }

ACE_Configuration_Heap::ACE_Configuration_Heap ( const ACE_Configuration_Heap rhs  )  [private]


Member Function Documentation

int ACE_Configuration_Heap::add_section ( const ACE_Configuration_Section_Key base,
const ACE_TCHAR sub_section,
ACE_Configuration_Section_Key result 
) [private]

Adds a new section.

Definition at line 1378 of file Configuration.cpp.

References ACE_ASSERT, ACE_TEXT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Allocator::free(), index_, ACE_String_Base< CHAR >::length(), load_key(), ACE_Allocator::malloc(), new_section(), ACE_OS::strcpy(), and ACE_OS::strlen().

Referenced by open_simple_section().

01381 {
01382   ACE_ASSERT (this->allocator_);
01383   ACE_TString section;
01384   if (load_key (base, section))
01385     return -1;
01386 
01387   // Find the base section
01388   ACE_Configuration_ExtId ExtId (section.fast_rep ());
01389   ACE_Configuration_Section_IntId IntId;
01390   if (index_->find (ExtId, IntId, allocator_))
01391     return -1;
01392 
01393   // See if this section already exists
01394   ACE_Configuration_ExtId SubSectionExtId (sub_section);
01395   int ignored = 0;
01396 
01397   if (!IntId.section_hash_map_->find (SubSectionExtId, ignored, allocator_))
01398     {
01399       // already exists!
01400       errno = EEXIST;
01401       return -1;
01402     }
01403 
01404   // Create the new section name
01405   // only prepend a separater if were not at the root
01406   if (section.length ())
01407     section += ACE_TEXT ("\\");
01408 
01409   section += sub_section;
01410 
01411   // Add it to the base section
01412   ACE_TCHAR* pers_name = (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (sub_section) + 1) * sizeof (ACE_TCHAR));
01413   ACE_OS::strcpy (pers_name, sub_section);
01414   ACE_Configuration_ExtId SSExtId (pers_name);
01415   if (IntId.section_hash_map_->bind (SSExtId, ignored, allocator_))
01416     {
01417       allocator_->free (pers_name);
01418       return -1;
01419     }
01420   return (new_section (section, result));
01421 }

int ACE_Configuration_Heap::create_index ( void   )  [private]

Helper for the <open> method.

Definition at line 1317 of file Configuration.cpp.

References ACE_CONFIG_SECTION_INDEX, ACE_ERROR, ACE_TEXT, allocator_, create_index_helper(), LM_ERROR, ACE_Allocator::malloc(), new_section(), ACE_Allocator::remove(), and ACE_Configuration::root_.

Referenced by open().

01318 {
01319   void *section_index = 0;
01320 
01321   // This is the easy case since if we find hash table in the
01322   // memory-mapped file we know it's already initialized.
01323   if (this->allocator_->find (ACE_CONFIG_SECTION_INDEX, section_index) == 0)
01324     this->index_ = (SECTION_MAP *) section_index;
01325 
01326   // Create a new <index_> (because we've just created a new
01327   // memory-mapped file).
01328   else
01329     {
01330       size_t index_size = sizeof (SECTION_MAP);
01331       section_index = this->allocator_->malloc (index_size);
01332 
01333       if (section_index == 0
01334           || create_index_helper (section_index) == -1
01335           || this->allocator_->bind (ACE_CONFIG_SECTION_INDEX,
01336                                      section_index) == -1)
01337         {
01338           // Attempt to clean up.
01339           ACE_ERROR ((LM_ERROR,
01340                       ACE_TEXT ("create_index failed\n")));
01341           this->allocator_->remove ();
01342           return -1;
01343         }
01344       // Add the root section
01345       return new_section (ACE_TEXT (""), root_);
01346     }
01347   return 0;
01348 }

int ACE_Configuration_Heap::create_index_helper ( void *  buffer  )  [private]

Helper for create_index() method: places hash table into an allocated space.

Definition at line 1351 of file Configuration.cpp.

References ACE_ASSERT, and index_.

Referenced by create_index().

01352 {
01353   ACE_ASSERT (this->allocator_);
01354   this->index_ = new (buffer) SECTION_MAP (this->allocator_);
01355   return 0;
01356 }

int ACE_Configuration_Heap::enumerate_sections ( const ACE_Configuration_Section_Key key,
int  index,
ACE_TString name 
) [virtual]

Enumerates through the subsections in a section.

Parameters:
key Section key to iterate through.
index Iteration position. Must be zero on the first call to iterate through key. Increment index by one on each successive call to this method.
name Receives the subsection's name.
Note:
You may not modify the key section while enumerating. If the section is modified during enumeration, results are undefined; you must restart the enumeration from index 0.
Return values:
0 for success, name has a valid name.
1 there are no more subsections in the section.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1744 of file Configuration.cpp.

References ACE_ASSERT, ACE_NEW_RETURN, allocator_, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin(), ACE_Hash_Map_Entry< EXT_ID, INT_ID >::ext_id_, ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Configuration::get_internal_key(), index_, ACE_Configuration_ExtId::name_, ACE_Configuration_Section_Key_Heap::path_, ACE_Configuration_Section_IntId::section_hash_map_, and ACE_Configuration_Section_Key_Heap::section_iter_.

Referenced by remove_section().

01747 {
01748   ACE_ASSERT (this->allocator_);
01749   // cast to a heap section key
01750   ACE_Configuration_Section_Key_Heap* pKey =
01751     dynamic_cast<ACE_Configuration_Section_Key_Heap*> (get_internal_key (key));
01752   if (!pKey)
01753     return -1;  // not a heap key!
01754 
01755   // resolve the section
01756   ACE_Configuration_ExtId ExtId (pKey->path_);
01757   ACE_Configuration_Section_IntId IntId;
01758   if (index_->find (ExtId, IntId, allocator_))
01759     return -1; // unknown section
01760 
01761   // Handle iterator resets
01762   if (index == 0)
01763     {
01764       if (pKey->section_iter_)
01765         delete pKey->section_iter_;
01766 
01767       ACE_NEW_RETURN (pKey->section_iter_,
01768                       SUBSECTION_HASH::ITERATOR (IntId.section_hash_map_->begin ()),
01769                       -1);
01770     }
01771 
01772   // Get the next entry
01773   ACE_Hash_Map_Entry<ACE_Configuration_ExtId, int>* entry = 0;
01774   if (!pKey->section_iter_->next (entry))
01775     return 1;
01776 
01777   // Return the value of the iterator and advance it
01778   pKey->section_iter_->advance ();
01779   name = entry->ext_id_.name_;
01780 
01781   return 0;
01782 }

int ACE_Configuration_Heap::enumerate_values ( const ACE_Configuration_Section_Key key,
int  index,
ACE_TString name,
VALUETYPE type 
) [virtual]

Definition at line 1695 of file Configuration.cpp.

References ACE_ASSERT, ACE_NEW_RETURN, allocator_, ACE_Hash_Map_Entry< EXT_ID, INT_ID >::ext_id_, ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Configuration::get_internal_key(), index_, ACE_Hash_Map_Entry< EXT_ID, INT_ID >::int_id_, ACE_Configuration_ExtId::name_, ACE_Configuration_Section_Key_Heap::path_, ACE_Configuration_Value_IntId::type_, ACE_Configuration_Section_IntId::value_hash_map_, and ACE_Configuration_Section_Key_Heap::value_iter_.

01699 {
01700   ACE_ASSERT (this->allocator_);
01701   ACE_Configuration_Section_Key_Heap* pKey =
01702     dynamic_cast<ACE_Configuration_Section_Key_Heap*> (get_internal_key (key));
01703   if (!pKey)
01704     return -1;
01705 
01706   name = pKey->path_;
01707 
01708   // resolve the section
01709   ACE_Configuration_ExtId ExtId (pKey->path_);
01710   ACE_Configuration_Section_IntId IntId;
01711   if (index_->find (ExtId, IntId, allocator_))
01712     return -1;
01713 
01714   // Handle iterator resets
01715   if (index == 0)
01716     {
01717       ACE_Hash_Map_Manager_Ex<ACE_Configuration_ExtId ,
01718                               ACE_Configuration_Value_IntId,
01719                               ACE_Hash<ACE_Configuration_ExtId>,
01720                               ACE_Equal_To<ACE_Configuration_ExtId>,
01721                               ACE_Null_Mutex>* hash_map = IntId.value_hash_map_;
01722       delete pKey->value_iter_;
01723 
01724       ACE_NEW_RETURN (pKey->value_iter_,
01725                       VALUE_HASH::ITERATOR (hash_map->begin ()),
01726                       -1);
01727     }
01728 
01729   // Get the next entry
01730   ACE_Hash_Map_Entry<ACE_Configuration_ExtId, ACE_Configuration_Value_IntId>* entry = 0;
01731 
01732   if (!pKey->value_iter_->next (entry))
01733     return 1;
01734 
01735   // Return the value of the iterator and advance it
01736   name = entry->ext_id_.name_;
01737   type = entry->int_id_.type_;
01738   pKey->value_iter_->advance ();
01739 
01740   return 0;
01741 }

int ACE_Configuration_Heap::find_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
VALUETYPE type 
) [virtual]

Definition at line 2081 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, load_key(), ACE_Configuration::NULL_String_, and ACE_Configuration::validate_value_name().

02084 {
02085   ACE_ASSERT (this->allocator_);
02086   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
02087   if (validate_value_name (t_name))
02088     return -1;
02089 
02090   // Get the section name from the key
02091   ACE_TString section;
02092   if (load_key (key, section))
02093     return -1;
02094 
02095   // Find this section
02096   ACE_Configuration_ExtId ExtId (section.fast_rep ());
02097   ACE_Configuration_Section_IntId IntId;
02098   if (index_->find (ExtId, IntId, allocator_))
02099     return -1;    // section does not exist
02100 
02101   // Find it
02102   ACE_Configuration_ExtId ValueExtId (t_name);
02103   VALUE_HASH::ENTRY* value_entry;
02104   if (((VALUE_HASH *) IntId.value_hash_map_)->find (ValueExtId, value_entry))
02105     return -1;  // value does not exist
02106 
02107   type_out = value_entry->int_id_.type_;
02108   return 0;
02109 }

int ACE_Configuration_Heap::get_binary_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
void *&  data,
size_t &  length 
) [virtual]

Gets a binary-typed value.

Parameters:
key Configuration section to get the value from.
name Name of the configuration value to get.
data Receives a pointer to memory holding the binary data for the value. This method allocates the memory pointed to using operator new[]. The caller is responsible for freeing the memory using operator delete[].
length Receives the number of bytes in the value.
Return values:
0 for success; caller is responsible for freeing the returned memory.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 2038 of file Configuration.cpp.

References ACE_ASSERT, ACE_NEW_RETURN, allocator_, ACE_Configuration::BINARY, ACE_Configuration_Value_IntId::data_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, ACE_Configuration_Value_IntId::length_, load_key(), ACE_OS::memcpy(), ACE_Configuration::NULL_String_, ACE_Configuration_Value_IntId::ptr_, ACE_Configuration_Value_IntId::type_, and ACE_Configuration::validate_value_name().

02043 {
02044   ACE_ASSERT (this->allocator_);
02045   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
02046   if (validate_value_name (t_name))
02047     return -1;
02048 
02049   // Get the section name from the key
02050   ACE_TString section;
02051   if (load_key (key, section))
02052     return -1;
02053 
02054   // Find this section
02055   ACE_Configuration_ExtId ExtId (section.fast_rep ());
02056   ACE_Configuration_Section_IntId IntId;
02057   if (index_->find (ExtId, IntId, allocator_))
02058     return -1;    // section does not exist
02059 
02060   ACE_Configuration_ExtId VExtId (t_name);
02061   ACE_Configuration_Value_IntId VIntId;
02062   // See if it exists first
02063   if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_))
02064     return -1;    // unknown value
02065 
02066   // Check type
02067   if (VIntId.type_ != ACE_Configuration::BINARY)
02068     {
02069       errno = ENOENT;
02070       return -1;
02071     }
02072 
02073   // Make a copy
02074   ACE_NEW_RETURN (data, char[VIntId.length_], -1);
02075   ACE_OS::memcpy (data, VIntId.data_.ptr_, VIntId.length_);
02076   length = VIntId.length_;
02077   return 0;
02078 }

int ACE_Configuration_Heap::get_integer_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
u_int &  value 
) [virtual]

Gets an integer-typed value.

Parameters:
key Configuration section to get the value from.
name Name of the configuration value to get.
value Receives the configuration value if it exists and has type INTEGER.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1988 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_Configuration_Value_IntId::data_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, ACE_Configuration_Value_IntId::int_, ACE_Configuration::INTEGER, ACE_Configuration::NULL_String_, ACE_Configuration_Value_IntId::type_, and ACE_Configuration::validate_value_name().

01991 {
01992   ACE_ASSERT (this->allocator_);
01993 
01994   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
01995   if (validate_value_name (t_name))
01996     return -1;
01997 
01998   // Get the section name from the key
01999   ACE_TString section (0, 0, false);
02000 
02001   if (this->load_key (key, section) != 0)
02002     {
02003       return -1;
02004     }
02005 
02006   // Find this section
02007   ACE_Configuration_ExtId ExtId (section.fast_rep ());
02008   ACE_Configuration_Section_IntId IntId;
02009 
02010   if (index_->find (ExtId, IntId, allocator_) != 0)
02011     {
02012       return -1;    // section does not exist
02013     }
02014 
02015 
02016   // See if it exists first
02017   ACE_Configuration_ExtId VExtId (t_name);
02018   ACE_Configuration_Value_IntId VIntId;
02019 
02020   if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_) != 0)
02021     {
02022       return -1;    // unknown value
02023     }
02024 
02025   // Check type
02026   if (VIntId.type_ != ACE_Configuration::INTEGER)
02027     {
02028       errno = ENOENT;
02029       return -1;
02030     }
02031 
02032   // Everythings ok, return the data
02033   value = VIntId.data_.int_;
02034   return 0;
02035 }

int ACE_Configuration_Heap::get_string_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
ACE_TString value 
) [virtual]

Gets a string-typed value.

Parameters:
key Configuration section to get the value from.
name Name of the configuration value to get.
value Receives the configuration value if it exists and has type STRING.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1949 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_Configuration_Value_IntId::data_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, load_key(), ACE_Configuration::NULL_String_, ACE_Configuration_Value_IntId::ptr_, ACE_Configuration::STRING, ACE_Configuration_Value_IntId::type_, and ACE_Configuration::validate_value_name().

01952 {
01953   ACE_ASSERT (this->allocator_);
01954   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
01955   if (validate_value_name (t_name))
01956     return -1;
01957 
01958   // Get the section name from the key
01959   ACE_TString section;
01960   if (load_key (key, section))
01961     return -1;
01962 
01963   // Find this section
01964   ACE_Configuration_ExtId ExtId (section.fast_rep ());
01965   ACE_Configuration_Section_IntId IntId;
01966   if (index_->find (ExtId, IntId, allocator_))
01967     return -1;    // section does not exist
01968 
01969   // See if it exists first
01970   ACE_Configuration_ExtId VExtId (t_name);
01971   ACE_Configuration_Value_IntId VIntId;
01972   if (IntId.value_hash_map_->find (VExtId, VIntId, allocator_))
01973     return -1;    // unknown value
01974 
01975   // Check type
01976   if (VIntId.type_ != ACE_Configuration::STRING)
01977     {
01978       errno = ENOENT;
01979       return -1;
01980     }
01981 
01982   // everythings ok, return the data
01983   value = static_cast<ACE_TCHAR*> (VIntId.data_.ptr_);
01984   return 0;
01985 }

int ACE_Configuration_Heap::load_key ( const ACE_Configuration_Section_Key key,
ACE_TString name 
) [private]

Definition at line 1359 of file Configuration.cpp.

References ACE_ASSERT, ACE_String_Base< CHAR >::assign_nocopy(), ACE_Configuration::get_internal_key(), and ACE_Configuration_Section_Key_Heap::path_.

Referenced by add_section(), find_value(), get_binary_value(), get_string_value(), open_simple_section(), remove_section(), remove_value(), set_binary_value(), set_integer_value(), and set_string_value().

01361 {
01362   ACE_ASSERT (this->allocator_);
01363   ACE_Configuration_Section_Key_Heap* pKey =
01364     dynamic_cast<ACE_Configuration_Section_Key_Heap*> (get_internal_key (key));
01365 
01366   if (!pKey)
01367     {
01368       return -1;
01369     }
01370 
01371   ACE_TString temp (pKey->path_, 0, false);
01372   name.assign_nocopy (temp);
01373   return 0;
01374 }

int ACE_Configuration_Heap::new_section ( const ACE_TString section,
ACE_Configuration_Section_Key result 
) [private]

Definition at line 1424 of file Configuration.cpp.

References ACE_ASSERT, ACE_NEW_RETURN, allocator_, ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::bind(), default_map_size_, ACE_String_Base< CHAR >::fast_rep(), ACE_Allocator::free(), index_, ACE_String_Base< CHAR >::length(), ACE_Allocator::malloc(), section_open_helper(), ACE_OS::strcpy(), ACE_Allocator::sync(), and value_open_helper().

Referenced by add_section(), and create_index().

01426 {
01427   ACE_ASSERT (this->allocator_);
01428   // Create a new section and add it to the global list
01429 
01430   // Allocate memory for items to be stored in the table.
01431   size_t section_len = section.length () + 1;
01432   ACE_TCHAR *ptr = (ACE_TCHAR*) this->allocator_->malloc (section_len * sizeof (ACE_TCHAR));
01433 
01434   int return_value = -1;
01435 
01436   if (ptr == 0)
01437     return -1;
01438   else
01439     {
01440       // Populate memory with data.
01441       ACE_OS::strcpy (ptr, section.fast_rep ());
01442 
01443       void *value_hash_map = 0;
01444       size_t map_size = sizeof (VALUE_MAP);
01445       value_hash_map = this->allocator_->malloc (map_size);
01446 
01447       // If allocation failed ...
01448       if (value_hash_map == 0)
01449         return -1;
01450 
01451       // Initialize allocated hash map through placement new.
01452       if (value_open_helper (default_map_size_, value_hash_map ) == -1)
01453         {
01454           this->allocator_->free (value_hash_map );
01455           return -1;
01456         }
01457 
01458       // create the section map
01459       void* section_hash_map = 0;
01460       map_size = sizeof (SUBSECTION_MAP);
01461       section_hash_map = this->allocator_->malloc (map_size);
01462 
01463       // If allocation failed
01464       if (section_hash_map == 0)
01465         return -1;
01466 
01467       // initialize allocated hash map through placement new
01468       if (section_open_helper (default_map_size_, section_hash_map) == -1)
01469         {
01470           this->allocator_->free (value_hash_map );
01471           this->allocator_->free (section_hash_map);
01472           return -1;
01473         }
01474 
01475       ACE_Configuration_ExtId name (ptr);
01476       ACE_Configuration_Section_IntId entry ((VALUE_MAP*) value_hash_map,
01477                                              (SUBSECTION_MAP*) section_hash_map);
01478 
01479       // Do a normal bind.  This will fail if there's already an
01480       // entry with the same name.
01481       return_value = this->index_->bind (name, entry, this->allocator_);
01482 
01483       if (return_value == 1      /* Entry already existed so bind failed. */
01484           || return_value == -1  /* Unable to bind for other reasons. */)
01485         {
01486           // Free our dynamically allocated memory.
01487           this->allocator_->free (static_cast<void *> (ptr));
01488           return return_value;
01489         }
01490 
01491       // If bind () succeed, it will automatically sync
01492       // up the map manager entry.  However, we must sync up our
01493       // name/value memory.
01494       this->allocator_->sync (ptr, section_len);
01495     }
01496 
01497   // set the result
01498   ACE_Configuration_Section_Key_Heap *temp;
01499   ACE_NEW_RETURN (temp,
01500                   ACE_Configuration_Section_Key_Heap (ptr),
01501                   -1);
01502   result = ACE_Configuration_Section_Key (temp);
01503   return return_value;
01504 }

int ACE_Configuration_Heap::open ( size_t  default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE  ) 

Opens a heap based configuration.

Definition at line 1268 of file Configuration.cpp.

References ACE_NEW_RETURN, create_index(), and default_map_size_.

01269 {
01270   default_map_size_ = default_map_size;
01271   // Create the allocator with the appropriate options.
01272   // The name used for  the lock is the same as one used
01273   // for the file.
01274   ACE_NEW_RETURN (this->allocator_,
01275                   HEAP_ALLOCATOR (),
01276                   -1);
01277   return create_index ();
01278 }

int ACE_Configuration_Heap::open ( const ACE_TCHAR file_name,
void *  base_address = ACE_DEFAULT_BASE_ADDR,
size_t  default_map_size = ACE_DEFAULT_CONFIG_SECTION_SIZE 
)

Opens a configuration based on a file name.

Definition at line 1282 of file Configuration.cpp.

References ACE_OS::access(), ACE_ERROR_RETURN, ACE_NEW_RETURN, ACE_TEXT, create_index(), default_map_size_, F_OK, LM_ERROR, MAXNAMELEN, MAXPATHLEN, and ACE_OS::strlen().

01285 {
01286   default_map_size_ = default_map_size;
01287 
01288   // Make sure that the file name is of the legal length.
01289   if (ACE_OS::strlen (file_name) >= MAXNAMELEN + MAXPATHLEN)
01290     {
01291       errno = ENAMETOOLONG;
01292       return -1;
01293     }
01294 
01295   ACE_MMAP_Memory_Pool::OPTIONS options (base_address);
01296 
01297   // Create the allocator with the appropriate options.  The name used
01298   // for  the lock is the same as one used for the file.
01299   ACE_NEW_RETURN (this->allocator_,
01300                   PERSISTENT_ALLOCATOR (file_name,
01301                                         file_name,
01302                                         &options),
01303                   -1);
01304 
01305 #if !defined (ACE_LACKS_ACCESS)
01306   // Now check if the backing store has been created successfully.
01307   if (ACE_OS::access (file_name, F_OK) != 0)
01308     ACE_ERROR_RETURN ((LM_ERROR,
01309                        ACE_TEXT ("create_index\n")),
01310                       -1);
01311 #endif /* ACE_LACKS_ACCESS */
01312 
01313   return create_index ();
01314 }

int ACE_Configuration_Heap::open_section ( const ACE_Configuration_Section_Key base,
const ACE_TCHAR sub_section,
int  create,
ACE_Configuration_Section_Key result 
) [virtual]

Opens a named section in an existing section.

Parameters:
base Existing section in which to open the named section.
sub_section Name of the section to open.
create If zero, the named section must exist. If non-zero, the named section will be created if it does not exist.
result Reference; receives the section key for the new section.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1525 of file Configuration.cpp.

References ACE_ASSERT, ACE_TEXT, open_simple_section(), ACE_OS::strchr(), and ACE_Configuration::validate_name().

Referenced by remove_section().

01529 {
01530   ACE_ASSERT (this->allocator_);
01531   if (validate_name (sub_section, 1))    // 1 == allow_path
01532     return -1;
01533 
01534   result = base;
01535 
01536   for (const ACE_TCHAR* separator;
01537        (separator = ACE_OS::strchr (sub_section, ACE_TEXT ('\\'))) != 0;
01538        )
01539     {
01540       ACE_TString simple_section (sub_section, separator - sub_section);
01541       int ret_val =
01542         open_simple_section (result, simple_section.c_str (), create, result);
01543       if (ret_val)
01544         return ret_val;
01545       sub_section = separator + 1;
01546     }
01547 
01548   return open_simple_section (result, sub_section, create, result);
01549 }

int ACE_Configuration_Heap::open_simple_section ( const ACE_Configuration_Section_Key base,
const ACE_TCHAR sub_section,
int  create,
ACE_Configuration_Section_Key result 
) [private]

<sub_section> may not contain path separators

Definition at line 1552 of file Configuration.cpp.

References ACE_NEW_RETURN, ACE_TEXT, add_section(), allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, ACE_String_Base< CHAR >::length(), and load_key().

Referenced by open_section().

01556 {
01557   ACE_TString section (0, 0, false);
01558 
01559   if (load_key (base, section))
01560     {
01561       return -1;
01562     }
01563 
01564   // Only add the \\ if were not at the root
01565   if (section.length ())
01566     {
01567       section += ACE_TEXT ("\\");
01568     }
01569 
01570   section += sub_section;
01571 
01572   // resolve the section
01573   ACE_Configuration_ExtId ExtId (section.fast_rep ());
01574   ACE_Configuration_Section_IntId IntId;
01575 
01576   if (index_->find (ExtId, IntId, allocator_))
01577     {
01578       if (!create)
01579         {
01580           errno = ENOENT;
01581           return -1;
01582         }
01583 
01584       return add_section (base, sub_section, result);
01585     }
01586 
01587   ACE_Configuration_Section_Key_Heap *temp;
01588   ACE_NEW_RETURN (temp,
01589                   ACE_Configuration_Section_Key_Heap (section.fast_rep ()),
01590                   -1);
01591   result = ACE_Configuration_Section_Key (temp);
01592   return 0;
01593 }

ACE_Configuration_Heap& ACE_Configuration_Heap::operator= ( const ACE_Configuration_Heap rhs  )  [private]

int ACE_Configuration_Heap::remove_section ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR sub_section,
int  recursive 
) [virtual]

Removes a named section.

Parameters:
key Section key to remove the named section from.
sub_section Name of the section to remove.
recursive If non zero, any subkeys below sub_section are removed as well.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1596 of file Configuration.cpp.

References ACE_ASSERT, ACE_TEXT, allocator_, ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::close(), enumerate_sections(), ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Configuration_Section_IntId::free(), ACE_Configuration_ExtId::free(), index_, ACE_String_Base< CHAR >::length(), load_key(), open_section(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::unbind(), and ACE_Configuration::validate_name().

01599 {
01600   ACE_ASSERT (this->allocator_);
01601   if (validate_name (sub_section))
01602     return -1;
01603 
01604   ACE_TString section;
01605   if (load_key (key, section))
01606     return -1;
01607 
01608   // Find this key
01609   ACE_Configuration_ExtId ParentExtId (section.fast_rep ());
01610   ACE_Configuration_Section_IntId ParentIntId;
01611   if (index_->find (ParentExtId, ParentIntId, allocator_))
01612     return -1;// no parent key
01613 
01614   // Find this subkey
01615   if (section.length ())
01616     section += ACE_TEXT ("\\");
01617 
01618   section += sub_section;
01619   ACE_Configuration_ExtId SectionExtId (section.fast_rep ());
01620   SECTION_HASH::ENTRY* section_entry;
01621   SECTION_HASH* hashmap = index_;
01622   if (hashmap->find (SectionExtId, section_entry))
01623     return -1;
01624 
01625   if (recursive)
01626     {
01627       ACE_Configuration_Section_Key section;
01628       if (open_section (key, sub_section, 0, section))
01629         return -1;
01630 
01631       int index = 0;
01632       ACE_TString name;
01633       while (!enumerate_sections (section, index, name))
01634         {
01635           if (remove_section (section, name.fast_rep (), 1))
01636             return -1;
01637 
01638           ++index;
01639         }
01640     }
01641 
01642   // Now make sure we dont have any subkeys
01643   if (section_entry->int_id_.section_hash_map_->current_size ())
01644     {
01645       errno = ENOTEMPTY;
01646       return -1;
01647     }
01648 
01649   // Now remove subkey from parent key
01650   ACE_Configuration_ExtId SubSExtId (sub_section);
01651   SUBSECTION_HASH::ENTRY* subsection_entry;
01652   if (((SUBSECTION_HASH*)ParentIntId.section_hash_map_)->
01653       find (SubSExtId, subsection_entry))
01654     return -1;
01655 
01656   if (ParentIntId.section_hash_map_->unbind (SubSExtId, allocator_))
01657     return -1;
01658 
01659   subsection_entry->ext_id_.free (allocator_);
01660 
01661   // Remember the pointers so we can free them after we unbind
01662   ACE_Configuration_ExtId ExtIdToFree (section_entry->ext_id_);
01663   ACE_Configuration_Section_IntId IntIdToFree (section_entry->int_id_);
01664 
01665   // iterate over all values and free memory
01666   VALUE_HASH* value_hash_map = section_entry->int_id_.value_hash_map_;
01667   VALUE_HASH::ITERATOR value_iter = value_hash_map->begin ();
01668   while (!value_iter.done ())
01669     {
01670       VALUE_HASH::ENTRY* value_entry = 0;
01671       if (!value_iter.next (value_entry))
01672         return 1;
01673 
01674       value_entry->ext_id_.free (allocator_);
01675       value_entry->int_id_.free (allocator_);
01676 
01677       value_iter.advance ();
01678     }
01679 
01680   // remove it
01681   if (index_->unbind (SectionExtId, allocator_))
01682     return -1;
01683 
01684   value_hash_map->close ();
01685   section_entry->int_id_.section_hash_map_->close (allocator_);
01686 
01687   // Free the memory
01688   ExtIdToFree.free (allocator_);
01689   IntIdToFree.free (allocator_);
01690 
01691   return 0;
01692 }

int ACE_Configuration_Heap::remove_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name 
) [virtual]

Removes the the value name from key. returns non zero on error.

Implements ACE_Configuration.

Definition at line 2112 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), index_, load_key(), ACE_Configuration::NULL_String_, and ACE_Configuration::validate_value_name().

02114 {
02115   ACE_ASSERT (this->allocator_);
02116   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
02117   if (validate_value_name (t_name))
02118     return -1;
02119 
02120   // Get the section name from the key
02121   ACE_TString section;
02122   if (load_key (key, section))
02123     return -1;
02124 
02125   // Find this section
02126   ACE_Configuration_ExtId ExtId (section.fast_rep ());
02127   ACE_Configuration_Section_IntId IntId;
02128   if (index_->find (ExtId, IntId, allocator_))
02129     return -1;    // section does not exist
02130 
02131   // Find it
02132   ACE_Configuration_ExtId ValueExtId (t_name);
02133   VALUE_HASH::ENTRY* value_entry;
02134   if (((VALUE_HASH *) IntId.value_hash_map_)->find (ValueExtId, value_entry))
02135     return -1;
02136 
02137   // free it
02138   value_entry->ext_id_.free (allocator_);
02139   value_entry->int_id_.free (allocator_);
02140 
02141   // Unbind it
02142   if (IntId.value_hash_map_->unbind (ValueExtId, allocator_))
02143     return -1;
02144 
02145   return 0;
02146 }

int ACE_Configuration_Heap::section_open_helper ( size_t  hash_table_size,
void *  buffer 
) [private]

Definition at line 1516 of file Configuration.cpp.

References ACE_ASSERT.

Referenced by new_section().

01518 {
01519   ACE_ASSERT (this->allocator_);
01520   new (buffer) SUBSECTION_MAP (hash_table_size, this->allocator_);
01521   return 0;
01522 }

int ACE_Configuration_Heap::set_binary_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
const void *  data,
size_t  length 
) [virtual]

Sets a binary-typed value.

Parameters:
key Configuration section to set the value in.
name Name of the configuration value to set. If a value with the specified name exists, it is replaced.
data Pointer to the binary data for the value.
length Number of bytes for the new value.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1891 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Allocator::free(), index_, load_key(), ACE_Allocator::malloc(), ACE_OS::memcpy(), ACE_Configuration::NULL_String_, ACE_OS::strcpy(), ACE_OS::strlen(), and ACE_Configuration::validate_value_name().

01895 {
01896   ACE_ASSERT (this->allocator_);
01897   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
01898   if (validate_value_name (t_name))
01899     return -1;
01900 
01901   // Get the section name from the key
01902   ACE_TString section;
01903   if (load_key (key, section))
01904     return -1;
01905 
01906   // Find this section
01907   ACE_Configuration_ExtId section_ext (section.fast_rep ());
01908   ACE_Configuration_Section_IntId section_int;
01909   if (index_->find (section_ext, section_int, allocator_))
01910     return -1;    // section does not exist
01911 
01912   // Get the entry for this item (if it exists)
01913   VALUE_HASH::ENTRY* entry;
01914   ACE_Configuration_ExtId item_name (t_name);
01915   if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0)
01916     {
01917       // found item, replace it
01918       // Free the old value
01919       entry->int_id_.free (allocator_);
01920       // Allocate the new value in this heap
01921       ACE_TCHAR* pers_value = (ACE_TCHAR *) allocator_->malloc (length);
01922       ACE_OS::memcpy (pers_value, data, length);
01923       ACE_Configuration_Value_IntId new_value_int (pers_value, length);
01924       entry->int_id_ = new_value_int;
01925     }
01926   else
01927     {
01928       // it doesn't exist, bind it
01929       ACE_TCHAR* pers_name =
01930  (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR));
01931       ACE_OS::strcpy (pers_name, t_name);
01932       ACE_TCHAR* pers_value = (ACE_TCHAR *) allocator_->malloc (length);
01933       ACE_OS::memcpy (pers_value, data, length);
01934       ACE_Configuration_ExtId item_name (pers_name);
01935       ACE_Configuration_Value_IntId item_value (pers_value, length);
01936       if (section_int.value_hash_map_->bind (item_name, item_value, allocator_))
01937         {
01938           allocator_->free (pers_value);
01939           allocator_->free (pers_name);
01940           return -1;
01941         }
01942       return 0;
01943     }
01944 
01945   return 0;
01946 }

int ACE_Configuration_Heap::set_integer_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
u_int  value 
) [virtual]

Sets a integer-typed value.

Parameters:
key Configuration section to set the value in.
name Name of the configuration value to set. If a value with the specified name exists, it is replaced.
value The integer to set the configuration value to.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1842 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Allocator::free(), index_, load_key(), ACE_Allocator::malloc(), ACE_Configuration::NULL_String_, ACE_OS::strcpy(), ACE_OS::strlen(), and ACE_Configuration::validate_value_name().

01845 {
01846   ACE_ASSERT (this->allocator_);
01847   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
01848   if (validate_value_name (t_name))
01849     return -1;
01850 
01851   // Get the section name from the key
01852   ACE_TString section;
01853   if (load_key (key, section))
01854     return -1;
01855 
01856   // Find this section
01857   ACE_Configuration_ExtId section_ext (section.fast_rep ());
01858   ACE_Configuration_Section_IntId section_int;
01859   if (index_->find (section_ext, section_int, allocator_))
01860     return -1;  // section does not exist
01861 
01862   // Get the entry for this item (if it exists)
01863   VALUE_HASH::ENTRY* entry;
01864   ACE_Configuration_ExtId item_name (t_name);
01865   if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0)
01866     {
01867       // found item, replace it
01868       ACE_Configuration_Value_IntId new_value_int (value);
01869       entry->int_id_ = new_value_int;
01870     }
01871   else
01872     {
01873       // it doesn't exist, bind it
01874       ACE_TCHAR* pers_name =
01875  (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR));
01876       ACE_OS::strcpy (pers_name, t_name);
01877       ACE_Configuration_ExtId item_name (pers_name);
01878       ACE_Configuration_Value_IntId item_value (value);
01879       if (section_int.value_hash_map_->bind (item_name, item_value, allocator_))
01880         {
01881           allocator_->free (pers_name);
01882           return -1;
01883         }
01884       return 0;
01885     }
01886 
01887   return 0;
01888 }

int ACE_Configuration_Heap::set_string_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
const ACE_TString value 
) [virtual]

Sets a string-typed value.

Parameters:
key Configuration section to set the value in.
name Name of the configuration value to set. If a value with the specified name exists, it is replaced.
value The string to set the configuration value to.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implements ACE_Configuration.

Definition at line 1785 of file Configuration.cpp.

References ACE_ASSERT, allocator_, ACE_String_Base< CHAR >::fast_rep(), ACE_Hash_Map_With_Allocator< EXT_ID, INT_ID >::find(), ACE_Allocator::free(), index_, ACE_String_Base< CHAR >::length(), load_key(), ACE_Allocator::malloc(), ACE_Configuration::NULL_String_, ACE_OS::strcpy(), ACE_OS::strlen(), and ACE_Configuration::validate_value_name().

01788 {
01789   ACE_ASSERT (this->allocator_);
01790   const ACE_TCHAR *t_name = name ? name : &this->NULL_String_;
01791   if (validate_value_name (t_name))
01792     return -1;
01793 
01794   ACE_TString section;
01795   if (load_key (key, section))
01796     return -1;
01797 
01798   ACE_Configuration_ExtId section_ext (section.fast_rep ());
01799   ACE_Configuration_Section_IntId section_int;
01800   if (index_->find (section_ext, section_int, allocator_))
01801     return -1;
01802 
01803   // Get the entry for this item (if it exists)
01804   VALUE_HASH::ENTRY* entry;
01805   ACE_Configuration_ExtId item_name (t_name);
01806   if (section_int.value_hash_map_->VALUE_HASH::find (item_name, entry) == 0)
01807     {
01808       // found item, replace it
01809       // Free the old value
01810       entry->int_id_.free (allocator_);
01811       // Allocate the new value in this heap
01812       ACE_TCHAR* pers_value =
01813  (ACE_TCHAR *) allocator_->malloc ((value.length () + 1) * sizeof (ACE_TCHAR));
01814       ACE_OS::strcpy (pers_value, value.fast_rep ());
01815       ACE_Configuration_Value_IntId new_value_int (pers_value);
01816       entry->int_id_ = new_value_int;
01817     }
01818   else
01819     {
01820       // it doesn't exist, bind it
01821       ACE_TCHAR* pers_name =
01822  (ACE_TCHAR *) allocator_->malloc ((ACE_OS::strlen (t_name) + 1) * sizeof (ACE_TCHAR));
01823       ACE_OS::strcpy (pers_name, t_name);
01824       ACE_TCHAR* pers_value =
01825  (ACE_TCHAR *) allocator_->malloc ((value.length () + 1) * sizeof (ACE_TCHAR));
01826       ACE_OS::strcpy (pers_value, value.fast_rep ());
01827       ACE_Configuration_ExtId item_name (pers_name);
01828       ACE_Configuration_Value_IntId item_value (pers_value);
01829       if (section_int.value_hash_map_->bind (item_name, item_value, allocator_))
01830         {
01831           allocator_->free (pers_value);
01832           allocator_->free (pers_name);
01833           return -1;
01834         }
01835       return 0;
01836     }
01837 
01838   return 0;
01839 }

int ACE_Configuration_Heap::value_open_helper ( size_t  hash_table_size,
void *  buffer 
) [private]

Definition at line 1507 of file Configuration.cpp.

References ACE_ASSERT.

Referenced by new_section().

01509 {
01510   ACE_ASSERT (this->allocator_);
01511   new (buffer) VALUE_MAP (hash_table_size, this->allocator_);
01512   return 0;
01513 }


Member Data Documentation

ACE_Allocator* ACE_Configuration_Heap::allocator_ [private]

Definition at line 884 of file Configuration.h.

Referenced by add_section(), create_index(), enumerate_sections(), enumerate_values(), find_value(), get_binary_value(), get_integer_value(), get_string_value(), new_section(), open_simple_section(), remove_section(), remove_value(), set_binary_value(), set_integer_value(), set_string_value(), and ~ACE_Configuration_Heap().

size_t ACE_Configuration_Heap::default_map_size_ [private]

Definition at line 886 of file Configuration.h.

Referenced by new_section(), and open().

SECTION_MAP* ACE_Configuration_Heap::index_ [private]

Definition at line 885 of file Configuration.h.

Referenced by add_section(), create_index_helper(), enumerate_sections(), enumerate_values(), find_value(), get_binary_value(), get_integer_value(), get_string_value(), new_section(), open_simple_section(), remove_section(), remove_value(), set_binary_value(), set_integer_value(), and set_string_value().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:35:00 2010 for ACE by  doxygen 1.4.7