inifile.hh revision 2
12651Ssaidi@eecs.umich.edu/* 22651Ssaidi@eecs.umich.edu * Copyright (c) 2003 The Regents of The University of Michigan 32651Ssaidi@eecs.umich.edu * All rights reserved. 42651Ssaidi@eecs.umich.edu * 52651Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 62651Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 72651Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 82651Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 92651Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 102651Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 112651Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 122651Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 132651Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 142651Ssaidi@eecs.umich.edu * this software without specific prior written permission. 152651Ssaidi@eecs.umich.edu * 162651Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172651Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182651Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192651Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202651Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212651Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222651Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232651Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242651Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252651Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262651Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272651Ssaidi@eecs.umich.edu */ 282651Ssaidi@eecs.umich.edu 292651Ssaidi@eecs.umich.edu#ifndef __INIFILE_HH__ 302651Ssaidi@eecs.umich.edu#define __INIFILE_HH__ 312651Ssaidi@eecs.umich.edu 322651Ssaidi@eecs.umich.edu#include <fstream> 332651Ssaidi@eecs.umich.edu#include <list> 342651Ssaidi@eecs.umich.edu#include <string> 352651Ssaidi@eecs.umich.edu#include <vector> 362651Ssaidi@eecs.umich.edu 372680Sktlim@umich.edu#include "hashmap.hh" 382651Ssaidi@eecs.umich.edu 393886Sbinkertn@umich.educlass IniFile 403886Sbinkertn@umich.edu{ 413886Sbinkertn@umich.edu protected: 423886Sbinkertn@umich.edu class Entry 433886Sbinkertn@umich.edu { 443886Sbinkertn@umich.edu std::string value; 453886Sbinkertn@umich.edu mutable bool referenced; 463886Sbinkertn@umich.edu 472651Ssaidi@eecs.umich.edu public: 482651Ssaidi@eecs.umich.edu Entry(const std::string &v) 493530Sgblack@eecs.umich.edu : value(v), referenced(false) 502651Ssaidi@eecs.umich.edu { 512651Ssaidi@eecs.umich.edu } 522651Ssaidi@eecs.umich.edu 532651Ssaidi@eecs.umich.edu bool isReferenced() { return referenced; } 542651Ssaidi@eecs.umich.edu 552651Ssaidi@eecs.umich.edu const std::string &getValue() const; 562651Ssaidi@eecs.umich.edu 572680Sktlim@umich.edu void setValue(const std::string &v) { value = v; } 582680Sktlim@umich.edu }; 592651Ssaidi@eecs.umich.edu 602651Ssaidi@eecs.umich.edu class Section 612680Sktlim@umich.edu { 622680Sktlim@umich.edu typedef m5::hash_map<std::string, Entry *> EntryTable; 632651Ssaidi@eecs.umich.edu 642651Ssaidi@eecs.umich.edu EntryTable table; 652651Ssaidi@eecs.umich.edu mutable bool referenced; 662651Ssaidi@eecs.umich.edu 672651Ssaidi@eecs.umich.edu public: 682680Sktlim@umich.edu Section() 692680Sktlim@umich.edu : table(), referenced(false) 702680Sktlim@umich.edu { 712651Ssaidi@eecs.umich.edu } 722680Sktlim@umich.edu 732680Sktlim@umich.edu bool isReferenced() { return referenced; } 742651Ssaidi@eecs.umich.edu 752651Ssaidi@eecs.umich.edu void addEntry(const std::string &entryName, const std::string &value); 762680Sktlim@umich.edu Entry *findEntry(const std::string &entryName) const; 772651Ssaidi@eecs.umich.edu 782651Ssaidi@eecs.umich.edu bool printUnreferenced(const std::string §ionName); 792651Ssaidi@eecs.umich.edu void dump(const std::string §ionName); 802651Ssaidi@eecs.umich.edu }; 812651Ssaidi@eecs.umich.edu 822651Ssaidi@eecs.umich.edu typedef m5::hash_map<std::string, Section *> ConfigTable; 833886Sbinkertn@umich.edu 843886Sbinkertn@umich.edu protected: 852680Sktlim@umich.edu ConfigTable table; 862651Ssaidi@eecs.umich.edu 872680Sktlim@umich.edu Section *addSection(const std::string §ionName); 882651Ssaidi@eecs.umich.edu Section *findSection(const std::string §ionName) const; 892651Ssaidi@eecs.umich.edu 902651Ssaidi@eecs.umich.edu bool load(std::istream &f); 912651Ssaidi@eecs.umich.edu 92 public: 93 IniFile(); 94 ~IniFile(); 95 96 bool loadCPP(const std::string &file, std::vector<char *> &cppFlags); 97 bool load(const std::string &file); 98 99 bool add(const std::string &s); 100 101 bool find(const std::string §ion, const std::string &entry, 102 std::string &value) const; 103 bool findDefault(const std::string §ion, const std::string &entry, 104 std::string &value) const; 105 106 bool printUnreferenced(); 107 108 void dump(); 109}; 110 111#endif // __INIFILE_HH__ 112