00001 00027 // 00028 // file Var.hpp 00029 // 00030 // 05/09/2002, Bolzano 00031 // 00032 00033 00034 #ifndef __Var__ 00035 # define __Var__ 00036 00037 #include "Lst.hpp" 00038 00039 00040 // variables 00041 typedef int Var; 00042 #define firstVar 0 00043 00044 00045 class Substitution; 00046 00047 00048 class VarList : 00049 public Lst<Var> 00050 { 00051 public: 00052 // functions inherited from Lst 00053 const VarList& tail () const 00054 { return static_cast<const VarList&>(Lst<Var>::tail()); } 00055 VarList (Var head, const VarList& tail); 00056 VarList (const VarList& lst); 00057 explicit VarList (Var v); // one-element list 00058 VarList (); 00059 00060 // miscellaneous 00061 void rectify (VarList, Substitution&, Var& last); 00062 Var max () const; // maximal variable in a non-empty list 00063 }; 00064 00065 00066 class VarListList : 00067 public Lst<VarList> 00068 { 00069 public: 00070 // functions inherited from Lst 00071 const VarListList& tail () const 00072 { return static_cast<const VarListList&>(Lst<VarList>::tail()); } 00073 VarListList (VarList head, const VarListList& tail); 00074 VarListList (const VarListList& lst); 00075 explicit VarListList (const VarList& t); // one-element list 00076 VarListList (); 00077 }; 00078 00079 00080 // **************** class VarList, definitions *********************** 00081 00082 inline 00083 VarList::VarList () 00084 { 00085 } 00086 00087 00088 inline 00089 VarList::VarList (const VarList& lst) 00090 : 00091 Lst<Var> (lst) 00092 { 00093 } 00094 00095 00096 inline 00097 VarList::VarList (Var v) 00098 : 00099 Lst<Var> (v) 00100 { 00101 } 00102 00103 00104 inline 00105 VarList::VarList (Var head, const VarList& tail) 00106 : 00107 Lst<Var> (head,tail) 00108 { 00109 } 00110 00111 00112 // **************** class VarListList, definitions *********************** 00113 00114 00115 inline 00116 VarListList::VarListList () 00117 { 00118 } 00119 00120 00121 inline 00122 VarListList::VarListList (const VarListList& lst) 00123 : 00124 Lst<VarList> (lst) 00125 { 00126 } 00127 00128 00129 inline 00130 VarListList::VarListList (VarList head, const VarListList& tail) 00131 : 00132 Lst<VarList> (head,tail) 00133 { 00134 } 00135 00136 00137 #endif // __Var__