Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7234 in orxonox.OLD for branches/preferences/src/lib/parser


Ignore:
Timestamp:
Mar 21, 2006, 3:36:22 PM (19 years ago)
Author:
bensch
Message:

orxonox/branches/preferences: merged the old preferences here… some minor conflicts, hope it works

Location:
branches/preferences/src/lib/parser
Files:
2 edited
6 copied

Legend:

Unmodified
Added
Removed
  • branches/preferences/src/lib/parser/Makefile.am

    r5944 r7234  
    11SUBDIRS = \
    22          tinyxml \
    3           ini_parser
     3                                ini_parser \
     4                                preferences
    45
    56
  • branches/preferences/src/lib/parser/ini_parser/ini_parser.cc

    r7221 r7234  
    392392}
    393393
     394/**
     395 * @brief edits the entry speciefied by entryName in sectionName/currentSection or creates it if it doesn't exist
     396 * @param entryName the Name of the Entry to add
     397 * @param value the value to assign to this entry
     398 * @param sectionName if NULL then this entry will be set to the currentSection
     399 * otherwise to the section refered to by sectionName.
     400 * If both are NULL no entry will be added
     401 * @return true if everything is ok false on error
     402 */
     403bool IniParser::editVar(const char* entryName, const char* value, const char* sectionName)
     404{
     405  std::list<IniSection>::iterator section;
     406
     407  if (sectionName != NULL)
     408  {
     409    for (section = this->sections.begin(); section != this->sections.end(); section++)
     410      if (!strcmp((*section).name, sectionName))
     411        break;
     412  }
     413  else
     414    section = this->currentSection;
     415
     416  if (section == this->sections.end())
     417  {
     418    IniSection sec;
     419    sec.comment = NULL;
     420    sec.name = new char[strlen(sectionName)+1];
     421    strcpy(sec.name, sectionName);
     422    section = this->sections.insert(this->sections.end(), sec);
     423  }
     424
     425  if (section == this->sections.end())
     426  {
     427    PRINTF(2)("section '%s' not found for value '%s'\n", sectionName, entryName);
     428    return false;
     429  }
     430  else
     431  {
     432    //try find item
     433    std::list<IniEntry>::iterator entry;
     434    for (entry = section->entries.begin(); entry!=section->entries.end(); entry++)
     435      if (!strcmp( entry->name, entryName ))
     436        break;
     437
     438    //found it?
     439    if ( entry != section->entries.end() )
     440    {
     441      if ( entry->value != NULL )
     442      {
     443        delete[] entry->value;
     444      }
     445      entry->value = new char[strlen(value)+1];
     446      strcpy(entry->value, value);
     447
     448      return true;
     449    }
     450
     451    //not found -> create it
     452    (*section).entries.push_back(IniEntry());
     453    (*section).entries.back().comment = NULL;
     454    (*section).entries.back().name = new char[strlen(entryName)+1];
     455    strcpy((*section).entries.back().name, entryName);
     456    (*section).entries.back().value = new char[strlen(value)+1];
     457    strcpy((*section).entries.back().value, value);
     458    PRINTF(5)("Added Entry %s with Value '%s' to Section %s\n",
     459    (*section).entries.back().name,
     460    (*section).entries.back().value,
     461    (*section).name);
     462    this->currentEntry = --(*section).entries.end();
     463    return true;
     464  }
     465}
     466
    394467
    395468/**
Note: See TracChangeset for help on using the changeset viewer.