home *** CD-ROM | disk | FTP | other *** search
/ ftptest.leeds.ac.uk / 2015.02.ftptest.leeds.ac.uk.tar / ftptest.leeds.ac.uk / bionet / CAE-GROUP / SCL-WIN3x / SCL.EXE / GENNODEA.CPP < prev    next >
C/C++ Source or Header  |  1994-10-04  |  3KB  |  117 lines

  1.  
  2. /*
  3. * NIST Utils Class Library
  4. * clutils/gennodearray.h
  5. * February, 1994
  6. * David Sauder
  7. * K. C. Morris
  8.  
  9. * Development of this software was funded by the United States Government,
  10. * and is not subject to copyright.
  11. */
  12.  
  13. /* $Id: gennodearray.cc,v 2.0.1.2 1994/04/05 16:44:43 sauderd Exp $  */ 
  14.  
  15. #include <gennode.h>
  16. #include <gennodel.h>
  17. #include <gennodei.h>
  18. #include <gennodea.h>
  19. #include <string.h>
  20. void bcopy (register char *src,register char *dest,register int len);
  21. void bcopy (register char *src,register char *dest,register int len)
  22. {
  23.   if (dest < src)
  24.     while (len--)
  25.       *dest++ = *src++;
  26.   else
  27.     {
  28.       char *lasts = src + (len-1);
  29.       char *lastd = dest + (len-1);
  30.       while (len--)
  31.         *(char *)lastd-- = *(char *)lasts--;
  32.     }
  33. }
  34. void 
  35. GenNodeArray::Check (int index)
  36. {
  37.     GenericNode** newbuf;
  38.  
  39.     if (index >= _bufsize) {
  40.     int oldBufSize = _bufsize;
  41.         _bufsize=_bufsize+1024; //= (index+1) * 2;
  42.         newbuf = new GenericNode*[_bufsize];
  43.     memset(newbuf, 0, _bufsize);
  44. //    memset(newbuf[oldBufSize], 0, 
  45. //        (_bufsize - oldBufSize)*sizeof(GenericNode*) );
  46.     bcopy((char*)_buf, (char*)newbuf, _count*sizeof(GenericNode*));    
  47.     //memcpy((void*)newbuf,(void*) _buf, _count*sizeof(GenericNode*));
  48.     delete [] _buf;
  49.         _buf = newbuf;
  50.     }
  51. }
  52.  
  53. int 
  54. GenNodeArray::Insert (GenericNode* gn, int index) 
  55. {
  56.     const GenericNode** spot;
  57.     index = (index < 0) ? _count : index;
  58.  
  59.     if (index < _count) {
  60.         Check(_count+1);
  61.         spot = (const GenericNode**)&_buf[index];
  62.         strcpy((char*)spot+1, (char*)spot);
  63.  
  64.     } else {
  65.         Check(index);
  66.         spot = (const GenericNode**) &_buf[index];
  67.     }
  68.     *spot = gn;
  69.     ++_count;
  70.     return index;
  71. }
  72.  
  73. void 
  74. GenNodeArray::Remove (int index) 
  75. {
  76.     if (0 <= index && index < _count) {
  77.         --_count;
  78.         const GenericNode** spot = (const GenericNode**)&_buf[index];
  79.         strcpy((char*)spot+1, (char*)spot);
  80.     _buf[_count] = 0;
  81.     }
  82. }
  83.  
  84. void GenNodeArray::ClearEntries ()
  85. {
  86. //    if(debug_level >= PrintFunctionTrace)
  87. //    cout << "GenNodeArray::Clear()\n";
  88.     int i;
  89.     for(i = 0 ; i < _count; i++)
  90.     _buf[i] = 0;
  91.     _count = 0;
  92. }
  93.  
  94. void GenNodeArray::DeleteEntries()
  95. {
  96. //    if(debug_level >= PrintFunctionTrace)
  97. //    cout << "GenNodeArray::DeleteEntries()\n";
  98.     int i;
  99.     for(i = 0 ; i < _count; i++)
  100.     delete (_buf[i]);
  101.     _count = 0;
  102. }
  103.  
  104.  
  105. int GenNodeArray::Index (GenericNode* gn)
  106. {
  107. //    if(debug_level >= PrintFunctionTrace)
  108. //    cout << "GenNodeArray::Index()\n";
  109.     for (register int i = 0; i < _count; ++i) {
  110.         if (_buf[i] == gn) {
  111.             return i;
  112.         }
  113.     }
  114.     return -1;
  115. }
  116.  
  117.