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 / BoxPoint.h < prev    next >
C/C++ Source or Header  |  1998-03-25  |  5KB  |  217 lines

  1. // $Id: BoxPoint.h,v 1.11 1998/03/25 12:42:27 zeller Exp $  -*- C++ -*-
  2. // BoxPoint 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_BoxPoint_h
  30. #define _DDD_BoxPoint_h
  31.  
  32. #ifdef __GNUG__
  33. #pragma interface
  34. #endif
  35.  
  36. // A BoxPoint is a pair of coordinates accessed by a BoxDimension (X
  37. // or Y).  A BoxPoint is typically used for positions, but is also a
  38. // base class for sizes (BoxSize) and extents (BoxExtend)
  39.  
  40. #include "BoxC.h"
  41. #include "BoxD.h"
  42. #include "bool.h"
  43. #include <iostream.h>
  44. class BoxRegion;
  45.  
  46. #define CHECK_VALID(p) { if (!isValid() || !p.isValid()) return Point(); }
  47.  
  48. class BoxPoint {
  49. protected:
  50.     BoxCoordinate point[NDimensions];
  51. public:
  52.  
  53.     // Constructors
  54.     BoxPoint(BoxCoordinate x, BoxCoordinate y) 
  55.     {
  56.     point[X] = x;
  57.     point[Y] = y;
  58.     }
  59.     BoxPoint(BoxCoordinate c) 
  60.     {
  61.     point[X] = point[Y] = c;
  62.     }
  63.     BoxPoint()
  64.     {
  65.     point[X] = point[Y] = NoCoordinate;
  66.     }
  67.     BoxPoint(const BoxPoint& p) 
  68.     {
  69.     point[X] = p.point[X];
  70.     point[Y] = p.point[Y];
  71.     }
  72.  
  73.     // Check for validity
  74.     bool isValid() const
  75.     {
  76.     return point[X] != NoCoordinate && point[Y] != NoCoordinate;
  77.     }
  78.  
  79.     // Operators
  80.     BoxPoint operator + (const BoxPoint& p) const
  81.     {
  82.     if (isValid() && p.isValid())
  83.         return BoxPoint(point[X] + p.point[X], point[Y] + p.point[Y]);
  84.     else
  85.         return BoxPoint();
  86.     }
  87.     BoxPoint operator - (const BoxPoint& p) const
  88.     {
  89.     if (isValid() && p.isValid())
  90.         return BoxPoint(point[X] - p.point[X], point[Y] - p.point[Y]);
  91.     else
  92.         return BoxPoint();
  93.     }
  94.     BoxPoint operator * (const BoxPoint& p) const
  95.     {
  96.     if (isValid() && p.isValid())
  97.         return BoxPoint(point[X] * p.point[X], point[Y] * p.point[Y]);
  98.     else
  99.         return BoxPoint();
  100.     }
  101.     BoxPoint operator / (const BoxPoint& p) const
  102.     {
  103.     if (isValid() && p.isValid())
  104.         return BoxPoint(point[X] / p.point[X], point[Y] / p.point[Y]);
  105.     else
  106.         return BoxPoint();
  107.     }
  108.     BoxPoint operator % (const BoxPoint& p) const
  109.     {
  110.     if (isValid() && p.isValid())
  111.         return BoxPoint(point[X] % p.point[X], point[Y] % p.point[Y]);
  112.     else
  113.         return BoxPoint();
  114.     }
  115.  
  116.     void operator += (const BoxPoint& p) 
  117.     {
  118.     if (isValid() && p.isValid())
  119.     {
  120.         point[X] += p.point[X];
  121.         point[Y] += p.point[Y];
  122.     }
  123.     }
  124.     void operator -= (const BoxPoint& p) 
  125.     {
  126.     if (isValid() && p.isValid())
  127.     {
  128.         point[X] -= p.point[X];
  129.         point[Y] -= p.point[Y];
  130.     }
  131.     }
  132.     void operator *= (const BoxPoint& p) 
  133.     {
  134.     if (isValid() && p.isValid())
  135.     {
  136.         point[X] *= p.point[X];
  137.         point[Y] *= p.point[Y];
  138.     }
  139.     }
  140.     void operator /= (const BoxPoint& p) 
  141.     {
  142.     if (isValid() && p.isValid())
  143.     {
  144.         point[X] /= p.point[X];
  145.         point[Y] /= p.point[Y];
  146.     }
  147.     }
  148.     void operator %= (const BoxPoint& p) 
  149.     {
  150.     if (isValid() && p.isValid())
  151.     {
  152.         point[X] %= p.point[X];
  153.         point[Y] %= p.point[Y];
  154.     }
  155.     }
  156.  
  157.     // Resources
  158.     const BoxCoordinate& operator [] (const BoxDimension& dimension) const
  159.     {
  160.     return point[dimension];
  161.     }
  162.     BoxCoordinate& operator [] (const BoxDimension& dimension)
  163.     {
  164.     return point[dimension];
  165.     }
  166.  
  167.     // I/O
  168.     friend ostream& operator << (ostream& stream, 
  169.                  const BoxPoint& point);
  170. };
  171.  
  172. // Comparisons
  173. inline bool operator == (const BoxPoint& p1, const BoxPoint& p2)
  174. {
  175.     return p1[X] == p2[X] && p1[Y] == p2[Y];
  176. }
  177.  
  178. inline bool operator != (const BoxPoint& p1, const BoxPoint& p2)
  179. {
  180.     return p1[X] != p2[X] || p1[Y] != p2[Y];
  181. }
  182.  
  183. inline bool operator > (const BoxPoint& p1, const BoxPoint& p2)
  184. {
  185.     if (p1.isValid() && p2.isValid())
  186.     return p1[X] > p2[X] || p1[Y] > p2[Y];
  187.     else
  188.     return false;
  189. }
  190.  
  191. inline bool operator < (const BoxPoint& p1, const BoxPoint& p2)
  192. {
  193.     if (p1.isValid() && p2.isValid())
  194.     return p1[X] < p2[X] || p1[Y] < p2[Y];
  195.     else
  196.     return false;
  197. }
  198.  
  199. inline bool operator >= (const BoxPoint& p1, const BoxPoint& p2)
  200. {
  201.     if (p1.isValid() && p2.isValid())
  202.     return p1[X] >= p2[X] || p1[Y] >= p2[Y];
  203.     else
  204.     return false;
  205. }
  206.  
  207. inline bool operator <= (const BoxPoint& p1, const BoxPoint& p2)
  208. {
  209.     if (p1.isValid() && p2.isValid())
  210.     return p1[X] <= p2[X] || p1[Y] <= p2[Y];
  211.     else
  212.     return false;
  213. }
  214.  
  215. #endif // _DDD_BoxPoint_h
  216. // DON'T ADD ANYTHING BEHIND THIS #endif
  217.