00001 #ifndef QRC_COORDINATE_H 00002 #define QRC_COORDINATE_H 00003 00013 #include "Position.h" 00014 #include <set> 00015 #include <memory> 00016 00017 00018 namespace qrk 00019 { 00023 class Coordinate 00024 { 00025 public: 00026 Coordinate(void); 00027 virtual ~Coordinate(void); 00028 00029 00033 static Coordinate* root(void); 00034 00035 00044 void setOriginTo(Coordinate* parent, const Position<long>& position); 00045 00046 00052 Coordinate* parent(void) const; 00053 00054 00060 std::set<Coordinate*> children(void) const; 00061 00062 00071 Position<long> offset(const Coordinate* child) const; 00072 00073 00081 Position<long> pointPosition(const Coordinate* coordinate, 00082 const Position<long>& position) const; 00083 00084 protected: 00088 virtual void beforeEvaluate(void) 00089 { 00090 } 00091 00092 private: 00093 Coordinate(Coordinate* parent); 00094 Coordinate(const Coordinate& rhs); 00095 Coordinate& operator = (const Coordinate& rhs); 00096 00097 struct pImpl; 00098 std::auto_ptr<pImpl> pimpl; 00099 }; 00100 } 00101 00102 #endif