ACE_Configuration Class Reference

Base class for configuration databases. More...

#include <Configuration.h>

Inheritance diagram for ACE_Configuration:

Inheritance graph
[legend]
Collaboration diagram for ACE_Configuration:

Collaboration graph
[legend]
List of all members.

Public Types

 STRING
 INTEGER
 BINARY
 INVALID
enum  VALUETYPE { STRING, INTEGER, BINARY, INVALID }
 Enumeration for the various types of values we can store. More...

Public Member Functions

virtual ~ACE_Configuration (void)
 Destructor.
virtual const ACE_Configuration_Section_Keyroot_section (void) const
 Obtain a reference to 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
virtual int remove_section (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *sub_section, int recursive)=0
 Removes a named section.
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 ACE_TCHAR *name, const ACE_TString &value)=0
 Sets a string-typed value.
virtual int set_integer_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, u_int value)=0
 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)=0
 Sets a binary-typed value.
virtual int get_string_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, ACE_TString &value)=0
 Gets a string-typed value.
virtual int get_integer_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, u_int &value)=0
 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)=0
 Gets a binary-typed value.
virtual int find_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name, VALUETYPE &type)=0
virtual int remove_value (const ACE_Configuration_Section_Key &key, const ACE_TCHAR *name)=0
 Removes a named value.
int expand_path (const ACE_Configuration_Section_Key &key, const ACE_TString &path_in, ACE_Configuration_Section_Key &key_out, int create=1)
int export_config (const ACE_TCHAR *filename)
int import_config (const ACE_TCHAR *filename)
bool operator== (const ACE_Configuration &rhs) const
bool operator!= (const ACE_Configuration &rhs) const

Static Public Attributes

static ACE_TCHAR NULL_String_ = '\0'

Protected Member Functions

 ACE_Configuration (void)
 Default ctor.
ACE_Section_Key_Internalget_internal_key (const ACE_Configuration_Section_Key &key)
 Resolves the internal key from a section key.
int validate_name (const ACE_TCHAR *name, int allow_path=0)
int validate_value_name (const ACE_TCHAR *name)
 ACE_Configuration (const ACE_Configuration &rhs)
ACE_Configurationoperator= (const ACE_Configuration &rhs)

Protected Attributes

ACE_Configuration_Section_Key root_

Detailed Description

Base class for configuration databases.

For internal use only.

This class provides an interface for configuration databases. A concrete class is required that implements the interface.

See also:
ACE_Configuration_Heap

ACE_Configuration_Win32Registry

Definition at line 138 of file Configuration.h.


Member Enumeration Documentation

enum ACE_Configuration::VALUETYPE

Enumeration for the various types of values we can store.

Enumerator:
STRING 
INTEGER 
BINARY 
INVALID 

Definition at line 142 of file Configuration.h.

00143   {
00144     STRING,
00145     INTEGER,
00146     BINARY,
00147     INVALID
00148   };


Constructor & Destructor Documentation

ACE_Configuration::~ACE_Configuration ( void   )  [virtual]

Destructor.

Definition at line 96 of file Configuration.cpp.

00097 {
00098 }

ACE_Configuration::ACE_Configuration ( void   )  [protected]

Default ctor.

Definition at line 91 of file Configuration.cpp.

00092   : root_ ()
00093 {
00094 }

ACE_Configuration::ACE_Configuration ( const ACE_Configuration rhs  )  [protected]


Member Function Documentation

virtual int ACE_Configuration::enumerate_sections ( const ACE_Configuration_Section_Key key,
int  index,
ACE_TString name 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

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

Enumerates through the values 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 value's name.
type Receives the value's data type.
Note:
You may not delete or add values 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 and type are valid.
1 there are no more values in the section.
-1 for error; ACE_OS::last_error() retrieves error code.

Referenced by ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

int ACE_Configuration::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 '\' or forward slash '/'. Returns 0 on success, -1 if <create) is 0 and the path refers a nonexistant section

Definition at line 107 of file Configuration.cpp.

References open_section(), and ACE_String_Base< CHAR >::rep().

Referenced by ACE_Ini_ImpExp::import_config(), and ACE_Registry_ImpExp::import_config().

00111 {
00112   // Make a copy of key
00113   ACE_Configuration_Section_Key current_section = key;
00114   ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> pData (path_in.rep ());
00115   ACE_Tokenizer parser (pData.get ());
00116   parser.delimiter_replace ('\\', '\0');
00117   parser.delimiter_replace ('/', '\0');
00118 
00119   for (ACE_TCHAR *temp = parser.next ();
00120        temp != 0;
00121        temp = parser.next ())
00122     {
00123       // Open the section
00124       if (open_section (current_section,
00125                         temp,
00126                         create,
00127                         key_out))
00128         return -1;
00129 
00130       current_section = key_out;
00131     }
00132 
00133   return 0;
00134 
00135 }

int ACE_Configuration::export_config ( const ACE_TCHAR filename  ) 

Deprecated:
Exports the configuration database to filename. If filename is already present, it is overwritten. This function is deprecated and will be removed in a future version of ACE. Please use either ACE_Registry_ImpExp or ACE_Ini_ImpExp instead.

Definition at line 140 of file Configuration.cpp.

References ACE_Registry_ImpExp::export_config().

00141 {
00142   ACE_Registry_ImpExp exporter (*this);
00143   return exporter.export_config (filename);
00144 }

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

Retrieves the type of a named configuration value.

Parameters:
key Configuration section to look up the name in.
name Name of the configuration value to get the type of.
type Receives the data type of the named value, if it exists.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Referenced by operator==().

virtual int ACE_Configuration::get_binary_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
void *&  data,
size_t &  length 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

virtual int ACE_Configuration::get_integer_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
u_int &  value 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

ACE_Section_Key_Internal * ACE_Configuration::get_internal_key ( const ACE_Configuration_Section_Key key  )  [protected]

Resolves the internal key from a section key.

Definition at line 101 of file Configuration.cpp.

References ACE_Configuration_Section_Key::key_.

Referenced by ACE_Configuration_Heap::enumerate_sections(), ACE_Configuration_Heap::enumerate_values(), and ACE_Configuration_Heap::load_key().

00102 {
00103   return key.key_;
00104 }

virtual int ACE_Configuration::get_string_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
ACE_TString value 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

int ACE_Configuration::import_config ( const ACE_TCHAR filename  ) 

Deprecated:
Imports the configuration database from filename. Any existing data is not removed. This function is deprecated and will be removed in a future version of ACE. Please use ACE_Registry_ImpExp or ACE_Ini_ImpExp instead.

Definition at line 147 of file Configuration.cpp.

References ACE_Registry_ImpExp::import_config().

00148 {
00149   ACE_Registry_ImpExp importer (*this);
00150   return importer.import_config (filename);
00151 }

virtual int ACE_Configuration::open_section ( const ACE_Configuration_Section_Key base,
const ACE_TCHAR sub_section,
int  create,
ACE_Configuration_Section_Key result 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by expand_path(), ACE_Ini_ImpExp::export_section(), ACE_Registry_ImpExp::export_section(), and operator==().

bool ACE_Configuration::operator!= ( const ACE_Configuration rhs  )  const

Determine if the contents of this object are different from the contents of the object on the right hand side. Returns 0 (False) if they are equal and 1 (True) if they are not equal

Definition at line 428 of file Configuration.cpp.

00429 {
00430   return !(*this == rhs);
00431 }

ACE_Configuration& ACE_Configuration::operator= ( const ACE_Configuration rhs  )  [protected]

bool ACE_Configuration::operator== ( const ACE_Configuration rhs  )  const

Determine if the contents of this object is the same as the contents of the object on the right hand side. Returns 1 (True) if they are equal and 0 (False) if they are not equal

Definition at line 208 of file Configuration.cpp.

References BINARY, ACE_String_Base< CHAR >::c_str(), enumerate_sections(), enumerate_values(), find_value(), get_binary_value(), get_integer_value(), get_string_value(), INTEGER, open_section(), root_section(), and STRING.

00209 {
00210   bool rc = true;
00211   int sectionIndex = 0;
00212   ACE_TString sectionName;
00213   ACE_Configuration *nonconst_this = const_cast<ACE_Configuration*> (this);
00214   ACE_Configuration &nonconst_rhs  = const_cast<ACE_Configuration&> (rhs);
00215 
00216   const ACE_Configuration_Section_Key& rhsRoot = rhs.root_section ();
00217   ACE_Configuration_Section_Key rhsSection;
00218   ACE_Configuration_Section_Key thisSection;
00219 
00220   // loop through each section in this object
00221   while ((rc) && (nonconst_this->enumerate_sections (this->root_,
00222                                                      sectionIndex,
00223                                                      sectionName) == 0))
00224     {
00225       // find that section in the rhs object
00226       if (nonconst_rhs.open_section (rhsRoot,
00227                                      sectionName.c_str (),
00228                                      0,
00229                                      rhsSection) != 0)
00230         {
00231           // If the rhs object does not contain the section then we are
00232           // not equal.
00233           rc = false;
00234         }
00235       else if (nonconst_this->open_section (this->root_,
00236                                             sectionName.c_str (),
00237                                             0,
00238                                             thisSection) != 0)
00239         {
00240           // if there is some error opening the section in this object
00241           rc = false;
00242         }
00243       else
00244         {
00245           // Well the sections match
00246           int         valueIndex = 0;
00247           ACE_TString valueName;
00248           VALUETYPE   valueType;
00249           VALUETYPE   rhsType;
00250 
00251           // Enumerate each value in this section
00252           while ((rc) && nonconst_this->enumerate_values (thisSection,
00253                                                           valueIndex,
00254                                                           valueName,
00255                                                           valueType) == 0)
00256             {
00257               // look for the same value in the rhs section
00258               if (nonconst_rhs.find_value (rhsSection,
00259                                            valueName.c_str (),
00260                                            rhsType) != 0)
00261                 {
00262                   // We're not equal if the same value cannot
00263                   // be found in the rhs object.
00264                   rc = false;
00265                 }
00266               else if (valueType != rhsType)
00267                 {
00268                   // we're not equal if the types do not match.
00269                   rc = false;
00270                 }
00271               else
00272                 {
00273                   // finally compare values.
00274                   if (valueType == STRING)
00275                     {
00276                       ACE_TString thisString, rhsString;
00277                       if (nonconst_this->get_string_value (thisSection,
00278                                                            valueName.c_str (),
00279                                                            thisString) != 0)
00280                         {
00281                           // we're not equal if we cannot get this string
00282                           rc = false;
00283                         }
00284                       else if (nonconst_rhs.get_string_value (
00285                                  rhsSection,
00286                                  valueName.c_str (),
00287                                  rhsString) != 0)
00288                         {
00289                           // we're not equal if we cannot get rhs string
00290                           rc = false;
00291                         }
00292                       rc = (thisString == rhsString);
00293                     }
00294                   else if (valueType == INTEGER)
00295                     {
00296                       u_int thisInt = 0;
00297                       u_int rhsInt = 0;
00298                       if (nonconst_this->get_integer_value (
00299                             thisSection,
00300                             valueName.c_str (),
00301                             thisInt) != 0)
00302                         {
00303                           // we're not equal if we cannot get this int
00304                           rc = false;
00305                         }
00306                       else if (nonconst_rhs.get_integer_value (
00307                                  rhsSection,
00308                                  valueName.c_str (),
00309                                  rhsInt) != 0)
00310                         {
00311                           // we're not equal if we cannot get rhs int
00312                           rc = false;
00313                         }
00314                       rc = (thisInt == rhsInt);
00315                     }
00316                   else if (valueType == BINARY)
00317                     {
00318                       void* thisData = 0;
00319                       void* rhsData = 0;
00320                       size_t thisLength = 0;
00321                       size_t rhsLength = 0;
00322                       if (nonconst_this->get_binary_value (thisSection,
00323                                                            valueName.c_str (),
00324                                                            thisData,
00325                                                            thisLength) != 0)
00326                         {
00327                           // we're not equal if we cannot get this data
00328                           rc = false;
00329                         }
00330                       else if (nonconst_rhs.get_binary_value (
00331                                  rhsSection,
00332                                  valueName.c_str (),
00333                                  rhsData,
00334                                  rhsLength) != 0)
00335                         {
00336                           // we're not equal if we cannot get this data
00337                           rc = false;
00338                         }
00339 
00340                       rc = (thisLength == rhsLength);
00341                       // are the length's the same?
00342 
00343                       if (rc)
00344                         {
00345                           unsigned char* thisCharData =
00346                             (unsigned char*)thisData;
00347                           unsigned char* rhsCharData = (unsigned char*)rhsData;
00348                           // yes, then check each element
00349                           for (size_t count = 0;
00350                                (rc) && (count < thisLength);
00351                                count++)
00352                             {
00353                               rc = (* (thisCharData + count) == * (rhsCharData + count));
00354                             }
00355 
00356                           delete [] thisCharData;
00357                           delete [] rhsCharData;
00358                         }// end if the length's match
00359                     }
00360                   // We should never have valueTypes of INVALID, therefore
00361                   // we're not comparing them.  How would we since we have
00362                   // no get operation for invalid types.
00363                   // So, if we have them, we guess they are equal.
00364 
00365                 }// end else if values match.
00366 
00367               ++valueIndex;
00368 
00369             }// end value while loop
00370 
00371           // look in the rhs for values not in this
00372           valueIndex = 0;
00373           while ((rc) && (nonconst_rhs.enumerate_values (rhsSection,
00374                                                          valueIndex,
00375                                                          valueName,
00376                                                          rhsType) == 0))
00377             {
00378               // look for the same value in this section
00379               if (nonconst_this->find_value (thisSection,
00380                                              valueName.c_str (),
00381                                              valueType) != 0)
00382                 {
00383                   // We're not equal if the same value cannot
00384                   // be found in the rhs object.
00385                   rc = false;
00386                 }
00387               ++valueIndex;
00388             }// end while for rhs values not in this.
00389 
00390         }// end else if sections match.
00391 
00392       ++sectionIndex;
00393 
00394     }// end section while loop
00395 
00396   // Finally, make sure that there are no sections in rhs that do not
00397   // exist in this
00398   sectionIndex = 0;
00399   while ((rc)
00400          && (nonconst_rhs.enumerate_sections (rhsRoot,
00401                                               sectionIndex,
00402                                               sectionName) == 0))
00403     {
00404       // find the section in this
00405       if (nonconst_this->open_section (this->root_,
00406                                        sectionName.c_str (),
00407                                        0,
00408                                        thisSection) != 0)
00409         {
00410           // if there is some error opening the section in this object
00411           rc = false;
00412         }
00413       else if (nonconst_rhs.open_section (rhsRoot,
00414                                           sectionName.c_str (),
00415                                           0,
00416                                           rhsSection) != 0)
00417         {
00418           // If the rhs object does not contain the section then we
00419           // are not equal.
00420           rc = false;
00421         }
00422       ++sectionIndex;
00423     }
00424   return rc;
00425 }

virtual int ACE_Configuration::remove_section ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR sub_section,
int  recursive 
) [pure 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.

Implemented in ACE_Configuration_Heap.

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

Removes a named value.

Parameters:
key Configuration section to remove the named value from.
name Name of the configuration value to remove.
Return values:
0 for success.
-1 for error; ACE_OS::last_error() retrieves error code.

Implemented in ACE_Configuration_Heap.

const ACE_Configuration_Section_Key & ACE_Configuration::root_section ( void   )  const [virtual]

Obtain a reference to the root section of this configuration.

Definition at line 197 of file Configuration.cpp.

References root_.

Referenced by ACE_Ini_ImpExp::export_config(), ACE_Registry_ImpExp::export_config(), ACE_Ini_ImpExp::import_config(), ACE_Registry_ImpExp::import_config(), and operator==().

00198 {
00199   return root_;
00200 }

virtual int ACE_Configuration::set_binary_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
const void *  data,
size_t  length 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Registry_ImpExp::import_config().

virtual int ACE_Configuration::set_integer_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
u_int  value 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Registry_ImpExp::import_config(), and ACE_Registry_ImpExp::process_previous_line_format().

virtual int ACE_Configuration::set_string_value ( const ACE_Configuration_Section_Key key,
const ACE_TCHAR name,
const ACE_TString value 
) [pure 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.

Implemented in ACE_Configuration_Heap.

Referenced by ACE_Ini_ImpExp::import_config(), ACE_Registry_ImpExp::import_config(), and ACE_Registry_ImpExp::process_previous_line_format().

int ACE_Configuration::validate_name ( const ACE_TCHAR name,
int  allow_path = 0 
) [protected]

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. The path separator is allowed, except for the first character, if allow_path is true.

Definition at line 154 of file Configuration.cpp.

References ACE_TEXT, and ACE_OS::strcspn().

Referenced by ACE_Configuration_Heap::open_section(), ACE_Configuration_Heap::remove_section(), and validate_value_name().

00155 {
00156   // Invalid character set
00157   const ACE_TCHAR* reject =
00158     allow_path ? ACE_TEXT ("][") : ACE_TEXT ("\\][");
00159 
00160   // Position of the first invalid character or terminating null.
00161   size_t const pos = ACE_OS::strcspn (name, reject);
00162 
00163   // Check if it is an invalid character.
00164   if (name[pos] != ACE_TEXT ('\0'))
00165     {
00166       errno = EINVAL;
00167       return -1;
00168     }
00169 
00170   // The first character can never be a path separator.
00171   if (name[0] == ACE_TEXT ('\\'))
00172     {
00173       errno = EINVAL;
00174       return -1;
00175     }
00176 
00177   // Validate length.
00178   if (pos == 0 || pos > 255)
00179     {
00180       errno = ENAMETOOLONG;
00181       return -1;
00182     }
00183 
00184   return 0;
00185 }

int ACE_Configuration::validate_value_name ( const ACE_TCHAR name  )  [protected]

Test to see if name is valid. The default value for a key can be unnamed, which means either name is == 0 or name == '` is valid. Otherwise, it calls validate_name() to test name for the same rules that apply to keys.

Definition at line 188 of file Configuration.cpp.

References validate_name().

Referenced by ACE_Configuration_Heap::find_value(), ACE_Configuration_Heap::get_binary_value(), ACE_Configuration_Heap::get_integer_value(), ACE_Configuration_Heap::get_string_value(), ACE_Configuration_Heap::remove_value(), ACE_Configuration_Heap::set_binary_value(), ACE_Configuration_Heap::set_integer_value(), and ACE_Configuration_Heap::set_string_value().

00189 {
00190   if (name == 0 || *name == this->NULL_String_)
00191     return 0;
00192 
00193   return this->validate_name (name);
00194 }


Member Data Documentation

ACE_TCHAR ACE_Configuration::NULL_String_ = '\0' [static]

* Represents the "NULL" string to simplify the internal logic.

Definition at line 397 of file Configuration.h.

Referenced by ACE_Configuration_Heap::find_value(), ACE_Configuration_Heap::get_binary_value(), ACE_Configuration_Heap::get_integer_value(), ACE_Configuration_Heap::get_string_value(), ACE_Configuration_Heap::remove_value(), ACE_Configuration_Heap::set_binary_value(), ACE_Configuration_Heap::set_integer_value(), and ACE_Configuration_Heap::set_string_value().

ACE_Configuration_Section_Key ACE_Configuration::root_ [protected]

Definition at line 429 of file Configuration.h.

Referenced by ACE_Configuration_Heap::ACE_Configuration_Heap(), ACE_Configuration_Heap::create_index(), and root_section().


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