From 082f12d68ec69cbdedb159493fa2f634412f5a39 Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Mon, 20 May 2013 20:45:52 +0100 Subject: New module range handles common operations on address ranges. Copied from Perforce Change: 182015 ServerID: perforce.ravenbrook.com --- mps/code/range.h | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 mps/code/range.h (limited to 'mps/code/range.h') diff --git a/mps/code/range.h b/mps/code/range.h new file mode 100644 index 00000000000..24c1ca39e2d --- /dev/null +++ b/mps/code/range.h @@ -0,0 +1,85 @@ +/* range.h: ADDRESS RANGE INTERFACE + * + * $Id$ + * Copyright (c) 2013 Ravenbrook Limited. See end of file for license. + * + * .purpose: Representation of address ranges. + */ + +#ifndef range_h +#define range_h + +#include "mpmtypes.h" + + +/* Signatures */ + +#define RangeSig ((Sig)0x5196A493) /* SIGnature RANGE */ + + +/* Prototypes */ + +typedef struct RangeStruct *Range; + +#define RangeBase(range) ((range)->base) +#define RangeLimit(range) ((range)->limit) +#define RangeSize(range) (AddrOffset(RangeBase(range), RangeLimit(range))) + +extern Res RangeInit(Range range, Addr base, Addr limit); +extern void RangeFinish(Range range); +extern Res RangeDescribe(Range range, mps_lib_FILE *stream); +extern Bool RangeCheck(Range range); +extern Bool RangeOverlap(Range range1, Range range2); + + +/* Types */ + +typedef struct RangeStruct { + Sig sig; + Addr base; + Addr limit; +} RangeStruct; + +#endif /* range_h */ + + +/* C. COPYRIGHT AND LICENSE + * + * Copyright (C) 2013 Ravenbrook Limited . + * All rights reserved. This is an open source license. Contact + * Ravenbrook for commercial licensing options. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. Redistributions in any form must be accompanied by information on how + * to obtain complete source code for this software and any accompanying + * software that uses this software. The source code must either be + * included in the distribution or be available for no more than the cost + * of distribution plus a nominal fee, and must be freely redistributable + * under reasonable conditions. For an executable file, complete source + * code means the source code for all modules it contains. It does not + * include source code for modules or files that typically accompany the + * major components of the operating system on which the executable file + * runs. + * + * 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, FITNESS FOR A PARTICULAR + * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS AND 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. + */ -- cgit v1.2.1