Encoding.h
上传用户:speoil
上传日期:2021-10-06
资源大小:100k
文件大小:2k
源码类别:

3G开发

开发平台:

C/C++

  1. #ifndef ENCODING
  2. #define ENCODING
  3. /*********************************************************************************
  4.  *
  5.  * Node lists
  6.  *
  7.  *********************************************************************************/
  8. class node;
  9. class variable_node;
  10. class check_node;
  11. class NodeListWithoutID
  12. {
  13. public:
  14.    int CurrentLength;
  15.    int MaxLength;
  16.    node **Nodes;
  17. public:
  18.    NodeListWithoutID() : CurrentLength(0), MaxLength(0), Nodes(NULL)
  19.    {  }
  20.    void Allocate(int p_MaxLength)
  21.    {
  22.       if (Nodes != NULL) delete Nodes;
  23.       Nodes = new node *[p_MaxLength];
  24.       MaxLength = p_MaxLength;
  25.       CurrentLength = 0;
  26.    }
  27.    void Add(node &Node)
  28.    {
  29.       if (CurrentLength >= MaxLength)
  30.       {
  31.          cout << "NodeList:Add: Attempt to exceed list sizen";
  32.          exit(1);
  33.       }
  34.       Nodes[CurrentLength++] = &Node;
  35.    }
  36.    node &ExtractAnyNode()
  37.    {
  38.       if (CurrentLength <= 0)
  39.       {
  40.          cout << "NodeList:ExtractAnyNode: Attempt to extract from an empty listn";
  41.          exit(1);
  42.       }
  43.       return *Nodes[--CurrentLength];
  44.    }
  45.    ~NodeListWithoutID()
  46.    {
  47.       if (MaxLength > 0)
  48.       {
  49.          delete Nodes;
  50.          MaxLength = 0;
  51.          CurrentLength = 0;
  52.       }
  53.    }
  54.    int GetLength()
  55.    {
  56.       return CurrentLength;
  57.    }
  58.    node &operator[](int i)
  59.    {
  60.       return *Nodes[i];
  61.    }
  62. } ;
  63. class NodeListWithID : public NodeListWithoutID
  64. {
  65. public:
  66.    int Systematic;
  67.    int Gap;
  68. public:
  69.    void SwitchNodes(int i1, int i2);
  70.    void Reverse()
  71.    // Reverse the lists
  72.    {
  73.       for (int i1 = 0, i2 = GetLength() - 1; i1 < i2; i1++, i2--)
  74.          SwitchNodes(i1, i2);
  75.    }
  76. } ;
  77. class VariableNodeList : public NodeListWithID 
  78. {
  79. public:
  80.    void Init(variable_node VariableNodeArray[], int p_Length);
  81.    variable_node &operator[](int i)
  82.    {
  83.       return *(variable_node *)Nodes[i];
  84.    }
  85. } ;
  86. class CheckNodeList : public NodeListWithID 
  87. {
  88. public:
  89.    void Init(check_node CheckNodeArray[], int p_Length);
  90.    check_node &operator[](int i)
  91.    {
  92.       return *(check_node *)Nodes[i];
  93.    }
  94. } ;
  95. #endif