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:
Andreas Hansson 2012-09-19 06:15:43 -04:00
parent 12c291f9d7
commit c34df76272
5 changed files with 0 additions and 200 deletions

View file

@ -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')

View file

@ -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)

View file

@ -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)

View file

@ -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')

View file

@ -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;
}