110428Sandreas.hansson@arm.com/*
210428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Delft
310428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Eindhoven
410428Sandreas.hansson@arm.com * Copyright (c) 2012-2014, TU Kaiserslautern
510428Sandreas.hansson@arm.com * All rights reserved.
610428Sandreas.hansson@arm.com *
710428Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without
810428Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are
910428Sandreas.hansson@arm.com * met:
1010428Sandreas.hansson@arm.com *
1110428Sandreas.hansson@arm.com * 1. Redistributions of source code must retain the above copyright
1210428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer.
1310428Sandreas.hansson@arm.com *
1410428Sandreas.hansson@arm.com * 2. Redistributions in binary form must reproduce the above copyright
1510428Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the
1610428Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution.
1710428Sandreas.hansson@arm.com *
1810428Sandreas.hansson@arm.com * 3. Neither the name of the copyright holder nor the names of its
1910428Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from
2010428Sandreas.hansson@arm.com * this software without specific prior written permission.
2110428Sandreas.hansson@arm.com *
2210428Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
2310428Sandreas.hansson@arm.com * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2410428Sandreas.hansson@arm.com * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
2510428Sandreas.hansson@arm.com * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2610428Sandreas.hansson@arm.com * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2710428Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2810428Sandreas.hansson@arm.com * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2910428Sandreas.hansson@arm.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3010428Sandreas.hansson@arm.com * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3110428Sandreas.hansson@arm.com * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3210428Sandreas.hansson@arm.com * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3310428Sandreas.hansson@arm.com *
3410428Sandreas.hansson@arm.com * Authors: Andreas Hansson
3510428Sandreas.hansson@arm.com *
3610428Sandreas.hansson@arm.com */
3710428Sandreas.hansson@arm.com
3810428Sandreas.hansson@arm.com#include "Parameter.h"
3910428Sandreas.hansson@arm.com
4010428Sandreas.hansson@arm.com#include <iomanip>
4110428Sandreas.hansson@arm.com#include "Utils.h"
4210428Sandreas.hansson@arm.com
4310428Sandreas.hansson@arm.comusing namespace Data;
4410428Sandreas.hansson@arm.comusing namespace std;
4510428Sandreas.hansson@arm.com
4610428Sandreas.hansson@arm.comParameter::Parameter(const string& id, const string& type,
4710428Sandreas.hansson@arm.com                     const string& value) : id(id), type(type), value(value)
4810428Sandreas.hansson@arm.com{
4910428Sandreas.hansson@arm.com}
5010428Sandreas.hansson@arm.com
5110428Sandreas.hansson@arm.comstring Parameter::getId() const
5210428Sandreas.hansson@arm.com{
5310428Sandreas.hansson@arm.com  return id;
5410428Sandreas.hansson@arm.com}
5510428Sandreas.hansson@arm.com
5610428Sandreas.hansson@arm.comstring Parameter::getType() const
5710428Sandreas.hansson@arm.com{
5810428Sandreas.hansson@arm.com  return type;
5910428Sandreas.hansson@arm.com}
6010428Sandreas.hansson@arm.com
6110428Sandreas.hansson@arm.comint Parameter::getIntValue() const
6210428Sandreas.hansson@arm.com{
6310428Sandreas.hansson@arm.com  return fromString<int>(value);
6410428Sandreas.hansson@arm.com}
6510428Sandreas.hansson@arm.com
6610428Sandreas.hansson@arm.comunsigned int Parameter::getUIntValue() const
6710428Sandreas.hansson@arm.com{
6810428Sandreas.hansson@arm.com  bool isHex = value.size() > 1 && value[0] == '0' && value[1] == 'x';
6910428Sandreas.hansson@arm.com
7010428Sandreas.hansson@arm.com  return fromString<unsigned int>(value, isHex ? std::hex : std::dec);
7110428Sandreas.hansson@arm.com}
7210428Sandreas.hansson@arm.com
7310428Sandreas.hansson@arm.com#ifdef _LP64
7410428Sandreas.hansson@arm.com
7510428Sandreas.hansson@arm.comsize_t Parameter::getSizeTValue() const
7610428Sandreas.hansson@arm.com{
7710428Sandreas.hansson@arm.com  bool isHex = value.size() > 1 && value[0] == '0' && value[1] == 'x';
7810428Sandreas.hansson@arm.com
7910428Sandreas.hansson@arm.com  return fromString<size_t>(value, isHex ? std::hex : std::dec);
8010428Sandreas.hansson@arm.com}
8110428Sandreas.hansson@arm.com
8210428Sandreas.hansson@arm.com#endif
8310428Sandreas.hansson@arm.com
8410428Sandreas.hansson@arm.comdouble Parameter::getDoubleValue() const
8510428Sandreas.hansson@arm.com{
8610428Sandreas.hansson@arm.com  return fromString<double>(value);
8710428Sandreas.hansson@arm.com}
8810428Sandreas.hansson@arm.com
8910428Sandreas.hansson@arm.combool Parameter::getBoolValue() const
9010428Sandreas.hansson@arm.com{
9110428Sandreas.hansson@arm.com  return fromString<bool>(value);
9210428Sandreas.hansson@arm.com}
9310428Sandreas.hansson@arm.com
9410428Sandreas.hansson@arm.comstring Parameter::getValue() const
9510428Sandreas.hansson@arm.com{
9610428Sandreas.hansson@arm.com  return value;
9710428Sandreas.hansson@arm.com}
9810428Sandreas.hansson@arm.com
9910428Sandreas.hansson@arm.comParameter Data::HexParameter(const string& id, int value)
10010428Sandreas.hansson@arm.com{
10110428Sandreas.hansson@arm.com  std::ostringstream ss;
10210428Sandreas.hansson@arm.com
10310428Sandreas.hansson@arm.com  ss << "0x" << hex << setw(8) << setfill('0') << value;
10410428Sandreas.hansson@arm.com
10510428Sandreas.hansson@arm.com  return Parameter(id, "int", ss.str());
10610428Sandreas.hansson@arm.com}
10710428Sandreas.hansson@arm.com
10810428Sandreas.hansson@arm.comParameter Data::StringParameter(const string& id, const string& value)
10910428Sandreas.hansson@arm.com{
11010428Sandreas.hansson@arm.com  return Parameter(id, "string", value);
11110428Sandreas.hansson@arm.com}
11210428Sandreas.hansson@arm.com
11310428Sandreas.hansson@arm.comostream& Data::operator<<(ostream& os, const Parameter& parameter)
11410428Sandreas.hansson@arm.com{
11510428Sandreas.hansson@arm.com  os << "<parameter " <<
11610428Sandreas.hansson@arm.com    "id=\"" << parameter.getId() << "\" " <<
11710428Sandreas.hansson@arm.com    "type=\"" << parameter.getType() << "\" "
11810428Sandreas.hansson@arm.com                                      "value=\"" << parameter.getValue() << "\" />";
11910428Sandreas.hansson@arm.com
12010428Sandreas.hansson@arm.com  return os;
12110428Sandreas.hansson@arm.com}
122