00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __GB_EdgeHash__
00022 #define __GB_EdgeHash__
00023
00024 #include "GB_API.h"
00025 #include <UT/UT_Hash.h>
00026
00027 #include "GB_Element.h"
00028
00029
00030 class GB_API GB_EdgeHash : public UT_Hash
00031 {
00032 public:
00033 virtual ~GB_EdgeHash() {}
00034
00035 int myA, myB;
00036
00037 GB_EdgeHash(int a, int b) : myA(a), myB(b) { orderKey(); }
00038 GB_EdgeHash(const GB_Element *a, const GB_Element *b) :
00039 myA(a->getNum()), myB(b->getNum()) { orderKey(); }
00040 GB_EdgeHash(GB_EdgeHash const &h) : UT_Hash(), myA(h.myA), myB(h.myB)
00041 { orderKey(); }
00042
00043 int compare(const UT_Hash &a) const
00044 {
00045 return !(myA==((const GB_EdgeHash &)a).myA &&
00046 myB==((const GB_EdgeHash &)a).myB);
00047 }
00048 void copy(const UT_Hash &a)
00049 {
00050 myA = static_cast<const GB_EdgeHash &>(a).myA;
00051 myB = static_cast<const GB_EdgeHash &>(a).myB;
00052 }
00053 unsigned hash() const
00054 {
00055 return myA * 47 + myB * 53;
00056 }
00057
00058 UT_Hash *copy() const
00059 {
00060 return new GB_EdgeHash(myA, myB);
00061 }
00062
00063 protected:
00064 void orderKey()
00065 {
00066 int t;
00067 if (myA > myB)
00068 {
00069 t = myA; myA = myB; myB = t;
00070 }
00071 }
00072 };
00073
00074
00075 class GB_API GB_DEdgeHash : public UT_Hash
00076 {
00077 public:
00078 virtual ~GB_DEdgeHash() {}
00079
00080 int myA, myB;
00081
00082 GB_DEdgeHash(int a, int b) : myA(a), myB(b) { }
00083 GB_DEdgeHash(GB_Element *a, GB_Element *b) :
00084 myA(a->getNum()), myB(b->getNum()) {}
00085 GB_DEdgeHash(GB_DEdgeHash const &h) : UT_Hash(), myA(h.myA), myB(h.myB) { }
00086
00087 int compare(const UT_Hash &a) const
00088 {
00089 return !(myA==((const GB_DEdgeHash &)a).myA &&
00090 myB==((const GB_DEdgeHash &)a).myB);
00091 }
00092 void copy(const UT_Hash &a)
00093 {
00094 myA = static_cast<const GB_DEdgeHash &>(a).myA;
00095 myB = static_cast<const GB_DEdgeHash &>(a).myB;
00096 }
00097 unsigned hash() const
00098 {
00099 return myA * 47 + myB * 53;
00100 }
00101
00102 UT_Hash *copy() const
00103 {
00104 return new GB_DEdgeHash(myA, myB);
00105 }
00106 };
00107
00108 #endif
00109