Changeset: 6943e0604ba5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6943e0604ba5
Modified Files:
monetdb5/extras/crackers/crackers_holistic.c
monetdb5/extras/crackers/crackers_holistic.h
monetdb5/extras/crackers/crackers_selecthol_ops.mx
Branch: holindex
Log Message:
Prepare getFrequencyStruct to return one out of two lists.
We need two lists for future work. We can retrieve them with name A or B.
diffs (108 lines):
diff --git a/monetdb5/extras/crackers/crackers_holistic.c
b/monetdb5/extras/crackers/crackers_holistic.c
--- a/monetdb5/extras/crackers/crackers_holistic.c
+++ b/monetdb5/extras/crackers/crackers_holistic.c
@@ -5,7 +5,8 @@
#include "mal_exception.h"
#include "mutils.h"
-static FrequencyNode *_InternalFrequencyStruct = NULL;
+static FrequencyNode *_InternalFrequencyStructA = NULL;
+static FrequencyNode *_InternalFrequencyStructB = NULL;
static MT_Lock frequencylock;
str
@@ -16,22 +17,30 @@ CRKinitHolistic(int *ret)
return MAL_SUCCEED;
}
+/*singleton pattern*/
FrequencyNode *
-getFrequencyStruct(void)
+getFrequencyStruct(char which)
{
+ FrequencyNode **theNode = NULL;
+
mal_set_lock(frequencylock, "getFrequencyStruct");
- if (_InternalFrequencyStruct == NULL) {
- _InternalFrequencyStruct = GDKmalloc(sizeof(FrequencyNode));
- _InternalFrequencyStruct->bid=0;
- _InternalFrequencyStruct->c=0;
- _InternalFrequencyStruct->f1=0;
- _InternalFrequencyStruct->f2=0;
- _InternalFrequencyStruct->weight=0.0;
- _InternalFrequencyStruct->next=NULL;
- }
+ switch (which) {
+ case 'A':
+ theNode = &_InternalFrequencyStructA;
+ break;
+ case 'B':
+ theNode = &_InternalFrequencyStructB;
+ break;
+ default:
+ assert(0);
+ }
+
+ /* GDKzalloc = calloc = malloc + memset(0) */
+ if (*theNode == NULL)
+ *theNode = GDKzalloc(sizeof(FrequencyNode));
mal_unset_lock(frequencylock, "getFrequencyStruct");
- return _InternalFrequencyStruct;
+ return *theNode;
}
FrequencyNode*
@@ -121,7 +130,7 @@ str
CRKinitFrequencyStruct(int *vid,int *bid)
{
FrequencyNode* new_node;
- FrequencyNode *fs = getFrequencyStruct();
+ FrequencyNode *fs = getFrequencyStruct('A');
/*fprintf(stderr,"BAT_ID=%d\n",*bid);*/
@@ -142,7 +151,7 @@ CRKrandomCrack(int *ret)
int temp=0;
oid posl,posh,p;
bit inclusive=TRUE;
- FrequencyNode *fs = getFrequencyStruct();
+ FrequencyNode *fs = getFrequencyStruct('A');
bid=findMax(fs);
b=BATdescriptor(bid);
diff --git a/monetdb5/extras/crackers/crackers_holistic.h
b/monetdb5/extras/crackers/crackers_holistic.h
--- a/monetdb5/extras/crackers/crackers_holistic.h
+++ b/monetdb5/extras/crackers/crackers_holistic.h
@@ -26,7 +26,7 @@ typedef struct frequency{
}FrequencyNode;
-crackers_export FrequencyNode *getFrequencyStruct(void);
+crackers_export FrequencyNode *getFrequencyStruct(char which);
crackers_export FrequencyNode* push(int bat_id,FrequencyNode* head);
crackers_export FrequencyNode* pop(FrequencyNode* head);
crackers_export void printFrequencyStruct(FrequencyNode* head);
diff --git a/monetdb5/extras/crackers/crackers_selecthol_ops.mx
b/monetdb5/extras/crackers/crackers_selecthol_ops.mx
--- a/monetdb5/extras/crackers/crackers_selecthol_ops.mx
+++ b/monetdb5/extras/crackers/crackers_selecthol_ops.mx
@@ -313,8 +313,8 @@ createView:
@1 k,temp_h;
FrequencyNode* FN;
- FrequencyNode *FrequencyStruct = getFrequencyStruct();
- FN=searchBAT(FrequencyStruct,*bid);
+ FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
+ FN=searchBAT(FrequencyStructA,*bid);
FN->c = FN->c + 1;
/*fprintf(stderr,"FN->bid=%d\n",FN->bid);*/
@@ -562,7 +562,7 @@ createView:
/*fprintf(stderr,"BATcount(b)=%d\n",countBatElements);*/
FN->weight = changeWeight(FN,countBatElements,L1);
/*printFrequencyStruct(FrequencyStruct);*/
- maxWB=findMax(FrequencyStruct);
+ maxWB=findMax(FrequencyStructA);
/*fprintf(stderr,"MAXWB=%d\n",maxWB);*/
@:CreateResult()@
return MAL_SUCCEED;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list