vpset.cpp

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 97 行

CPP
97
字号
/****************************************************************************
File: VPSet.cpp

Description:   class JAM_ControlledVoidPtrSet<Mem>
               class JAM_VoidPtrSet

Usage:

Notes:
   
History:
   
****************************************************************************/     
#ifndef JAM_VoidPtrSet_CPP
#define JAM_VoidPtrSet_CPP

#include <VPSet.h>

//************************************************************************
// JAM_ControlledVoidPtr member functions
//************************************************************************

template<class Mem>
size_t JAM_ControlledVoidPtrSet<Mem>::nextelem(size_t start) const
{
   size_t n = _arr.length();
   while (start<n && _arr[start]==0)
      ++start;
   if (start<n) return start;
   else return size_t(-1);
}

template<class Mem>
size_t JAM_ControlledVoidPtrSet<Mem>::prevelem(size_t start) const
{
   JAM_assert(start<_arr.length());
   while (_arr[start]==0) {
      if (start==0) return size_t(-1);
      else --start;
      }
   return start;
}

template<class Mem>
void JAM_ControlledVoidPtrSet<Mem>::enter(void* p)
{
   JAM_assert(p!=0);
   if (!contains(p)) {
      size_t n = _arr.length();
      size_t i = 0;
      while (i<n && _arr[i]!=0)
         ++i;
      if (i<n) {
         _arr[i] = p;   // fill an empty slot
      } else {
         if (_arr.allocated()==n) {    // need to grow array
            if (_arr.allocated()==_arr.max())   // can't increase size
               JAM_crash("JAM_ControlledVoidPtrSet is full.");
            else if (n>_arr.max()/2) _arr.allocate(_arr.max());
            else _arr.allocate(n*2);
         }
         _arr.append(p);
      }
   }
}

template<class Mem>
void JAM_ControlledVoidPtrSet<Mem>::remove(void* p)
{
   JAM_assert(p!=0);
   size_t n = _arr.length();
   size_t i = 0;
   while (i<n && _arr[i]!=p)
      ++i;
   JAM_assert(i<n);  // assert found
   _arr[i] = 0;
}

template<class Mem>
int JAM_ControlledVoidPtrSet<Mem>::contains(void* p) const
{
   JAM_assert(p!=0);
   size_t n = _arr.length();
   for (size_t i=0; i<n; ++i)
      if (_arr[i]==p) return 1;
   return 0;
}


//************************************************************************
// JAM_ControlledVoidPtr functions
//************************************************************************


#endif // JAM_VoidPtrSet_CPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?