home *** CD-ROM | disk | FTP | other *** search
/ WADS of WADS / WadsOfWads.1994.zip / ZIPS / A_D / DMREJE.ZIP / SOURCE.ZIP / ILIST.CPP < prev    next >
C/C++ Source or Header  |  1994-05-31  |  3KB  |  94 lines

  1. //**********************************************************************************
  2. //    REJECT.EXE - Reject data table builder for DOOM
  3. //    Copyright (C) 1994 L.M.WITEK 
  4. //
  5. //    This program is free software; you can redistribute it and/or modify
  6. //    it under the terms of the GNU General Public License as published by
  7. //    the Free Software Foundation; either version 1, or (at your option)
  8. //    any later version.
  9. //
  10. //    This program is distributed in the hope that it will be useful,
  11. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //    GNU General Public License for more details.
  14. //
  15. //    You should have received a copy of the GNU General Public License
  16. //    along with this program; if not, write to the Free Software
  17. //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. //**********************************************************************************
  19.  
  20. #include "ilist.hpp"
  21. #include "xstring.hpp"
  22.  
  23. /*********************************************************************************
  24. **
  25. **  AUTHOR: L.M.Witek   DATE:26-Jan-1994
  26. **
  27. **  FUNCTION: Add an CIndexedLink Object to the linked list.
  28. **
  29. **  ENTRY: Pointer to a CIndexedLink Object
  30. **
  31. *********************************************************************************/
  32.  
  33. void CIndexedList::AddItem (CIndexedLink *link)
  34. {    
  35.      //  -=- if list is empty then place in 1st position in list -=-
  36.      if (base == 0)
  37.      {
  38.           base = link;
  39.      }
  40.      else
  41.      {    
  42.           // -=- get pointer to start of list -=-       
  43.           CIndexedLink *cursor = FirstItem();
  44.           
  45.           // -=- find position in list to insert object -=-
  46.           while (cursor)
  47.           {
  48.                if (*cursor > *link)
  49.                {
  50.                     // -=- is new link to be first in list? -=-
  51.                     if (cursor->prev == 0)
  52.                     {
  53.                          base = link;               
  54.                     }
  55.                     else 
  56.                     {    
  57.                          ((CIndexedLink*)(cursor->prev))->next = link; 
  58.                          link->prev = cursor->prev;
  59.                     }
  60.                     // -=- add item into list -=-
  61.                     link->next = cursor;
  62.                     cursor->prev = link; 
  63.  
  64.                     break;
  65.                }
  66.                
  67.                // -=- if at end of list add to end of list -=-
  68.                if (cursor->next == 0)
  69.                {
  70.                     cursor->next = link;
  71.                     link->prev = cursor;
  72.                     break;
  73.                }
  74.                cursor = ((CIndexedLink*)(cursor->next));
  75.           }
  76.      }
  77. }                
  78.  
  79.  
  80. CIndexedLink *CIndexedList::operator[] (XString key)
  81. {
  82.      CIndexedLink *cursor = FirstItem();
  83.      while (cursor)
  84.      {                   
  85.           if (key == cursor->key)
  86.                break;
  87.           cursor = cursor->Next();
  88.      }     
  89.      return cursor;
  90. }
  91.  
  92.  
  93.  
  94.