#include #include #include #include #include #include class T { public: T(int x = 0): x(x) { // printf ("constructor\n"); y = x + 99; } ~T() { // printf ("destructor\n"); } bool operator== (const T& x) const { return this->x == x.x; } qse_size_t getHashCode() const { return x; } int getValue() const { return this->x; } int getY() const { return this->y; } protected: int x; int y; }; void* operator new (size_t x, int q) { return ::operator new (x); } struct IntHasher { qse_size_t operator() (int v) const { return v; } }; struct IntIsEqual { qse_size_t operator() (int v1, const T& v2) const { return v1 == v2.getValue(); } }; typedef QSE::HashList IntList; int main () { qse_open_stdsios (); T* x; //QSE::StdMmgr* mmgr = QSE::StdMmgr::getDFL(); //QSE::HeapMmgr heap_mmgr (QSE::Mmgr::getDFL(), 1000000); //QSE::Mmgr* mmgr = &heap_mmgr; QSE::Mmgr* mmgr = QSE_NULL; /* x = new(mmgr) T; //[10]; printf ("x====> %p\n", x); x->~T(); //for (int i = 0; i < 10; i++) x[i].~T(); //::operator delete[] (x, mmgr); ::operator delete (x, mmgr); //delete[] x; printf ("----------------------\n"); T* y = new(10) T; y->~T(); ::operator delete(y); printf ("----------------------\n"); */ try { T t1,t2,t3; #if 0 printf ("----------------------\n"); { QSE::LinkedList l (mmgr, 100); printf ("----------------------\n"); l.append (t1); printf ("----------------------\n"); l.append (t2); l.append (t3); printf ("================\n"); QSE::LinkedList l2 (mmgr, 100); l2 = l; } printf ("----------------------\n"); #endif //QSE::HashList h (1000, 75, 1000, mmgr); QSE::HashList h (1000, 75, 500, mmgr); for (int i = 0; i < 1000; i++) { T x(i); h.insert (x); } printf ("h.getSize() => %d\n", (int)h.getSize()); QSE::HashList h2 (1000, 75, 700, mmgr); h2 = h; for (QSE::HashList::Iterator it = h2.getIterator(); it.isLegit(); it++) { printf ("%d\n", (*it).getValue()); } printf ("----------------------\n"); printf ("%p\n", h2.getHeadNode()); printf ("----------------------\n"); IntList hl; IntList::Iterator it; hl.insert (10); hl.insert (150); hl.insert (200); for (it = hl.getIterator(); it.isLegit(); it++) { printf ("%d\n", *it); } printf ("----------------------\n"); { const QSE::HashList& h3 = h2; const T* tt = h3.heterofindValue (100); if (tt) printf ("%d:%d\n", tt->getValue(), tt->getY()); else printf ("not found...\n"); } printf ("----------------------\n"); } catch (QSE::Exception& e) { qse_printf (QSE_T("Exception: %s\n"), QSE_EXCEPTION_NAME(e)); } qse_close_stdsios (); return 0; }