File indexing completed on 2024-04-21 14:45:59

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