110458Sandreas.hansson@arm.com/* 210458Sandreas.hansson@arm.com * Copyright (c) 2014 ARM Limited 310458Sandreas.hansson@arm.com * All rights reserved 410458Sandreas.hansson@arm.com * 510458Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 610458Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 710458Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 810458Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 910458Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 1010458Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 1110458Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 1210458Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 1310458Sandreas.hansson@arm.com * 1410458Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 1510458Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 1610458Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 1710458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 1810458Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1910458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 2010458Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 2110458Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 2210458Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 2310458Sandreas.hansson@arm.com * this software without specific prior written permission. 2410458Sandreas.hansson@arm.com * 2510458Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2610458Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2710458Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2810458Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2910458Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3010458Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3110458Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3210458Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3310458Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3410458Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3510458Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3610458Sandreas.hansson@arm.com * 3710458Sandreas.hansson@arm.com * Authors: Andrew Bardsley 3810458Sandreas.hansson@arm.com */ 3910458Sandreas.hansson@arm.com 4010458Sandreas.hansson@arm.com#include "sim/cxx_config_ini.hh" 4110458Sandreas.hansson@arm.com 4211800Sbrandon.potter@amd.com#include "base/str.hh" 4311800Sbrandon.potter@amd.com 4410458Sandreas.hansson@arm.combool 4510458Sandreas.hansson@arm.comCxxIniFile::getParam(const std::string &object_name, 4610458Sandreas.hansson@arm.com const std::string ¶m_name, 4710458Sandreas.hansson@arm.com std::string &value) const 4810458Sandreas.hansson@arm.com{ 4910458Sandreas.hansson@arm.com return iniFile.find(object_name, param_name, value); 5010458Sandreas.hansson@arm.com} 5110458Sandreas.hansson@arm.com 5210458Sandreas.hansson@arm.combool 5310458Sandreas.hansson@arm.comCxxIniFile::getParamVector(const std::string &object_name, 5410458Sandreas.hansson@arm.com const std::string ¶m_name, 5510458Sandreas.hansson@arm.com std::vector<std::string> &values) const 5610458Sandreas.hansson@arm.com{ 5710458Sandreas.hansson@arm.com std::string value; 5810458Sandreas.hansson@arm.com bool ret = iniFile.find(object_name, param_name, value); 5910458Sandreas.hansson@arm.com 6010458Sandreas.hansson@arm.com if (ret) { 6110458Sandreas.hansson@arm.com std::vector<std::string> sub_object_names; 6210458Sandreas.hansson@arm.com 6310458Sandreas.hansson@arm.com tokenize(values, value, ' ', true); 6410458Sandreas.hansson@arm.com } 6510458Sandreas.hansson@arm.com 6610458Sandreas.hansson@arm.com return ret; 6710458Sandreas.hansson@arm.com} 6810458Sandreas.hansson@arm.com 6910458Sandreas.hansson@arm.combool 7010458Sandreas.hansson@arm.comCxxIniFile::getPortPeers(const std::string &object_name, 7110458Sandreas.hansson@arm.com const std::string &port_name, 7210458Sandreas.hansson@arm.com std::vector<std::string> &peers) const 7310458Sandreas.hansson@arm.com{ 7410458Sandreas.hansson@arm.com return getParamVector(object_name, port_name, peers); 7510458Sandreas.hansson@arm.com} 7610458Sandreas.hansson@arm.com 7710458Sandreas.hansson@arm.combool 7810458Sandreas.hansson@arm.comCxxIniFile::objectExists(const std::string &object) const 7910458Sandreas.hansson@arm.com{ 8010458Sandreas.hansson@arm.com return iniFile.sectionExists(object); 8110458Sandreas.hansson@arm.com} 8210458Sandreas.hansson@arm.com 8310458Sandreas.hansson@arm.comvoid 8410458Sandreas.hansson@arm.comCxxIniFile::getAllObjectNames(std::vector<std::string> &list) const 8510458Sandreas.hansson@arm.com{ 8610458Sandreas.hansson@arm.com iniFile.getSectionNames(list); 8710458Sandreas.hansson@arm.com} 8810458Sandreas.hansson@arm.com 8910458Sandreas.hansson@arm.comvoid 9010458Sandreas.hansson@arm.comCxxIniFile::getObjectChildren(const std::string &object_name, 9110458Sandreas.hansson@arm.com std::vector<std::string> &children, bool return_paths) const 9210458Sandreas.hansson@arm.com{ 9310458Sandreas.hansson@arm.com if (!getParamVector(object_name, "children", children)) 9410458Sandreas.hansson@arm.com return; 9510458Sandreas.hansson@arm.com 9610458Sandreas.hansson@arm.com if (return_paths && object_name != "root") { 9710458Sandreas.hansson@arm.com for (auto i = children.begin(); i != children.end(); ++i) 9810458Sandreas.hansson@arm.com *i = object_name + "." + *i; 9910458Sandreas.hansson@arm.com } 10010458Sandreas.hansson@arm.com} 10110458Sandreas.hansson@arm.com 10210458Sandreas.hansson@arm.combool 10310458Sandreas.hansson@arm.comCxxIniFile::load(const std::string &filename) 10410458Sandreas.hansson@arm.com{ 10510458Sandreas.hansson@arm.com return iniFile.load(filename); 10610458Sandreas.hansson@arm.com} 107