Commit 8369969e authored by Ivan Donchevskiy's avatar Ivan Donchevskiy

changed type of fields in classes Cyclestorage and TableblockStorage from char*…

changed type of fields in classes Cyclestorage and TableblockStorage from char* to void* (bugs 4090, 4115)
parent 745e9631
...@@ -81,7 +81,7 @@ void testTable2(void) ...@@ -81,7 +81,7 @@ void testTable2(void)
int i; int i;
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue(&i,val)!=0) printf("%s, ",val);
} }
printf("\ncurrent block = %d\n",t->cur_block); printf("\ncurrent block = %d\n",t->cur_block);
for(i=1;i<11;i++) for(i=1;i<11;i++)
...@@ -92,38 +92,38 @@ void testTable2(void) ...@@ -92,38 +92,38 @@ void testTable2(void)
printf("current block = %d, elements with values=keys added:\n",t->cur_block); printf("current block = %d, elements with values=keys added:\n",t->cur_block);
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue(&i,val)!=0) printf("%s, ",val);
} }
printf("\ncurrent block = %d, rewriting first 7 with values=keys+10\n",t->cur_block); printf("\ncurrent block = %d, rewriting first 7 with values=keys+10\n",t->cur_block);
for(i=1;i<8;i++) for(i=1;i<8;i++)
{ {
sprintf(val,"%d",i+10); sprintf(val,"%d",i+10);
t->AddRow((char*)&i,val); t->AddRow(&i,val);
} }
printf("deleteing 8-10 elements\n"); printf("deleteing 8-10 elements\n");
for(i=8;i<11;i++) for(i=8;i<11;i++)
{ {
t->DelRow((char*)&i); t->DelRow(&i);
} }
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue(&i,val)!=0) printf("%s, ",val);
} }
printf("\ncurrent block = %d, rewriting 3-10 elements with values=keys+40\n",t->cur_block); printf("\ncurrent block = %d, rewriting 3-10 elements with values=keys+40\n",t->cur_block);
for(i=3;i<11;i++) for(i=3;i<11;i++)
{ {
sprintf(val,"%d",i+40); sprintf(val,"%d",i+40);
t->AddRow((char*)&i,val); t->AddRow(&i,val);
} }
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue(&i,val)!=0) printf("%s, ",val);
} }
printf("\ncurrent block = %d\n",t->cur_block); printf("\ncurrent block = %d\n",t->cur_block);
strcpy(val,"new block"); strcpy(val,"new block");
i=9; i=9;
t->AddRow((char*)&i,val); t->AddRow(&i,val);
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val);
...@@ -133,7 +133,7 @@ void testTable2(void) ...@@ -133,7 +133,7 @@ void testTable2(void)
t->Open("big_file.test", 4, 40, 20000, 5,28,0); t->Open("big_file.test", 4, 40, 20000, 5,28,0);
for(i=1;i<20;i++) for(i=1;i<20;i++)
{ {
if(t->FindKeyValue((char*)&i,val)!=0) printf("%s, ",val); if(t->FindKeyValue(&i,val)!=0) printf("%s, ",val);
} }
printf("\ncurrent block = %d\n",t->cur_block); printf("\ncurrent block = %d\n",t->cur_block);
delete t; delete t;
......
...@@ -94,9 +94,9 @@ class TableBlockStorage ...@@ -94,9 +94,9 @@ class TableBlockStorage
public: public:
bool Open(const char* name, int inf_sz, int key_sz, int sz, int block_num, int block_lim, int seek); bool Open(const char* name, int inf_sz, int key_sz, int sz, int block_num, int block_lim, int seek);
bool Create(const char* name, int inf_sz, int key_sz, int sz, int block_num, int block_lim, int seek); bool Create(const char* name, int inf_sz, int key_sz, int sz, int block_num, int block_lim, int seek);
bool AddRow(char* key, char* val); bool AddRow(void* key, void* val);
bool DelRow(char* key); bool DelRow(void* key);
char* FindKeyValue(char* key, char* val); void* FindKeyValue(void* key, void* val);
}; };
class CycleStorage class CycleStorage
...@@ -112,7 +112,7 @@ class CycleStorage ...@@ -112,7 +112,7 @@ class CycleStorage
~CycleStorage(); ~CycleStorage();
bool Open(const char* name, int inf_sz, int sz, int seek); bool Open(const char* name, int inf_sz, int sz, int seek);
bool Create(const char* name, int inf_sz, int sz, int seek); bool Create(const char* name, int inf_sz, int sz, int seek);
bool AddRow(char* str); bool AddRow(void* str);
bool DelRow(int row); bool DelRow(int row);
bool DelAllRows(void); bool DelAllRows(void);
bool ViewRows(int beg, int num); bool ViewRows(int beg, int num);
......
...@@ -118,48 +118,25 @@ bool CycleStorage::Open(const char* name, int inf_sz, int sz, int seek) ...@@ -118,48 +118,25 @@ bool CycleStorage::Open(const char* name, int inf_sz, int sz, int seek)
} }
if(r<size) if(r<size)
{ {
fseek(file,seekpos+r*(sizeof(CycleStorageElem)+inf_size),0);
fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file);
tail=r-1; tail=r-1;
} }
else tail=size-1; else tail=size-1;
} }
else if((jrn->status==2)||(jrn->status==3))
{
while((jrn->status!=1)&&(jrn->status!=6)&&(r - l > 1))
{
mid = (l+r)/2;
fseek(file,seekpos+mid*(sizeof(CycleStorageElem)+inf_size),0);
fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file);
iter++;
if((jrn->status==2)||(jrn->status==3))
l = mid;
else if((jrn->status==4)||(jrn->status==5))
r = mid;
else
{
r=mid;
break;
}
}
if(r<size)
head=r;
else head=size-1;
tail=head-1;
if(tail<0) tail=size-1;
}
else else
{ {
int i,j;
i=jrn->status-jrn->status%2;
if(i==2) j=4; else j=2;
while((jrn->status!=1)&&(jrn->status!=6)&&(r - l > 1)) while((jrn->status!=1)&&(jrn->status!=6)&&(r - l > 1))
{ {
mid = (l+r)/2; mid = (l+r)/2;
fseek(file,seekpos+mid*(sizeof(CycleStorageElem)+inf_size),0); fseek(file,seekpos+mid*(sizeof(CycleStorageElem)+inf_size),0);
fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file); fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file);
iter++; iter++;
if((jrn->status==2)||(jrn->status==3)) if((jrn->status==i)||(jrn->status==i+1))
r = mid;
else if((jrn->status==4)||(jrn->status==5))
l = mid; l = mid;
else if((jrn->status==j)||(jrn->status==j+1))
r = mid;
else else
{ {
r=mid; r=mid;
...@@ -229,7 +206,7 @@ bool CycleStorage::Create(const char* name, int inf_sz, int sz, int seek) ...@@ -229,7 +206,7 @@ bool CycleStorage::Create(const char* name, int inf_sz, int sz, int seek)
return true; return true;
} }
bool CycleStorage::AddRow(char* str) bool CycleStorage::AddRow(void* str)
{ {
if(file==NULL) return false; if(file==NULL) return false;
CycleStorageElem *jrn = (CycleStorageElem*)new char[(sizeof(CycleStorageElem)+inf_size)]; CycleStorageElem *jrn = (CycleStorageElem*)new char[(sizeof(CycleStorageElem)+inf_size)];
...@@ -238,10 +215,10 @@ bool CycleStorage::AddRow(char* str) ...@@ -238,10 +215,10 @@ bool CycleStorage::AddRow(char* str)
/*! 2 - (head=-1), 1 (head=tail=0) ) /*! 2 - (head=-1), 1 (head=tail=0) )
*/ */
memcpy((char*)jrn+sizeof(CycleStorageElem),str,inf_size);
if(head==-1) if(head==-1)
{ {
jrn->status=1; jrn->status=1;
memcpy((void*)((char*)jrn+sizeof(CycleStorageElem)),(void*)str,inf_size);
filewrite(jrn,0); filewrite(jrn,0);
head=0; head=0;
tail=0; tail=0;
...@@ -251,7 +228,6 @@ bool CycleStorage::AddRow(char* str) ...@@ -251,7 +228,6 @@ bool CycleStorage::AddRow(char* str)
if(head==tail) if(head==tail)
{ {
jrn->status=2; jrn->status=2;
memcpy((void*)((char*)jrn+sizeof(CycleStorageElem)),(void*)str,inf_size);
filewrite(jrn,1); filewrite(jrn,1);
tail=1; tail=1;
delete jrn; delete jrn;
...@@ -279,10 +255,10 @@ bool CycleStorage::AddRow(char* str) ...@@ -279,10 +255,10 @@ bool CycleStorage::AddRow(char* str)
} }
else tail++; else tail++;
fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file); fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file);
memcpy((char*)jrn+sizeof(CycleStorageElem),str,inf_size);
if(jrn->status==0) if(jrn->status==0)
{ {
jrn->status=2; jrn->status=2;
memcpy((void*)((char*)jrn+sizeof(CycleStorageElem)),(void*)str,inf_size);
filewrite(jrn,tail); filewrite(jrn,tail);
} }
else else
...@@ -294,7 +270,6 @@ bool CycleStorage::AddRow(char* str) ...@@ -294,7 +270,6 @@ bool CycleStorage::AddRow(char* str)
head++; head++;
if(head>=size) head=0; if(head>=size) head=0;
jrn->status=i; jrn->status=i;
memcpy((void*)((char*)jrn+sizeof(CycleStorageElem)),(void*)str,inf_size);
filewrite(jrn,tail); filewrite(jrn,tail);
fseek(file,seekpos+head*(sizeof(CycleStorageElem)+inf_size),0); fseek(file,seekpos+head*(sizeof(CycleStorageElem)+inf_size),0);
fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file); fread(jrn,(sizeof(CycleStorageElem)+inf_size),1,file);
......
...@@ -34,12 +34,12 @@ ...@@ -34,12 +34,12 @@
#include "Storages.h" #include "Storages.h"
bool KeyCompare(char* key1, char* key2, int cnt) bool KeyCompare(void* key1, void* key2, int cnt)
{ {
bool fl=true; bool fl=true;
for(int i=0;i<cnt;i++) for(int i=0;i<cnt;i++)
{ {
if(*(key1+sizeof(TableBlockStorageElem)+i)!=*(key2+i)) if(*((char*)key1+sizeof(TableBlockStorageElem)+i)!=*((char*)key2+i))
{ {
fl=false; fl=false;
break; break;
...@@ -252,7 +252,7 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz, ...@@ -252,7 +252,7 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz,
return true; return true;
} }
bool TableBlockStorage::AddRow(char* key, char* value) bool TableBlockStorage::AddRow(void* key, void* value)
{ {
int i=0,pos=-1,empty=-1,k; int i=0,pos=-1,empty=-1,k;
if(file==NULL) return false; if(file==NULL) return false;
...@@ -260,26 +260,26 @@ bool TableBlockStorage::AddRow(char* key, char* value) ...@@ -260,26 +260,26 @@ bool TableBlockStorage::AddRow(char* key, char* value)
CopyToNextBlock(); CopyToNextBlock();
for(i=0;i<block_size;i++) for(i=0;i<block_size;i++)
{ {
if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]>=0)) if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]->count>=0))
if(KeyCompare((char*)mem[i],key,k_size)) if(KeyCompare(mem[i],key,k_size))
pos = i; pos = i;
if((mem[i]->count<0)&&(empty<0)) empty=i; if((mem[i]->count<0)&&(empty<0)) empty=i;
} }
if(pos>=0) if(pos>=0)
{ {
mem[pos]->count=++max; mem[pos]->count=++max;
memcpy((void*)((char*)mem[pos]+sizeof(TableBlockStorageElem)+k_size),(void*)value,inf_size); memcpy((char*)mem[pos]+sizeof(TableBlockStorageElem)+k_size,value,inf_size);
filewrite(mem[pos],cur_block*block_size+pos); filewrite(mem[pos],cur_block*block_size+pos);
return true;; return true;;
} }
mem[empty]->count=++max; mem[empty]->count=++max;
memcpy((void*)((char*)mem[empty]+sizeof(TableBlockStorageElem)),(void*)key,k_size); memcpy((char*)mem[empty]+sizeof(TableBlockStorageElem),key,k_size);
memcpy((void*)((char*)mem[empty]+sizeof(TableBlockStorageElem)+k_size),(void*)value,inf_size); memcpy((char*)mem[empty]+sizeof(TableBlockStorageElem)+k_size,value,inf_size);
filewrite(mem[empty],cur_block*block_size+empty); filewrite(mem[empty],cur_block*block_size+empty);
return true; return true;
} }
bool TableBlockStorage::DelRow(char* key) bool TableBlockStorage::DelRow(void* key)
{ {
int i; int i;
if(file==NULL) return false; if(file==NULL) return false;
...@@ -290,8 +290,8 @@ bool TableBlockStorage::DelRow(char* key) ...@@ -290,8 +290,8 @@ bool TableBlockStorage::DelRow(char* key)
CopyToNextBlock(); CopyToNextBlock();
for(i=0;i<block_size;i++) for(i=0;i<block_size;i++)
{ {
if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]>=0)) if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]->count>=0))
if(KeyCompare((char*)mem[i],key,k_size)) if(KeyCompare(mem[i],key,k_size))
{ {
mem[i]->count=++max; mem[i]->count=++max;
*((char*)mem[i]+sizeof(TableBlockStorageElem))=0; *((char*)mem[i]+sizeof(TableBlockStorageElem))=0;
...@@ -301,7 +301,7 @@ bool TableBlockStorage::DelRow(char* key) ...@@ -301,7 +301,7 @@ bool TableBlockStorage::DelRow(char* key)
} }
} }
char* TableBlockStorage::FindKeyValue(char* key, char* val) void* TableBlockStorage::FindKeyValue(void* key, void* val)
{ {
int i,k; int i,k;
if(file!=NULL) if(file!=NULL)
...@@ -309,9 +309,9 @@ char* TableBlockStorage::FindKeyValue(char* key, char* val) ...@@ -309,9 +309,9 @@ char* TableBlockStorage::FindKeyValue(char* key, char* val)
for(i=0;i<block_size;i++) for(i=0;i<block_size;i++)
{ {
if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]>=0)) if((*((char*)mem[i]+sizeof(TableBlockStorageElem))!=0)&&(mem[i]>=0))
if(KeyCompare((char*)mem[i],key,k_size)) if(KeyCompare(mem[i],key,k_size))
{ {
memcpy((void*)val,(void*)((char*)mem[i]+sizeof(TableBlockStorageElem)+k_size),inf_size); memcpy(val,(char*)mem[i]+sizeof(TableBlockStorageElem)+k_size,inf_size);
return val; return val;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment