File indexing completed on 2024-03-24 03:46:46
0001 #ifndef _SkipListElement_H 0002 #define _SkipListElement_H 0003 0004 /** \file SkipListElement.h 0005 Interface for skip list elements 0006 See William Pugh's paper: 0007 Skip Lists: A Probabilistic Alternative to Balanced Trees 0008 \author: Bruno Grossniklaus, 13.11.97 0009 \version: 1.0 0010 History: 0011 13.11.97; Gro; Version 1.0 0012 */ 0013 0014 #include <SpatialGeneral.h> 0015 0016 #define SKIPLIST_MAXLEVEL 6 // maximum node level 0017 #define NIL 0 // invalid pointer 0018 0019 #ifdef _WIN32 0020 #define KEY_MAX _I64_MAX 0021 #else 0022 #define KEY_MAX LLONG_MAX 0023 #endif 0024 0025 typedef int64 Key; // key type 0026 typedef int Value; // value type 0027 0028 class SkipListElement; 0029 0030 class LINKAGE SkipListElement 0031 { 0032 public: 0033 SkipListElement(long level = 0, Key key = 0, Value value = 0); 0034 0035 /** get key of element */ 0036 Key getKey() const { return myKey; }; 0037 /** set key of element */ 0038 void setKey(Key key) { myKey = key; }; 0039 0040 /** get value of element */ 0041 Value getValue() const { return myValue; } 0042 /** set value of element */ 0043 void setValue(Value value) { myValue = value; } 0044 0045 /** get level of element */ 0046 long getLevel() const { return (myLevel); }; 0047 /** Set level of element */ 0048 void setLevel(long level) { myLevel = level; } 0049 0050 /** get next element in level */ 0051 SkipListElement *getElement(long level); 0052 /** set next element in level */ 0053 void setElement(long level, SkipListElement *element); 0054 0055 private: 0056 long myLevel; // level of element 0057 Key myKey; // key of element 0058 Value myValue; // value of element 0059 SkipListElement *myNext[SKIPLIST_MAXLEVEL]; // pointers to next elements 0060 }; 0061 #endif // _SkipListElement_H