modules/up/src/gnug++/CacheKey.CacheValue.AVLMap.h

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. CacheKeyCacheValueAVLNode
  2. CacheKeyCacheValueAVLNode
  3. CacheKeyCacheValueAVLMap
  4. CacheKeyCacheValueAVLMap
  5. CacheKeyCacheValueAVLMap
  6. first
  7. last
  8. next
  9. prev
  10. key
  11. contents
  12. clear
  13. contains

   1 // This may look like C code, but it is really -*- C++ -*-
   2 /* 
   3 Copyright (C) 1988 Free Software Foundation
   4     written by Doug Lea (dl@rocky.oswego.edu)
   5 
   6 This file is part of the GNU C++ Library.  This library is free
   7 software; you can redistribute it and/or modify it under the terms of
   8 the GNU Library General Public License as published by the Free
   9 Software Foundation; either version 2 of the License, or (at your
  10 option) any later version.  This library is distributed in the hope
  11 that it will be useful, but WITHOUT ANY WARRANTY; without even the
  12 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  13 PURPOSE.  See the GNU Library General Public License for more details.
  14 You should have received a copy of the GNU Library General Public
  15 License along with this library; if not, write to the Free Software
  16 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17 */
  18 
  19 
  20 #ifndef _CacheKeyCacheValueAVLMap_h
  21 #ifdef __GNUG__
  22 #pragma interface
  23 #endif
  24 #define _CacheKeyCacheValueAVLMap_h 1
  25 
  26 #include "CacheKey.CacheValue.Map.h"
  27 
  28 struct CacheKeyCacheValueAVLNode
  29 {
  30   CacheKeyCacheValueAVLNode*      lt;
  31   CacheKeyCacheValueAVLNode*      rt;
  32   CacheKey                 item;
  33   CacheValue                 cont;
  34   char                stat;
  35                       CacheKeyCacheValueAVLNode(CacheKey  h, CacheValue& c, 
  36                                     CacheKeyCacheValueAVLNode* l=0, CacheKeyCacheValueAVLNode* r=0);
  37                       ~CacheKeyCacheValueAVLNode();
  38 };
  39 
  40 inline CacheKeyCacheValueAVLNode::CacheKeyCacheValueAVLNode(CacheKey  h, CacheValue& c, 
     /* [<][>][^][v][top][bottom][index][help] */
  41                                     CacheKeyCacheValueAVLNode* l, CacheKeyCacheValueAVLNode* r)
  42      :lt(l), rt(r), item(h), cont(c), stat(0) {}
  43 
  44 inline CacheKeyCacheValueAVLNode::~CacheKeyCacheValueAVLNode() {}
     /* [<][>][^][v][top][bottom][index][help] */
  45 
  46 typedef CacheKeyCacheValueAVLNode* CacheKeyCacheValueAVLNodePtr;
  47 
  48 
  49 class CacheKeyCacheValueAVLMap : public CacheKeyCacheValueMap
     /* [<][>][^][v][top][bottom][index][help] */
  50 {
  51 protected:
  52   CacheKeyCacheValueAVLNode*   root;
  53 
  54   CacheKeyCacheValueAVLNode*   leftmost();
  55   CacheKeyCacheValueAVLNode*   rightmost();
  56   CacheKeyCacheValueAVLNode*   pred(CacheKeyCacheValueAVLNode* t);
  57   CacheKeyCacheValueAVLNode*   succ(CacheKeyCacheValueAVLNode* t);
  58   void            _kill(CacheKeyCacheValueAVLNode* t);
  59   void            _add(CacheKeyCacheValueAVLNode*& t);
  60   void            _del(CacheKeyCacheValueAVLNode* p, CacheKeyCacheValueAVLNode*& t);
  61 
  62 public:
  63                 CacheKeyCacheValueAVLMap(CacheValue& dflt);
  64                 CacheKeyCacheValueAVLMap(CacheKeyCacheValueAVLMap& a);
  65   inline               ~CacheKeyCacheValueAVLMap();
  66 
  67   CacheValue&          operator [] (CacheKey  key);
  68 
  69   void          del(CacheKey  key);
  70 
  71   inline Pix           first();
  72   inline void          next(Pix& i);
  73   inline CacheKey&          key(Pix i);
  74   inline CacheValue&          contents(Pix i);
  75 
  76   Pix           seek(CacheKey  key);
  77   inline int           contains(CacheKey  key);
  78 
  79   inline void          clear(); 
  80 
  81   Pix           last();
  82   void          prev(Pix& i);
  83 
  84   int           OK();
  85 };
  86 
  87 inline CacheKeyCacheValueAVLMap::~CacheKeyCacheValueAVLMap()
     /* [<][>][^][v][top][bottom][index][help] */
  88 {
  89   _kill(root);
  90 }
  91 
  92 inline CacheKeyCacheValueAVLMap::CacheKeyCacheValueAVLMap(CacheValue& dflt) :CacheKeyCacheValueMap(dflt)
     /* [<][>][^][v][top][bottom][index][help] */
  93 {
  94   root = 0;
  95 }
  96 
  97 inline Pix CacheKeyCacheValueAVLMap::first()
     /* [<][>][^][v][top][bottom][index][help] */
  98 {
  99   return Pix(leftmost());
 100 }
 101 
 102 inline Pix CacheKeyCacheValueAVLMap::last()
     /* [<][>][^][v][top][bottom][index][help] */
 103 {
 104   return Pix(rightmost());
 105 }
 106 
 107 inline void CacheKeyCacheValueAVLMap::next(Pix& i)
     /* [<][>][^][v][top][bottom][index][help] */
 108 {
 109   if (i != 0) i = Pix(succ((CacheKeyCacheValueAVLNode*)i));
 110 }
 111 
 112 inline void CacheKeyCacheValueAVLMap::prev(Pix& i)
     /* [<][>][^][v][top][bottom][index][help] */
 113 {
 114   if (i != 0) i = Pix(pred((CacheKeyCacheValueAVLNode*)i));
 115 }
 116 
 117 inline CacheKey& CacheKeyCacheValueAVLMap::key(Pix i)
     /* [<][>][^][v][top][bottom][index][help] */
 118 {
 119   if (i == 0) error("null Pix");
 120   return ((CacheKeyCacheValueAVLNode*)i)->item;
 121 }
 122 
 123 inline CacheValue& CacheKeyCacheValueAVLMap::contents(Pix i)
     /* [<][>][^][v][top][bottom][index][help] */
 124 {
 125   if (i == 0) error("null Pix");
 126   return ((CacheKeyCacheValueAVLNode*)i)->cont;
 127 }
 128 
 129 inline void CacheKeyCacheValueAVLMap::clear()
     /* [<][>][^][v][top][bottom][index][help] */
 130 {
 131   _kill(root);
 132   count = 0;
 133   root = 0;
 134 }
 135 
 136 inline int CacheKeyCacheValueAVLMap::contains(CacheKey  key)
     /* [<][>][^][v][top][bottom][index][help] */
 137 {
 138   return seek(key) != 0;
 139 }
 140 
 141 #endif

/* [<][>][^][v][top][bottom][index][help] */