From 47187487f50ae040def8edebbaa3adb5b3c76531 Mon Sep 17 00:00:00 2001 From: eschnett <> Date: Thu, 1 Mar 2001 11:40:00 +0000 Subject: Initial revision darcs-hash:20010301114010-f6438-12fb8a9ffcc80e86c0a97e37b5b0dae0dbc59b79.gz --- Carpet/CarpetLib/src/bboxset.hh | 156 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 Carpet/CarpetLib/src/bboxset.hh (limited to 'Carpet/CarpetLib/src/bboxset.hh') diff --git a/Carpet/CarpetLib/src/bboxset.hh b/Carpet/CarpetLib/src/bboxset.hh new file mode 100644 index 000000000..a94c8940a --- /dev/null +++ b/Carpet/CarpetLib/src/bboxset.hh @@ -0,0 +1,156 @@ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/bboxset.hh,v 1.11 2003/09/19 16:06:41 schnetter Exp $ + +#ifndef BBOXSET_HH +#define BBOXSET_HH + +#include + +#include +#include + +#include "bbox.hh" +#include "defs.hh" +#include "vect.hh" + +using namespace std; + + + +// Forward declaration +template class bboxset; + +// template +// bboxset operator+ (const bbox& b1, const bbox& b2); +// template +// bboxset operator+ (const bbox& b, const bboxset& s); + +// template +// bboxset operator- (const bbox& b1, const bbox& b2); +// template +// bboxset operator- (const bbox& b, const bboxset& s); + +// Output +template +ostream& operator<< (ostream& os, const bboxset& s); + + + +// Bounding box class +template +class bboxset { + + // Types + typedef bbox box; + typedef set bset; + + // Fields + bset bs; + // Invariant: + // All bboxes have the same stride. + // No bbox is empty. + // The bboxes don't overlap. + +public: + + // Constructors + bboxset (); + bboxset (const box& b); + bboxset (const bboxset& s); + bboxset (const bset& bs); + + // Invariant + bool invariant () const; + + // Normalisation + void normalize (); + + // Accessors + bool empty () const { return bs.empty(); } + T size () const; + int setsize () const { return bs.size(); } + + // Add (bboxes that don't overlap) + bboxset& operator+= (const box& b); + bboxset& operator+= (const bboxset& s); + bboxset operator+ (const box& b) const; + bboxset operator+ (const bboxset& s) const; + static bboxset plus (const box& b1, const box& b2); + static bboxset plus (const box& b, const bboxset& s); + + // Union + bboxset& operator|= (const box& b); + bboxset& operator|= (const bboxset& s); + bboxset operator| (const box& b) const; + bboxset operator| (const bboxset& s) const; + + // Intersection + bboxset operator& (const box& b) const; + bboxset operator& (const bboxset& s) const; + bboxset& operator&= (const box& b); + bboxset& operator&= (const bboxset& s); + + // Difference + // friend bboxset operator- (const box& b1, const box& b2); + static bboxset minus (const box& b1, const box& b2); + bboxset operator- (const box& b) const; + bboxset& operator-= (const box& b); + bboxset& operator-= (const bboxset& s); + bboxset operator- (const bboxset& s) const; + // friend bboxset operator- (const box& b, const bboxset& s); + static bboxset minus (const box& b, const bboxset& s); + + // Equality + bool operator== (const bboxset& s) const; + bool operator!= (const bboxset& s) const; + bool operator< (const bboxset& s) const; + bool operator<= (const bboxset& s) const; + bool operator> (const bboxset& s) const; + bool operator>= (const bboxset& s) const; + + // Iterators + typedef typename bset::const_iterator const_iterator; + typedef typename bset::iterator iterator; + + const_iterator begin () const { return bs.begin(); } + const_iterator end () const { return bs.end(); } +// iterator begin () const { return bs.begin(); } +// iterator end () const { return bs.end(); } + + // Output + void output (ostream& os) const; +}; + + + +template +inline bboxset operator+ (const bbox& b1, const bbox& b2) { + return bboxset::plus(b1,b2); +} + +template +inline bboxset operator+ (const bbox& b, const bboxset& s) { + return bboxset::plus(b,s); +} + +template +inline bboxset operator- (const bbox& b1, const bbox& b2) { + return bboxset::minus(b1,b2); +} + +template +inline bboxset operator- (const bbox& b, const bboxset& s) { + return bboxset::minus(b,s); +} + + + +// Output +template +inline ostream& operator<< (ostream& os, const bboxset& s) { + s.output(os); + return os; +} + + + +#endif // BBOXSET_HH -- cgit v1.2.3