Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
30 results

configitem.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    configitem.cpp 3.26 KiB
    /**
      *  Copyright (C) 2004-2005 Savoir-Faire Linux inc.
      *  Author: Jerome Oufella <jerome.oufella@savoirfairelinux.com>
      *                                                                               *  This program is free software; you can redistribute it and/or modify
      *  it under the terms of the GNU General Public License as published by
      *  the Free Software Foundation; either version 2 of the License, or
      *  (at your option) any later version.
      *                                                                               *  This program is distributed in the hope that it will be useful,
      *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      *  GNU General Public License for more details.
      *                                                                               *  You should have received a copy of the GNU General Public License
      *  along with this program; if not, write to the Free Software
      *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
      */
    
    #include <assert.h>
    #include <stdio.h>
    #include <string.h>
    
    #include "configitem.h"
    
    using namespace std;
    
    ConfigItem::ConfigItem (void) {
    	init();
    }
    
    // Create a new ConfigItem, with key name keyName
    ConfigItem::ConfigItem (const string& keyName) {
    	init();
    	this->_key = new string(keyName);
    }
    
    // Create a new ConfigItem, with key name keyName and value keyVal.
    ConfigItem::ConfigItem (const string& keyName, const string& keyVal) {
    	init();
    	this->_key = new string(keyName);
    	this->_value = new string(keyVal);
    }
    
    ConfigItem::~ConfigItem (void) {
    	if (this->_key != NULL) delete this->_key;
    	if (this->_value != NULL) delete this->_value;
    }
    
    
    // Get the value of the passed key
    string*
    ConfigItem::getValueByKey (const string& keyName) {
    	assert (_key != NULL);
    	
    	if (*_key == keyName) {
    		return _value;
    	} else if (_next) {
    		return _next->getValueByKey(keyName);
    	}
    
    	return NULL;
    }
    
    // Get item pointer using a key value.
    // If key value not found, new item is appended to list.
    ConfigItem*
    ConfigItem::getItemByKey (const string& keyName) {
    	assert (_key != NULL);
    
    	if (*_key == keyName) {
    		return this;
    	} else if (_next) {
    		return _next->getItemByKey(keyName);
    	}
    
    	// Create new ConfigItem in list if non-existent
    	_next = new ConfigItem(keyName);
    	return _next;
    }
    
    // This saves a section/item list to fd
    void
    ConfigItem::saveToFile (fstream *fd) {
    	if (fd == NULL) return;
    	
    	// If we're a section, save our contents first.
    	if (_head != NULL) {
    		if (_key != NULL) {
    			*fd << "[" << _key->data() << "]\n";
    		}
    		_head->saveToFile (fd);
    		*fd << "\n";
    	}
    	
    	// Save the items list to file.
    	if (_next != NULL) {
    		_next->saveToFile(fd);
    	}
    	
    	// Must save key=value only if not a section.
    	if (_head == NULL) {
    		*fd << _key->data() << "=" <<_value->data() << "\n";
    	}
    }
    
    // Set the current objects value
    void
    ConfigItem::setValue (const string& newValue) {
    	if (_value != NULL) {
    		delete _value;
    	}
    	
    	_value = new string(newValue);
    }
    
    // Set a value given its key name
    void
    ConfigItem::setValueByKey (const string& key, const string& value) {
    	getItemByKey(key)->setValue(value);
    }
    
    // Set the default values
    void
    ConfigItem::init (void) {
    	this->_key = NULL;
    	this->_value = NULL;
    	this->_next = NULL;
    	this->_head = NULL;
    }
    
    
    // EOF