addr_range.hh revision 9235
12SN/A/*
29235Sandreas.hansson@arm.com * Copyright (c) 2012 ARM Limited
39235Sandreas.hansson@arm.com * All rights reserved
49235Sandreas.hansson@arm.com *
59235Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall
69235Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual
79235Sandreas.hansson@arm.com * property including but not limited to intellectual property relating
89235Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software
99235Sandreas.hansson@arm.com * licensed hereunder.  You may use the software subject to the license
109235Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated
119235Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software,
129235Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form.
139235Sandreas.hansson@arm.com *
141762SN/A * Copyright (c) 2002-2005 The Regents of The University of Michigan
152SN/A * All rights reserved.
162SN/A *
172SN/A * Redistribution and use in source and binary forms, with or without
182SN/A * modification, are permitted provided that the following conditions are
192SN/A * met: redistributions of source code must retain the above copyright
202SN/A * notice, this list of conditions and the following disclaimer;
212SN/A * redistributions in binary form must reproduce the above copyright
222SN/A * notice, this list of conditions and the following disclaimer in the
232SN/A * documentation and/or other materials provided with the distribution;
242SN/A * neither the name of the copyright holders nor the names of its
252SN/A * contributors may be used to endorse or promote products derived from
262SN/A * this software without specific prior written permission.
272SN/A *
282SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
292SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
302SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
312SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
322SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
332SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
342SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
352SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
362SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
372SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
382SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
392665SN/A *
402665SN/A * Authors: Nathan Binkert
412665SN/A *          Steve Reinhardt
429235Sandreas.hansson@arm.com *          Andreas Hansson
432SN/A */
442SN/A
459235Sandreas.hansson@arm.com#ifndef __BASE_ADDR_RANGE_HH__
469235Sandreas.hansson@arm.com#define __BASE_ADDR_RANGE_HH__
472SN/A
489235Sandreas.hansson@arm.com#include "base/types.hh"
499235Sandreas.hansson@arm.com
509235Sandreas.hansson@arm.comclass AddrRange
512SN/A{
522SN/A
539235Sandreas.hansson@arm.com  public:
542SN/A
559235Sandreas.hansson@arm.com    Addr start;
569235Sandreas.hansson@arm.com    Addr end;
579235Sandreas.hansson@arm.com
589235Sandreas.hansson@arm.com    AddrRange()
599235Sandreas.hansson@arm.com        : start(1), end(0)
609235Sandreas.hansson@arm.com    {}
619235Sandreas.hansson@arm.com
629235Sandreas.hansson@arm.com    AddrRange(Addr _start, Addr _end)
639235Sandreas.hansson@arm.com        : start(_start), end(_end)
649235Sandreas.hansson@arm.com    {}
659235Sandreas.hansson@arm.com
669235Sandreas.hansson@arm.com    AddrRange(const std::pair<Addr, Addr> &r)
671106SN/A        : start(r.first), end(r.second)
68532SN/A    {}
69532SN/A
709235Sandreas.hansson@arm.com    Addr size() const { return end - start + 1; }
71531SN/A    bool valid() const { return start < end; }
72531SN/A};
732SN/A
74531SN/A/**
759235Sandreas.hansson@arm.com * Keep the operators away from SWIG.
76531SN/A */
779235Sandreas.hansson@arm.com#ifndef SWIG
782SN/A
79531SN/A/**
80531SN/A * @param range1 is a range.
81531SN/A * @param range2 is a range.
82531SN/A * @return if range1 is less than range2 and does not overlap range1.
83531SN/A */
84531SN/Ainline bool
859235Sandreas.hansson@arm.comoperator<(const AddrRange& range1, const AddrRange& range2)
86531SN/A{
871106SN/A    return range1.start < range2.start;
88531SN/A}
89531SN/A
90531SN/A/**
919235Sandreas.hansson@arm.com * @param addr address in the range
929235Sandreas.hansson@arm.com * @param range range compared against.
939235Sandreas.hansson@arm.com * @return indicates that the address is not within the range.
94531SN/A */
95531SN/Ainline bool
969235Sandreas.hansson@arm.comoperator!=(const Addr& addr, const AddrRange& range)
97531SN/A{
989235Sandreas.hansson@arm.com    return addr < range.start || addr > range.end;
99531SN/A}
100531SN/A
101531SN/A/**
102531SN/A * @param range range compared against.
103531SN/A * @param pos position compared to the range.
104531SN/A * @return indicates that position pos is within the range.
105531SN/A */
1062SN/Ainline bool
1079235Sandreas.hansson@arm.comoperator==(const AddrRange& range, const Addr& addr)
108531SN/A{
1099235Sandreas.hansson@arm.com    return addr >= range.start && addr <= range.end;
110531SN/A}
1112SN/A
1129235Sandreas.hansson@arm.cominline AddrRange
1139235Sandreas.hansson@arm.comRangeEx(Addr start, Addr end)
1149235Sandreas.hansson@arm.com{ return std::make_pair(start, end - 1); }
1152SN/A
1169235Sandreas.hansson@arm.cominline AddrRange
1179235Sandreas.hansson@arm.comRangeIn(Addr start, Addr end)
1189235Sandreas.hansson@arm.com{ return std::make_pair(start, end); }
1192SN/A
1209235Sandreas.hansson@arm.cominline AddrRange
1219235Sandreas.hansson@arm.comRangeSize(Addr start, Addr size)
1229235Sandreas.hansson@arm.com{ return std::make_pair(start, start + size - 1); }
1232SN/A
1249235Sandreas.hansson@arm.com#endif // SWIG
1252SN/A
1269235Sandreas.hansson@arm.com#endif // __BASE_ADDR_RANGE_HH__
127