home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / freedraft.tar.gz / freedraft.tar / FREEdraft-050298 / GEOMLIB2D / pick.cpp < prev    next >
C/C++ Source or Header  |  1998-04-18  |  3KB  |  94 lines

  1. // pick.cpp
  2.  
  3. // Copyright (C) 1997  Cliff Johnson                                  //
  4. //                                                                         //
  5. // This is free software; you can redistribute it and/or           //
  6. // modify it under the terms of the GNU General Public             //
  7. // License as published by the Free Software Foundation; either            //
  8. // version 2 of the License, or (at your option) any later version.        //
  9. //                                                                         //
  10. // This software is distributed in the hope that it will be useful,         //
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of          //
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       //
  13. // General Public License for more details.                        //
  14. //                                                                         //
  15. // You should have received a copy of the GNU General Public       //
  16. // License along with this library (see COPYING.LIB); if not, write to the //
  17. // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //
  18. //   
  19.  
  20. #include "pick.h"
  21.  
  22. Pick::Pick(const Geom* g, const Point& p,Locale l ): point(p), locale(l)
  23. {
  24.     geometry = g;
  25. }
  26.  
  27. //Pick::Pick(const Selection&, int r) // a selection and a rounding value
  28. // I am temped to make a 'smart' container. responsible for
  29. // allocating and managing itself. But as I am unsure of the best way, 
  30. // for now, making the user allocate the geometry may be better, because in 
  31. // any case the memory freeing method must be called, and in this way the 
  32. // user will be reminded that this is so. 
  33.  
  34. Pick::Pick(const Pick& p )
  35. {
  36.     geometry = p.geometry;
  37.     point = p.point;
  38.     locale = p.locale;
  39. }
  40.  
  41.  
  42. Pick& Pick::operator=(const Pick& p )
  43. {
  44.     geometry = p.geometry;
  45.     point = p.point;
  46.     locale = p.locale;
  47.     return *this;
  48. }
  49.  
  50. bool operator==(const Pick& p1, const Pick& p2)
  51. {
  52.     return ((p1.geometry == p2.geometry)&&( p1.point == p2.point)&&(p1.locale == p2.locale));
  53. }
  54.  
  55.  
  56. ostream& operator<<(ostream& os, const Pick& p)
  57. {
  58.     os << "Pick: Type() = " << p.geometry->Type() 
  59.           << " address = " << p.geometry
  60.           << " Point = " << p.point ;
  61.     if(p.locale== UNUSED)os << " is unused\n";
  62.     else if(p.locale==PERSISTENT)os << " is persistent";
  63.     else if(p.locale==LOCAL) os << " is local";
  64.     else if(p.locale==DELETED) os << " has been deleted";
  65.     else if(p.locale==LOCKED) os << " is locked";
  66.     return os;
  67.           
  68. }
  69.  
  70. void Pick::CleanUp()
  71. {
  72.     if(locale == LOCAL ) 
  73.     {
  74.         delete geometry;
  75.         locale = DELETED;
  76.     }
  77. }
  78.  
  79. bool Pick::Lock() // locking a pick prevents the pointered geom from being deleted during clean up.
  80. {
  81.     if(locale == LOCKED ) return true;
  82.     if(locale != LOCAL) return false;
  83.     locale = LOCKED;
  84.     return true;
  85. }
  86.  
  87. bool Pick::Unlock()
  88. {
  89.     if(locale != LOCKED ) return false;
  90.     locale = LOCAL;
  91.     return true;
  92. }
  93.     
  94.