home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / BoxRegion.h < prev    next >
C/C++ Source or Header  |  1998-03-25  |  4KB  |  126 lines

  1. // $Id: BoxRegion.h,v 1.11 1998/03/25 12:42:28 zeller Exp $  -*- C++ -*-
  2. // BoxRegion class
  3.  
  4. // Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. #ifndef _DDD_BoxRegion_h
  30. #define _DDD_BoxRegion_h
  31.  
  32. #ifdef __GNUG__
  33. #pragma interface
  34. #endif
  35.  
  36.  
  37. // A BoxRegion is a rectangular area which has an ORIGIN and a SPACE.
  38.  
  39. #include <iostream.h>
  40. #include "misc.h"
  41. #include "BoxPoint.h"
  42. #include "BoxSize.h"
  43. #include "bool.h"
  44. #include "BoxD.h"
  45. #include "BoxC.h"
  46.  
  47. class BoxRegion {
  48. private:
  49.     BoxPoint _origin;
  50.     BoxSize  _space;
  51.  
  52. public:
  53.     // Constructors
  54.     BoxRegion(const BoxPoint& o, const BoxSize& s)
  55.     : _origin(o), _space(s)
  56.     {}
  57.  
  58.     BoxRegion(const BoxPoint& o)
  59.     : _origin(o), _space()
  60.     {}
  61.  
  62.     BoxRegion()
  63.     : _origin(), _space()
  64.     {}
  65.  
  66.     BoxRegion(const BoxRegion& r):
  67.     _origin(r._origin), _space(r._space)
  68.     {}
  69.  
  70.     // Resources
  71.     BoxPoint& origin()                    { return _origin; }
  72.     BoxCoordinate& origin(BoxDimension d) { return _origin[d]; }
  73.     BoxSize& space()                      { return _space; }
  74.     BoxCoordinate& space(BoxDimension d)  { return _space[d]; }
  75.  
  76.     const BoxPoint& origin() const                    { return _origin; }
  77.     const BoxCoordinate& origin(BoxDimension d) const { return _origin[d]; }
  78.     const BoxSize& space() const                      { return _space; }
  79.     const BoxCoordinate& space(BoxDimension d) const  { return _space[d]; }
  80.  
  81.     // Comparison
  82.     bool operator == (const BoxRegion& r) const
  83.     { return origin() == r.origin() && space() == r.space(); }
  84.     bool operator != (const BoxRegion& r) const
  85.     { return origin() != r.origin() || space() != r.space(); }
  86.  
  87.     // Check if BoxRegion is (partially) contained in R
  88.     bool operator <= (const BoxRegion& r) const
  89.     {
  90.     for (BoxDimension d = X; d <= Y; d++)
  91.         if (r.origin(d) >= origin(d) + space(d) ||
  92.         origin(d) >= r.origin(d) + r.space(d))
  93.         return false;
  94.  
  95.     return true;
  96.     }
  97.  
  98.     // Rectangular intersection of two regions
  99.     BoxRegion operator & (const BoxRegion& r) const;
  100.  
  101.     // Rectangular union of two regions
  102.     BoxRegion operator | (const BoxRegion& r) const;
  103.  
  104.     // Check if region is empty
  105.     bool isEmpty() const
  106.     {
  107.     return space() <= BoxSize(0,0);
  108.     }
  109.  
  110.     // Debugging
  111.     friend ostream& operator << (ostream& s, const BoxRegion& r);
  112. };
  113.  
  114. // Check if P is contained in R
  115. inline bool operator <= (const BoxPoint& p, const BoxRegion& r)
  116. {
  117.     for (BoxDimension d = X; d <= Y; d++)
  118.     if (p[d] < r.origin(d) || p[d] >= r.origin(d) + r.space(d))
  119.         return false;
  120.  
  121.     return true;
  122. }
  123.  
  124. #endif // _DDD_BoxRegion_h
  125. // DON'T ADD ANYTHING BEHIND THIS #endif
  126.