ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/util.h
(Generate patch)

Comparing deliantra/server/include/util.h (file contents):
Revision 1.51 by root, Sun Jul 1 05:00:18 2007 UTC vs.
Revision 1.53 by root, Fri Jul 13 15:54:40 2007 UTC

405 return !strcmp (a, b); 405 return !strcmp (a, b);
406 } 406 }
407}; 407};
408 408
409// Mostly the same as std::vector, but insert/erase can reorder 409// Mostly the same as std::vector, but insert/erase can reorder
410// the elements, making insret/remove O(1) instead of O(n). 410// the elements, making append(=insert)/remove O(1) instead of O(n).
411// 411//
412// NOTE: only some forms of erase/insert are available 412// NOTE: only some forms of erase are available
413template<class T> 413template<class T>
414struct unordered_vector : std::vector<T, slice_allocator<T> > 414struct unordered_vector : std::vector<T, slice_allocator<T> >
415{ 415{
416 typedef typename unordered_vector::iterator iterator; 416 typedef typename unordered_vector::iterator iterator;
417 417
458 return obj->*indexmember 458 return obj->*indexmember
459 ? this->begin () + obj->*indexmember - 1 459 ? this->begin () + obj->*indexmember - 1
460 : this->end (); 460 : this->end ();
461 } 461 }
462 462
463 void push_back (T *obj)
464 {
465 std::vector<T *, slice_allocator<T *> >::push_back (obj);
466 obj->*indexmember = this->size ();
467 }
468
463 void insert (T *obj) 469 void insert (T *obj)
464 { 470 {
465 push_back (obj); 471 push_back (obj);
466 obj->*indexmember = this->size ();
467 } 472 }
468 473
469 void insert (T &obj) 474 void insert (T &obj)
470 { 475 {
471 insert (&obj); 476 insert (&obj);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines