home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / gnu / aplusplus-1.01-src.lha / GNU / src / amiga / APlusPlus-1.01 / libsource / MapArray.cxx < prev    next >
C/C++ Source or Header  |  1994-05-05  |  2KB  |  78 lines

  1. /******************************************************************************
  2.  **
  3.  **    C++ Class Library for the Amiga© system software.
  4.  **
  5.  **    Copyright (C) 1994 by Armin Vogt  **  EMail: armin@uni-paderborn.de
  6.  **    All Rights Reserved.
  7.  **
  8.  **    $Source: apphome:APlusPlus/RCS/libsource/MapArray.cxx,v $
  9.  **    $Revision: 1.4 $
  10.  **    $Date: 1994/05/05 22:08:48 $
  11.  **    $Author: Armin_Vogt $
  12.  **
  13.  ******************************************************************************/
  14.  
  15.  
  16. #include <APlusPlus/environment/MapArray.h>
  17.  
  18. #define MAPARRAY_MINSIZE 4
  19. #define MAPARRAY_GROWSIZE 2
  20.  
  21. MapArray::Pair MapArray::empty = {0,0};
  22.     
  23.  
  24. volatile static char rcs_id[] = "$Id: MapArray.cxx,v 1.4 1994/05/05 22:08:48 Armin_Vogt Exp Armin_Vogt $";
  25.  
  26.  
  27. MapArray::MapArray()
  28. {
  29.     pairs = ∅
  30.     arraySize = 0;
  31. }
  32.         
  33. MapArray::~MapArray()
  34. {
  35.     if (arraySize)
  36.     delete[] pairs;
  37. }
  38.  
  39. MA_T& MapArray::operator [] (MapKey searchKey)
  40. {
  41.     if (pairs==NULL)
  42.     {
  43.         pairs = new Pair[MAPARRAY_MINSIZE];
  44.         arraySize = MAPARRAY_MINSIZE;
  45.         pairs->key = searchKey;
  46.         (pairs+1)->key = 0;
  47.         return pairs->entry; 
  48.     }
  49.     else
  50.     {
  51.         int n = arraySize;
  52.         for (Pair *pair = pairs; pair->key!=0 && n>0; pair++,n--)
  53.             if (pair->key == searchKey) return pair->entry;
  54.             
  55.         n = arraySize-n;    // n is array index of first unused Pair
  56.         if (n >= arraySize-1)
  57.         {
  58.             Pair *_newPair = new Pair[arraySize+MAPARRAY_GROWSIZE];
  59.             memcpy(_newPair,pairs,arraySize*sizeof(Pair));
  60.             pairs = _newPair;
  61.             arraySize += MAPARRAY_GROWSIZE;
  62.         }    
  63.         
  64.         pairs[n+1].key = 0;
  65.         pairs[n].key = searchKey;
  66.         return pairs[n].entry;
  67.     }
  68. }
  69.             
  70. MA_T MapArray::find(MapKey searchKey)
  71. {
  72.     int n = arraySize;
  73.     for (Pair *pair = pairs; n>0 && pair->key!=0; pair++,n--)
  74.             if (pair->key == searchKey) return pair->entry;
  75.     
  76.     return NULL;
  77. }
  78.