You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.3 KiB
80 lines
2.3 KiB
/*
|
|
* Copyright 2002-2019 Intel Corporation.
|
|
*
|
|
* This software is provided to you as Sample Source Code as defined in the accompanying
|
|
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
* section 1.L.
|
|
*
|
|
* This software and the related documents are provided as is, with no express or implied
|
|
* warranties, other than those that are expressly stated in the License.
|
|
*/
|
|
|
|
|
|
#ifndef REGION_UTILS_H
|
|
#define REGION_UTILS_H
|
|
|
|
#include <sstream>
|
|
#include <string.h>
|
|
|
|
using namespace std;
|
|
namespace CONTROLLER{
|
|
class REGION_UTILS {
|
|
public:
|
|
static UINT32 StringToUINT32(string &s, const char * name, UINT32 base=10)
|
|
{
|
|
char* end = 0 ;
|
|
INT32 retval = strtoul(s.c_str(), &end, base);
|
|
ASSERT((*end == 0), "ERROR reading " + name + " from " + s);
|
|
ASSERT((retval >=0 ), name + " (" + s + ") must be positive " );
|
|
return (UINT32)retval;
|
|
}
|
|
|
|
static UINT64 StringToUINT64(string &s, const char * name, UINT32 base=10)
|
|
{
|
|
char* end = 0 ;
|
|
INT64 retval = strtoull(s.c_str(), &end, base);
|
|
ASSERT((*end == 0), "ERROR reading " + name + " from " + s);
|
|
ASSERT((retval >=0 ), name + " (" + s + ") must be positive " );
|
|
return (UINT64)retval;
|
|
}
|
|
|
|
static ADDRINT StringToADDRINT(string &s, const char * name)
|
|
{
|
|
#if defined(TARGET_IA32)
|
|
return StringToUINT32(s, name, 16);
|
|
#else
|
|
return StringToUINT64(s, name, 16);
|
|
#endif
|
|
}
|
|
|
|
static double StringToDouble(string &s, const char * name )
|
|
{
|
|
char* end = 0 ;
|
|
double retval = strtod(s.c_str(), &end);
|
|
ASSERT((*end == 0), "ERROR reading " + name + " from " + s);
|
|
return retval;
|
|
}
|
|
|
|
// Convert weight to string for setting region name
|
|
static string WeightToString(UINT32 weightX100000)
|
|
{
|
|
CHAR weight_array[8]; // xxx.xxx
|
|
string prefix = (weightX100000 == 100000) ? "1" : "0";
|
|
|
|
// WeightTimesHundredThousand naming
|
|
ASSERTX(weightX100000<10000000);
|
|
sprintf(weight_array, "%07d", weightX100000);
|
|
|
|
for (UINT32 d = 1; d < 7; d++)
|
|
{
|
|
weight_array[d] = weight_array[d + 1];
|
|
}
|
|
weight_array[0] = '-';
|
|
weight_array[7] = 0;
|
|
return prefix + string(weight_array);
|
|
}
|
|
};
|
|
}
|
|
#endif
|
|
|