Added simple WCSA
[SXSI/TextCollection.git] / swcsa / utils / kBitArray.c
diff --git a/swcsa/utils/kBitArray.c b/swcsa/utils/kBitArray.c
new file mode 100755 (executable)
index 0000000..23af265
--- /dev/null
@@ -0,0 +1,59 @@
+ #include "kBitArray.h"\r
\r
+/*-----------------------------------------------------------------\r
+ Initilization of the kBitArray\r
+ ---------------------------------------------------------------- */ \r
+ t_kBitArray create_kBitArray (uint size, uint elemSize) {\r
+       uint bitsNeeded; \r
+       t_kBitArray      V;\r
+       \r
+       V = (t_kBitArray) malloc (sizeof(struct akbitArr));\r
+       bitsNeeded = size * elemSize;\r
+       V->totalInts = ((bitsNeeded+W-1)/W);\r
+       V->data = (uint *) malloc((V->totalInts) * sizeof(uint));\r
+       V->data[V->totalInts-1]=0000; /** avoids valgrind to blame*/\r
+       V->size = size;\r
+       V->elemSize= elemSize;\r
+       printf("\nKbitVector[0,%d), of elemSize = %u initialized\n",V->size,V->elemSize);\r
+       printf("\ntotalInts = %u, size = %u  elemSize = %u\n",V->totalInts,V->size,V->elemSize);\r
+       return V;\r
+}\r
+\r
+uint getKBitArray(t_kBitArray V, register uint i) {\r
+       register uint eSize = V->elemSize;\r
+       register uint answ;\r
+       register uint pos = i * eSize;\r
+       mybitread(answ, V->data, pos, eSize);\r
+       return (answ);\r
+       //return ( bitread(V->data,i * eSize,eSize)); \r
+}\r
+\r
+uint getKBitArraySinMacro(t_kBitArray V, register uint i) {\r
+       register uint eSize = V->elemSize;\r
+       return ( bitread(V->data,i * eSize,eSize)); \r
+}\r
+\r
+void setKBitArray(t_kBitArray V, uint i, uint value){\r
+       register uint eSize = V->elemSize;      \r
+       register uint pos = i * eSize;\r
+       mybitwrite(V->data, pos, eSize, value);\r
+}\r
+\r
+void setKBitArraySinMacro(t_kBitArray V, uint i, uint value){\r
+       register uint eSize = V->elemSize;\r
+       bitwrite(V->data,i *eSize, eSize, value);\r
+}\r
+\r
+/*-----------------------------------------------------------------\r
+ freeing resources\r
+ ---------------------------------------------------------------- */ \r
+void destroy_kBitArray (t_kBitArray kBitArray) {\r
+       uint total;\r
+       total = (kBitArray->totalInts) * sizeof(uint);\r
+       \r
+       free(kBitArray->data);\r
+       free(kBitArray);        \r
+       printf("\n[destroying a Kbit array of size table]...Freed %u bytes... RAM", total);             \r
+}\r
+\r
+\r