00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 BEGIN
00060
00061
00062 #ifndef #uset#_INCLUDED
00063 #define #uset#_INCLUDED
00064 #ifdef __cplusplus
00065 extern "C" {
00066 #endif
00067
00068
00069 #include "bitset.h"
00070
00071 typedef struct dont_use_this_tag_#lset# #uset#;
00072
00073 BEGIN SUBUNIVERSES
00074 class #uset#_SUBUNIVERSE;
00075 END SUBUNIVERSES
00076
00077 #define #uset#_CHOOSE_FAILURE ((#base_type#) -1)
00078 #define #uset#_ITER_DONE ((#base_type#) -1)
00079
00080 extern #uset# *#uset#_Create(
00081 size_t size,
00082 MEM_POOL *pool
00083 );
00084 extern size_t #uset#_Size_Alloc_Size(
00085 size_t size
00086 );
00087 extern size_t #uset#_Alloc_Size(
00088 #uset# *set
00089 );
00090 extern #uset# *#uset#_ClearD(
00091 #uset# *set
00092 );
00093 extern #uset# *#uset#_Create_Empty(
00094 size_t size,
00095 MEM_POOL *pool
00096 );
00097 extern #uset# *#uset#_Range(
00098 BS_ELT low,
00099 BS_ELT high,
00100 MEM_POOL *pool
00101 );
00102 extern #uset# *#uset#_RangeD(
00103 #uset# *set,
00104 BS_ELT low,
00105 BS_ELT high,
00106 MEM_POOL *pool
00107 );
00108 extern #uset# *#uset#_Singleton(
00109 #base_type# element,
00110 MEM_POOL *pool
00111 );
00112 extern #uset# *#uset#_SingletonD(
00113 #uset# *set,
00114 #base_type# element,
00115 MEM_POOL *pool
00116 );
00117 BEGIN SUBUNIVERSES
00118 extern #uset# *#uset#_SingletonS(
00119 #base_type# element,
00120 MEM_POOL *pool,
00121 #uset#_SUBUNIVERSE *sub
00122 );
00123 extern #uset# *#uset#_SingletonDS(
00124 #uset# *set,
00125 #base_type# element,
00126 MEM_POOL *pool,
00127 #uset#_SUBUNIVERSE *sub
00128 );
00129 END SUBUNIVERSES
00130 extern #uset# *#uset#_Universe(
00131 size_t size,
00132 MEM_POOL *pool
00133 );
00134 extern #uset# *#uset#_UniverseD(
00135 #uset# *set,
00136 size_t size,
00137 MEM_POOL *pool
00138 );
00139 extern #uset# *#uset#_Copy(
00140 #uset# *set,
00141 MEM_POOL *pool
00142 );
00143 extern #uset# *#uset#_CopyD(
00144 #uset# *set1,
00145 #uset# *set2,
00146 MEM_POOL *pool
00147 );
00148 extern #base_type# #uset#_Choose(
00149 #uset# *set
00150 );
00151 extern #base_type# #uset#_Intersection_Choose(
00152 #uset# *set1,
00153 #uset# *set2
00154 );
00155 extern #base_type# #uset#_Choose_Next(
00156 #uset# *set,
00157 #base_type# x
00158 );
00159 extern #base_type# #uset#_Intersection_Choose_Next(
00160 #uset# *set1,
00161 #uset# *set2,
00162 #base_type# x
00163 );
00164 extern #base_type# #uset#_Choose_Range(
00165 #uset# *set,
00166 BS_ELT low,
00167 BS_ELT high
00168 );
00169 BEGIN SUBUNIVERSES
00170 extern #base_type# #uset#_ChooseS(
00171 #uset# *set,
00172 #uset#_SUBUNIVERSE *sub
00173 );
00174 extern #base_type# #uset#_Intersection_ChooseS(
00175 #uset# *set1,
00176 #uset# *set2,
00177 #uset#_SUBUNIVERSE *sub
00178 );
00179 extern #base_type# #uset#_Choose_NextS(
00180 #uset# *set,
00181 #base_type# x,
00182 #uset#_SUBUNIVERSE *sub
00183 );
00184 extern #base_type# #uset#_Intersection_Choose_NextS(
00185 #uset# *set1,
00186 #uset# *set2,
00187 #base_type# x,
00188 #uset#_SUBUNIVERSE *sub
00189 );
00190 extern #base_type# #uset#_Choose_RangeS(
00191 #uset# *set,
00192 BS_ELT low,
00193 BS_ELT high,
00194 #uset#_SUBUNIVERSE *sub
00195 );
00196 END SUBUNIVERSES
00197 extern #uset# *#uset#_Difference(
00198 #uset# *set1,
00199 #uset# *set2,
00200 MEM_POOL *pool
00201 );
00202 extern #uset# *#uset#_DifferenceD(
00203 #uset# *set1,
00204 #uset# *set2
00205 );
00206 extern #uset# *#uset#_Difference1(
00207 #uset# *set,
00208 #base_type# x,
00209 MEM_POOL *pool
00210 );
00211 extern #uset# *#uset#_Difference1D(
00212 #uset# *set,
00213 #base_type# x
00214 );
00215 BEGIN SUBUNIVERSES
00216 extern #uset# *#uset#_Difference1S(
00217 #uset# *set,
00218 #base_type# x,
00219 MEM_POOL *pool,
00220 #uset#_SUBUNIVERSE *sub
00221 );
00222 extern #uset# *#uset#_Difference1DS(
00223 #uset# *set,
00224 #base_type# x,
00225 #uset#_SUBUNIVERSE *sub
00226 );
00227 END SUBUNIVERSES
00228 extern #uset# *#uset#_Intersection(
00229 #uset# *set1,
00230 #uset# *set2,
00231 MEM_POOL *pool
00232 );
00233 extern #uset# *#uset#_IntersectionD(
00234 #uset# *set1,
00235 #uset# *set2
00236 );
00237 extern size_t #uset#_Size(
00238 #uset# *set
00239 );
00240 extern #uset# *#uset#_Union(
00241 #uset# *set1,
00242 #uset# *set2,
00243 MEM_POOL *pool
00244 );
00245 extern #uset# *#uset#_UnionD(
00246 #uset# *set1,
00247 #uset# *set2,
00248 MEM_POOL *pool
00249 );
00250 extern #uset# *#uset#_Union1(
00251 #uset# *set,
00252 #base_type# x,
00253 MEM_POOL *pool
00254 );
00255 extern #uset# *#uset#_Union1D(
00256 #uset# *set,
00257 #base_type# x,
00258 MEM_POOL *pool
00259 );
00260 extern #uset# *#uset#_UnionD_Intersection(
00261 #uset# *set1,
00262 #uset# *set2,
00263 #uset# *set3,
00264 MEM_POOL *pool
00265 );
00266 BEGIN SUBUNIVERSES
00267 extern #uset# *#uset#_Union1S(
00268 #uset# *set,
00269 #base_type# x,
00270 MEM_POOL *pool,
00271 #uset#_SUBUNIVERSE *sub
00272 );
00273 extern #uset# *#uset#_Union1DS(
00274 #uset# *set,
00275 #base_type# x,
00276 MEM_POOL *pool,
00277 #uset#_SUBUNIVERSE *sub
00278 );
00279 END SUBUNIVERSES
00280 extern BOOL #uset#_ContainsP(
00281 #uset# *set1,
00282 #uset# *set2
00283 );
00284 extern BOOL #uset#_EmptyP(
00285 #uset# *set
00286 );
00287 extern BOOL #uset#_EqualP(
00288 #uset# *set1,
00289 #uset# *set2
00290 );
00291 extern BOOL #uset#_IntersectsP(
00292 #uset# *set1,
00293 #uset# *set2
00294 );
00295 extern BOOL #uset#_MemberP(
00296 #uset# *set,
00297 #base_type# x
00298 );
00299 extern BOOL #uset#_Intersection_MemberP(
00300 #uset# *set1,
00301 #uset# *set2,
00302 #base_type# x
00303 );
00304 BEGIN SUBUNIVERSES
00305 extern BOOL #uset#_MemberPS(
00306 #uset# *set,
00307 #base_type# x,
00308 #uset#_SUBUNIVERSE *sub
00309 );
00310 extern BOOL #uset#_Intersection_MemberPS(
00311 #uset# *set1,
00312 #uset# *set2,
00313 #base_type# x,
00314 #uset#_SUBUNIVERSE *sub
00315 );
00316 END SUBUNIVERSES
00317 extern void #uset#_Print(
00318 #uset# *set,
00319 FILE *f
00320 );
00321
00322 #ifdef __cplusplus
00323 }
00324 #endif
00325 #endif