Program Listing for File ConfigParser.h

Return to documentation for file (necsim/ConfigParser.h)

// This file is part of necsim project which is released under MIT license.
// See file **LICENSE.txt** or visit https://opensource.org/licenses/MIT) for full license details.
//
#ifndef CONFIGPARSER_H
#define CONFIGPARSER_H

/************************************************************
                                                                                                                                                                                                INCLUDES
 ************************************************************/
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <stdexcept>
#include <vector>
#include <cstring>

#ifndef WIN_INSTALL

#include <unistd.h>

#endif

#include <cmath>
#include <cctype>
#include <algorithm>

using namespace std;
using std::string;
namespace necsim
{
    void importArgs(const unsigned int &argc, char* argv[], vector<string> &comargs);

    //

    struct SectionOption
    {
        string section;
        vector<string> val;
        vector<string> refs;

        SectionOption() : val(), refs()
        {
            section = "nullSectionOption";
        }

        string getOption(string refval);

        friend ostream &operator<<(ostream &os, const SectionOption &k);

        friend istream &operator>>(istream &is, SectionOption &k);
    };

    class ConfigParser
    {
    private:
        string config_file;
        bool configSet;
        bool isMain;  // is true if this is the main command line import (and therefore we want to delete the first few
        // command line options)
        bool isFullParser;  // if this is true, each KeyOption structure will be returned after each read.
        vector<SectionOption> configs;  // all config data if full parse is true.
    public:
        ConfigParser() : configs()
        {
            config_file = "none";
            configSet = false;
            isMain = false;
            isFullParser = false;
        }

        void setConfig(const string &file, bool main, bool full_parse = false);

        void parseConfig();

        void parseConfig(istream &istream1);

        vector<SectionOption> getSectionOptions();

        void setSectionOption(string section, string reference, string value);

        SectionOption operator[](unsigned long index);

        unsigned long getSectionOptionsSize();

        vector<string> getSections();

        bool hasSection(const string &sec);

        vector<string> getSectionValues(string sec);

        string getSectionOptions(string section, string ref);

        string getSectionOptions(string section, string ref, string def);

        int importConfig(vector<string> &comargs);

        friend ostream &operator<<(ostream &os, const ConfigParser &c);

        friend istream &operator>>(istream &is, ConfigParser &c);
    };
}
#endif // CONFIGPARSER_H