AddrRange: Simplify Range by removing stream input/output
This patch simplifies the Range class in preparation for the introduction of a more specific AddrRange class that allows interleaving/striping. The only place where the parsing was used was in the unit test.
This commit is contained in:
parent
12c291f9d7
commit
c34df76272
|
@ -52,7 +52,6 @@ Source('output.cc')
|
|||
Source('pollevent.cc')
|
||||
Source('random.cc')
|
||||
Source('random_mt.cc')
|
||||
Source('range.cc')
|
||||
if env['TARGET_ISA'] != 'no':
|
||||
Source('remote_gdb.cc')
|
||||
Source('socket.cc')
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2004-2005 The Regents of The University of Michigan
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer;
|
||||
* redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution;
|
||||
* neither the name of the copyright holders nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Authors: Nathan Binkert
|
||||
*/
|
||||
|
||||
#include "base/intmath.hh"
|
||||
#include "base/range.hh"
|
||||
#include "base/str.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
template <class T>
|
||||
bool
|
||||
__x_parse_range(const std::string &str, T &first, T &last)
|
||||
{
|
||||
std::vector<std::string> values;
|
||||
tokenize(values, str, ':');
|
||||
|
||||
T thefirst, thelast;
|
||||
|
||||
if (values.size() != 2)
|
||||
return false;
|
||||
|
||||
std::string s = values[0];
|
||||
std::string e = values[1];
|
||||
|
||||
if (!to_number(s, thefirst))
|
||||
return false;
|
||||
|
||||
bool increment = (e[0] == '+');
|
||||
if (increment)
|
||||
e = e.substr(1);
|
||||
|
||||
if (!to_number(e, thelast))
|
||||
return false;
|
||||
|
||||
if (increment)
|
||||
thelast += thefirst - 1;
|
||||
|
||||
first = thefirst;
|
||||
last = thelast;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#define RANGE_PARSE(type) \
|
||||
template<> bool \
|
||||
__parse_range(const std::string &s, type &first, type &last) \
|
||||
{ return __x_parse_range(s, first, last); }
|
||||
|
||||
RANGE_PARSE(unsigned long long)
|
||||
RANGE_PARSE(signed long long)
|
||||
RANGE_PARSE(unsigned long)
|
||||
RANGE_PARSE(signed long)
|
||||
RANGE_PARSE(unsigned int)
|
||||
RANGE_PARSE(signed int)
|
||||
RANGE_PARSE(unsigned short)
|
||||
RANGE_PARSE(signed short)
|
||||
RANGE_PARSE(unsigned char)
|
||||
RANGE_PARSE(signed char)
|
|
@ -32,21 +32,6 @@
|
|||
#ifndef __BASE_RANGE_HH__
|
||||
#define __BASE_RANGE_HH__
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* @param s range string
|
||||
* EndExclusive Ranges are in the following format:
|
||||
* @verbatim
|
||||
* <range> := {<start_val>}:{<end>}
|
||||
* <start> := <end_val> | +<delta>
|
||||
* @endverbatim
|
||||
*/
|
||||
template <class T>
|
||||
bool __parse_range(const std::string &s, T &start, T &end);
|
||||
|
||||
template <class T>
|
||||
struct Range
|
||||
{
|
||||
|
@ -65,12 +50,6 @@ struct Range
|
|||
: start(r.start), end(r.end)
|
||||
{}
|
||||
|
||||
Range(const std::string &s)
|
||||
{
|
||||
if (!__parse_range(s, start, end))
|
||||
invalidate();
|
||||
}
|
||||
|
||||
template <class U>
|
||||
const Range<T> &operator=(const Range<U> &r)
|
||||
{
|
||||
|
@ -87,26 +66,11 @@ struct Range
|
|||
return *this;
|
||||
}
|
||||
|
||||
const Range &operator=(const std::string &s)
|
||||
{
|
||||
if (!__parse_range(s, start, end))
|
||||
invalidate();
|
||||
return *this;
|
||||
}
|
||||
|
||||
void invalidate() { start = 1; end = 0; }
|
||||
T size() const { return end - start + 1; }
|
||||
bool valid() const { return start < end; }
|
||||
};
|
||||
|
||||
template <class T>
|
||||
inline std::ostream &
|
||||
operator<<(std::ostream &o, const Range<T> &r)
|
||||
{
|
||||
o << '[' << r.start << "," << r.end << ']';
|
||||
return o;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline Range<T>
|
||||
RangeEx(T start, T end)
|
||||
|
|
|
@ -43,7 +43,6 @@ UnitTest('initest', 'initest.cc')
|
|||
UnitTest('lrutest', 'lru_test.cc')
|
||||
UnitTest('nmtest', 'nmtest.cc')
|
||||
UnitTest('offtest', 'offtest.cc')
|
||||
UnitTest('rangetest', 'rangetest.cc')
|
||||
UnitTest('rangemaptest', 'rangemaptest.cc')
|
||||
UnitTest('refcnttest', 'refcnttest.cc')
|
||||
UnitTest('strnumtest', 'strnumtest.cc')
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2005 The Regents of The University of Michigan
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met: redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer;
|
||||
* redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution;
|
||||
* neither the name of the copyright holders nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Authors: Nathan Binkert
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "base/range.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
Range<int> r1(make_pair(9, 28));
|
||||
Range<unsigned> r2("0x1000:+0x100");
|
||||
|
||||
cout << r1 << "\n"
|
||||
<< r2 << "\n";
|
||||
|
||||
#define RANGETEST(X, C, Y) \
|
||||
cout << X << " "#C" " << Y << " => " << \
|
||||
((X C Y) ? "true" : "false") << "\n"
|
||||
|
||||
#define TESTEM(X, Y) do { \
|
||||
RANGETEST(X, < , Y); \
|
||||
RANGETEST(X, <=, Y); \
|
||||
RANGETEST(X, > , Y); \
|
||||
RANGETEST(X, >=, Y); \
|
||||
RANGETEST(X, ==, Y); \
|
||||
RANGETEST(X, !=, Y); \
|
||||
RANGETEST(Y, < , X); \
|
||||
RANGETEST(Y, <=, X); \
|
||||
RANGETEST(Y, > , X); \
|
||||
RANGETEST(Y, >=, X); \
|
||||
RANGETEST(Y, ==, X); \
|
||||
RANGETEST(Y, !=, X); \
|
||||
} while (0)
|
||||
|
||||
TESTEM(8, r1);
|
||||
TESTEM(9, r1);
|
||||
TESTEM(27, r1);
|
||||
TESTEM(28, r1);
|
||||
|
||||
TESTEM(0x0fff, r2);
|
||||
TESTEM(0x1000, r2);
|
||||
TESTEM(0x10ff, r2);
|
||||
TESTEM(0x1100, r2);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue