home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / COLLECT.CPP < prev    next >
C/C++ Source or Header  |  1998-05-12  |  6KB  |  297 lines

  1.  
  2. // LoraBBS Version 2.99 Free Edition
  3. // Copyright (C) 1987-98 Marco Maccaferri
  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 2 of the License, or
  8. // (at your option) 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. #include "_ldefs.h"
  20. #include "collect.h"
  21.  
  22. TCollection::TCollection (void)
  23. {
  24.    List = NULL;
  25.    Elements = 0;
  26. }
  27.  
  28. TCollection::~TCollection (void)
  29. {
  30.    while (List != NULL)
  31.       Remove ();
  32. }
  33.  
  34. USHORT TCollection::Add (PVOID lpData)
  35. {
  36.    USHORT RetVal = 0;
  37.    LDATA *New;
  38.  
  39.    if ((New = (LDATA *)malloc (sizeof (LDATA))) != NULL) {
  40.       memset (New, 0, sizeof (LDATA));
  41.       New->Value = (PVOID)lpData;
  42.  
  43.       if (List != NULL) {
  44.          while (List->Next != NULL)
  45.             List = List->Next;
  46.  
  47.          New->Previous = List;
  48.          New->Next = List->Next;
  49.          if (New->Next != NULL)
  50.             New->Next->Previous = New;
  51.          List->Next = New;
  52.       }
  53.  
  54.       Elements++;
  55.       List = New;
  56.       RetVal = 1;
  57.    }
  58.  
  59.    return (RetVal);
  60. }
  61.  
  62. USHORT TCollection::Add (PSZ lpData)
  63. {
  64.    return (Add ((PVOID)lpData, (USHORT)(strlen (lpData) + 1)));
  65. }
  66.  
  67. USHORT TCollection::Add (PVOID lpData, USHORT usSize)
  68. {
  69.    USHORT RetVal = 0;
  70.    LDATA *New;
  71.  
  72.    if ((New = (LDATA *)malloc (sizeof (LDATA) + usSize)) != NULL) {
  73.       memset (New, 0, sizeof (LDATA) + usSize);
  74.       memcpy (New->Data, lpData, usSize);
  75.       New->Value = (PVOID)New->Data;
  76.  
  77.       if (List != NULL) {
  78.          while (List->Next != NULL)
  79.             List = List->Next;
  80.  
  81.          New->Previous = List;
  82.          New->Next = List->Next;
  83.          if (New->Next != NULL)
  84.             New->Next->Previous = New;
  85.          List->Next = New;
  86.       }
  87.  
  88.       Elements++;
  89.       List = New;
  90.       RetVal = 1;
  91.    }
  92.  
  93.    return (RetVal);
  94. }
  95.  
  96. VOID TCollection::Clear (VOID)
  97. {
  98.    while (List != NULL)
  99.       Remove ();
  100.    Elements = 0;
  101. }
  102.  
  103. PVOID TCollection::First (VOID)
  104. {
  105.    PVOID RetVal = NULL;
  106.  
  107.    if (List != NULL) {
  108.       while (List->Previous != NULL)
  109.          List = List->Previous;
  110.       RetVal = List->Value;
  111.    }
  112.  
  113.    return (RetVal);
  114. }
  115.  
  116. USHORT TCollection::Insert (PVOID lpData)
  117. {
  118.    USHORT RetVal = 0;
  119.    LDATA *New;
  120.  
  121.    if ((New = (LDATA *)malloc (sizeof (LDATA))) != NULL) {
  122.       memset (New, 0, sizeof (LDATA));
  123.       New->Value = (PVOID)lpData;
  124.  
  125.       if (List != NULL) {
  126.          New->Previous = List;
  127.          New->Next = List->Next;
  128.          if (New->Next != NULL)
  129.             New->Next->Previous = New;
  130.          List->Next = New;
  131.       }
  132.  
  133.       Elements++;
  134.       List = New;
  135.       RetVal = 1;
  136.    }
  137.  
  138.    return (RetVal);
  139. }
  140.  
  141. USHORT TCollection::Insert (PSZ lpData)
  142. {
  143.    return (Insert (lpData, (USHORT)(strlen (lpData) + 1)));
  144. }
  145.  
  146. USHORT TCollection::Insert (PVOID lpData, USHORT usSize)
  147. {
  148.    USHORT RetVal = 0;
  149.    LDATA *New;
  150.  
  151.    if ((New = (LDATA *)malloc (sizeof (LDATA) + usSize)) != NULL) {
  152.       memset (New, 0, sizeof (LDATA) + usSize);
  153.       memcpy (New->Data, lpData, usSize);
  154.       New->Value = (PVOID)New->Data;
  155.  
  156.       if (List != NULL) {
  157.          New->Previous = List;
  158.          New->Next = List->Next;
  159.          if (New->Next != NULL)
  160.             New->Next->Previous = New;
  161.          List->Next = New;
  162.       }
  163.  
  164.       Elements++;
  165.       List = New;
  166.       RetVal = 1;
  167.    }
  168.  
  169.    return (RetVal);
  170. }
  171.  
  172. PVOID TCollection::Last (VOID)
  173. {
  174.    PVOID RetVal = NULL;
  175.  
  176.    if (List != NULL) {
  177.       while (List->Next != NULL)
  178.          List = List->Next;
  179.       RetVal = List->Value;
  180.    }
  181.  
  182.    return (RetVal);
  183. }
  184.  
  185. PVOID TCollection::Next (VOID)
  186. {
  187.    PVOID RetVal = NULL;
  188.  
  189.    if (List != NULL) {
  190.       if (List->Next != NULL) {
  191.          List = List->Next;
  192.          RetVal = List->Value;
  193.       }
  194.    }
  195.  
  196.    return (RetVal);
  197. }
  198.  
  199. PVOID TCollection::Previous (VOID)
  200. {
  201.    PVOID RetVal = NULL;
  202.  
  203.    if (List != NULL) {
  204.       if (List->Previous != NULL) {
  205.          List = List->Previous;
  206.          RetVal = List->Value;
  207.       }
  208.    }
  209.  
  210.    return (RetVal);
  211. }
  212.  
  213. VOID TCollection::Remove (VOID)
  214. {
  215.    LDATA *Temp;
  216.  
  217.    if (List != NULL) {
  218.       if (List->Previous != NULL)
  219.          List->Previous->Next = List->Next;
  220.       if (List->Next != NULL)
  221.          List->Next->Previous = List->Previous;
  222.       Temp = List;
  223.       if (List->Next != NULL)
  224.          List = List->Next;
  225.       else if (List->Previous != NULL)
  226.          List = List->Previous;
  227.       else
  228.          List = NULL;
  229.       free (Temp);
  230.       Elements--;
  231.    }
  232. }
  233.  
  234. USHORT TCollection::Replace (PVOID lpData)
  235. {
  236.    USHORT RetVal = 0;
  237.    LDATA *New;
  238.  
  239.    if (List != NULL) {
  240.       if ((New = (LDATA *)malloc (sizeof (LDATA))) != NULL) {
  241.          memset (New, 0, sizeof (LDATA));
  242.          New->Value = (PVOID)lpData;
  243.          New->Next = List->Next;
  244.          New->Previous = List->Previous;
  245.  
  246.          if (New->Next != NULL)
  247.             New->Next->Previous = New;
  248.          if (New->Previous != NULL)
  249.             New->Previous->Next = New;
  250.  
  251.          free (List);
  252.          List = New;
  253.          RetVal = 1;
  254.       }
  255.    }
  256.  
  257.    return (RetVal);
  258. }
  259.  
  260. USHORT TCollection::Replace (PSZ lpData)
  261. {
  262.    return (Replace (lpData, (USHORT)(strlen (lpData) + 1)));
  263. }
  264.  
  265. USHORT TCollection::Replace (PVOID lpData, USHORT usSize)
  266. {
  267.    USHORT RetVal = 0;
  268.    LDATA *New;
  269.  
  270.    if (List != NULL) {
  271.       if ((New = (LDATA *)malloc (sizeof (LDATA) + usSize)) != NULL) {
  272.          memset (New, 0, sizeof (LDATA) + usSize);
  273.          memcpy (New->Data, lpData, usSize);
  274.          New->Value = (PVOID)New->Data;
  275.          New->Next = List->Next;
  276.          New->Previous = List->Previous;
  277.  
  278.          if (New->Next != NULL)
  279.             New->Next->Previous = New;
  280.          if (New->Previous != NULL)
  281.             New->Previous->Next = New;
  282.  
  283.          free (List);
  284.          List = New;
  285.          RetVal = 1;
  286.       }
  287.    }
  288.  
  289.    return (RetVal);
  290. }
  291.  
  292. PVOID TCollection::Value (VOID)
  293. {
  294.    return ((List == NULL) ? NULL : List->Value);
  295. }
  296.  
  297.