Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita4e3a52

Browse files
Move ExtractStr and ExtracBin methods to separate classes
1 parentf666995 commita4e3a52

14 files changed

+159
-120
lines changed

‎blobstamper/blob.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,6 @@ Blob::Size()
9393
return end - begin +1;
9494
}
9595

96-
std::vector<char>
97-
Blob::ShiftSingleStampBin(StampBase& stmp)
98-
{
99-
return stmp.ExtractBin(*this);
100-
}
101-
102-
std::string
103-
Blob::ShiftSingleStampStr(StampBase& stmp)
104-
{
105-
return stmp.ExtractStr(*this);
106-
}
107-
10896
void
10997
Blob::DataDup(char *& data_out,size_t& size_out)
11098
{

‎blobstamper/blob.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ class Blob
4242
std::vector<char>ChopBlank(StampBase &stmp);
4343
voidDataDup(char *& data_out,size_t& size_out);
4444
std::vector<char>asVector();
45-
46-
47-
std::vector<char>ShiftSingleStampBin(StampBase &stmp);
48-
std::stringShiftSingleStampStr(StampBase &stmp);
4945
};
5046

5147
classOutOfData/*An exeption. Experemental for now*/

‎blobstamper/galley.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828

2929
int
30-
GalleyVector::minSize()
30+
GalleyVectorBase::minSize()
3131
{
3232
if (stamp.isFixedSize())
3333
{
@@ -49,33 +49,33 @@ GalleyVector::minSize()
4949

5050

5151
std::vector<std::string>
52-
GalleyVector::ExtractStr(Blob &blob)
52+
GalleyVectorStr::ExtractStr(Blob &blob)
5353
{
5454
std::vector<Blob> blobs =extract_internal(blob);
5555
std::vector<std::string>res(blobs.size());
5656

5757
for(int i =0; i<blobs.size(); i++)
5858
{
59-
res[i] = blobs[i].ShiftSingleStampStr(stamp);
59+
res[i] =s_stamp.ExtractStr(blobs[i]);
6060
}
6161
return res;
6262
}
6363

6464
std::vector<std::vector<char>>
65-
GalleyVector::ExtractBin(Blob &blob)
65+
GalleyVectorBin::ExtractBin(Blob &blob)
6666
{
6767
std::vector<Blob> blobs =extract_internal(blob);
6868
std::vector<std::vector<char>>res(blobs.size());
6969

7070
for(int i =0; i<blobs.size(); i++)
7171
{
72-
res[i] = blobs[i].ShiftSingleStampBin(stamp);
72+
res[i] =b_stamp.ExtractBin(blobs[i]);
7373
}
7474
return res;
7575
}
7676

7777
std::vector<Blob>
78-
GalleyVector::extract_internal(Blob &blob)
78+
GalleyVectorBase::extract_internal(Blob &blob)
7979
{
8080
if (blob.Size()<stamp.minSize())
8181
{
@@ -182,7 +182,7 @@ GalleyVector::extract_internal(Blob &blob)
182182
/**********************************************/
183183

184184
std::vector<Blob>
185-
GalleySet::extract_internal(Blob &blob)
185+
GalleySetBase::extract_internal(Blob &blob)
186186
{
187187
std::vector<Blob> res;
188188
int fixed_total_size =0;// Summ of sizes of fixed parts of all stamps
@@ -348,37 +348,37 @@ GalleySet::extract_internal(Blob &blob)
348348
}
349349

350350
std::vector<std::string>
351-
GalleySet::ExtractStr(Blob &blob)
351+
GalleySetStr::ExtractStr(Blob &blob)
352352
{
353353
std::vector<std::string> res;
354354
std::vector<Blob> blobs =extract_internal(blob);
355355
for(int i=0; i<blobs.size(); i++)
356356
{
357357
Blob blob = blobs[i];
358-
StampBase & stamp =stamps[i];
359-
std::string str=blob.ShiftSingleStampStr(stamp);
358+
StampBaseStr & stamp =s_stamps[i];
359+
std::string str=stamp.ExtractStr(blob);
360360
res.push_back(str);
361361
}
362362
return res;
363363
}
364364

365365
std::vector<std::vector<char>>
366-
GalleySet::ExtractBin(Blob &blob)
366+
GalleySetBin::ExtractBin(Blob &blob)
367367
{
368368
std::vector<std::vector<char>> res;
369369
std::vector<Blob> blobs =extract_internal(blob);
370370
for(int i=0; i<blobs.size(); i++)
371371
{
372372
Blob blob = blobs[i];
373-
StampBase & stamp =stamps[i];
373+
StampBaseBin & stamp =b_stamps[i];
374374
std::vector<char> v = stamp.ExtractBin(blob);
375375
res.push_back(v);
376376
}
377377
return res;
378378
}
379379

380380
int
381-
GalleySet::minSize()
381+
GalleySetBase::minSize()
382382
{
383383
bool has_variated_stamps =false;
384384
bool has_unbounded_stamps =false;
@@ -415,7 +415,7 @@ GalleySet::minSize()
415415
}
416416

417417
int
418-
GalleySet::maxSize()
418+
GalleySetBase::maxSize()
419419
{
420420
int res =0;
421421

‎blobstamper/galley.h

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,40 @@ class GalleyBase
3939

4040
};
4141

42-
classGalleyVector :publicGalleyBase
42+
classGalleyVectorBase :publicGalleyBase
4343
{
4444
protected:
4545
StampBase &stamp;
4646
public:
47-
GalleyVector(StampBase & stamp_arg) : stamp(stamp_arg) {};
47+
GalleyVectorBase(StampBase & stamp_arg) : stamp(stamp_arg) {};
4848
std::vector<Blob>extract_internal(Blob &blob);
49-
std::vector<std::string>ExtractStr(Blob &blob);
50-
std::vector<std::vector<char>>ExtractBin(Blob &blob);
51-
5249
intminSize()override;
5350
intmaxSize()override {return -1;};/* Sereies always takes as much data as it can take*/
5451
};
5552

56-
template<classT>classGalleyVectorV:publicGalleyVector
53+
54+
classGalleyVectorStr:publicGalleyVectorBase
55+
{
56+
StampBaseStr & s_stamp;
57+
public:
58+
GalleyVectorStr(StampBaseStr & stamp_arg): GalleyVectorBase(stamp_arg), s_stamp(stamp_arg) {};
59+
std::vector<std::string>ExtractStr(Blob &blob);
60+
};
61+
62+
classGalleyVectorBin:publicGalleyVectorBase
63+
{
64+
StampBaseBin & b_stamp;
65+
public:
66+
GalleyVectorBin(StampBaseBin & stamp_arg): GalleyVectorBase(stamp_arg), b_stamp(stamp_arg) {};
67+
std::vector<std::vector<char>>ExtractBin(Blob &blob);
68+
};
69+
70+
71+
template<classT>classGalleyVectorV:publicGalleyVectorBase
5772
{
5873
StampBaseV<T>& v_stamp;
5974
public:
60-
GalleyVectorV(StampBaseV<T> & stamp_arg):GalleyVector(stamp_arg), v_stamp(stamp_arg) {};
75+
GalleyVectorV(StampBaseV<T> & stamp_arg):GalleyVectorBase(stamp_arg), v_stamp(stamp_arg) {};
6176
std::vector<T>ExtractValues(Blob &blob);
6277
};
6378

@@ -76,19 +91,54 @@ GalleyVectorV<T>::ExtractValues(Blob &blob)
7691
}
7792

7893

79-
classGalleySet :publicGalleyBase
94+
classGalleySetBase :publicGalleyBase
8095
{
8196
protected:
8297
std::vector<std::reference_wrapper<StampBase>> stamps;
8398
public:
84-
GalleySet(std::vector<std::reference_wrapper<StampBase>> arg) : stamps(arg) {};
99+
GalleySetBase(std::vector<std::reference_wrapper<StampBase>> arg) : stamps(arg) {};
85100
std::vector<Blob>extract_internal(Blob &blob);
86-
std::vector<std::string>ExtractStr(Blob &blob);
87-
std::vector<std::vector<char>>ExtractBin(Blob &blob);
88101

89102
intminSize()override;
90103
intmaxSize()override;
91104
};
92105

106+
classGalleySetBin :publicGalleySetBase
107+
{
108+
std::vector<std::reference_wrapper<StampBaseBin>> b_stamps;
109+
public:
110+
GalleySetBin(std::vector<std::reference_wrapper<StampBaseBin>> arg) : GalleySetBase(cast_arg(arg)), b_stamps(arg) {};
111+
std::vector<std::vector<char>>ExtractBin(Blob &blob);
112+
113+
std::vector<std::reference_wrapper<StampBase>>cast_arg(std::vector<std::reference_wrapper<StampBaseBin>> in)
114+
{
115+
std::vector<std::reference_wrapper<StampBase>> res;
116+
for(StampBaseBin & s : in)
117+
{
118+
res.push_back(s);
119+
}
120+
return res;
121+
};
122+
};
123+
124+
125+
classGalleySetStr :publicGalleySetBase
126+
{
127+
std::vector<std::reference_wrapper<StampBaseStr>> s_stamps;
128+
public:
129+
GalleySetStr(std::vector<std::reference_wrapper<StampBaseStr>> arg) : GalleySetBase(cast_arg(arg)), s_stamps(arg) {};
130+
std::vector<std::string>ExtractStr(Blob &blob);
131+
132+
std::vector<std::reference_wrapper<StampBase>>cast_arg(std::vector<std::reference_wrapper<StampBaseStr>> in)
133+
{
134+
std::vector<std::reference_wrapper<StampBase>> res;
135+
for(StampBaseStr & s : in)
136+
{
137+
res.push_back(s);
138+
}
139+
return res;
140+
};
141+
};
142+
93143

94144
#endif/* GALLEY_H*/

‎blobstamper/stamp.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,24 @@ class StampBase
3535
boolisFixedSize() {returnminSize() ==maxSize();}
3636
boolisVariated() {return !isFixedSize() && !isUnbounded();}
3737
boolisUnbounded() {returnmaxSize() == -1;}
38+
};
39+
3840

39-
virtual std::vector<char>ExtractBin(Blob &blob) {throwNotImplemented();};
40-
virtual std::stringExtractStr(Blob &blob) {throwNotImplemented();};
41+
classStampBaseStr:publicvirtual StampBase
42+
{
43+
public:
44+
virtual std::stringExtractStr(Blob &blob) = 0;
45+
};
46+
47+
48+
classStampBaseBin:publicvirtual StampBase
49+
{
50+
public:
51+
virtual std::vector<char>ExtractBin(Blob &blob) = 0;
4152
};
4253

4354

44-
template<classT>classStampBasePV:publicvirtual StampBase
55+
template<classT>classStampBasePV:publicStampBaseBin
4556
{
4657
public:
4758
virtual sized_ptr<T>ExtractPValue(Blob &blob) = 0;/* Shoud be defined by derived classes*/

‎blobstamper/stamp_arithm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include"helpers.h"
2424
#include"stamp.h"
2525

26-
template<classT>classStampArithm:publicStampFixed,publicStampBaseV<T>
26+
template<classT>classStampArithm:publicStampFixed,publicStampBaseStr,publicStampBaseV<T>
2727
{
2828
public:
2929
StampArithm() { size =sizeof(T);};

‎blobstamper/stamp_dict.cpp

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,26 @@
2121
#include"stamp_arithm.h"
2222
#include"stamp_dict.h"
2323

24-
StampFixed&
25-
StampDict::GuessStamp(DictBase & dict)
24+
int
25+
StampDict::ChooseStampSize(DictBase & dict)
2626
{
2727
if (dict.size()<= UCHAR_MAX+1)
2828
{
2929
stamp_max_value = UCHAR_MAX;
30-
returnstamp8;
30+
return1;
3131
}
3232
if (dict.size()<= USHRT_MAX+1)
3333
{
3434
stamp_max_value = USHRT_MAX;
35-
returnstamp16;
35+
return2;
3636
}
3737
if (dict.size()<= UINT_MAX+1)
3838
{
3939
stamp_max_value = UINT_MAX;
40-
returnstamp32;
40+
return4;
4141
}
4242
stamp_max_value = ULONG_MAX;
43-
returnstamp64;
43+
return8;
4444
}
4545

4646
std::string
@@ -49,38 +49,30 @@ StampDict::ExtractStr(Blob &blob)
4949
unsignedlonglong index_oracle;
5050

5151
/* Shifting index oracle according to size of dictionary index variable*/
52-
switch (stamp.minSize())
52+
switch (stamp_size)
5353
{
5454
case1:
5555
{
56-
std::vector<char> v = blob.ShiftSingleStampBin(stamp);
57-
unsignedchar * i = (unsignedchar *) &v[0];
58-
index_oracle = * i;
56+
index_oracle = stamp8.ExtractValue(blob);
5957
break;
6058
}
6159
case2:
6260
{
63-
std::vector<char> v = blob.ShiftSingleStampBin(stamp);
64-
unsignedshortint * i = (unsignedshortint *) &v[0];
65-
index_oracle = * i;
61+
index_oracle = stamp16.ExtractValue(blob);
6662
break;
6763
}
6864
case4:
6965
{
70-
std::vector<char> v = blob.ShiftSingleStampBin(stamp);
71-
unsignedint * i = (unsignedint *) &v[0];
72-
index_oracle = * i;
66+
index_oracle = stamp32.ExtractValue(blob);
7367
break;
7468
}
7569
case8:
7670
{
77-
std::vector<char> v = blob.ShiftSingleStampBin(stamp);
78-
unsignedlonglong * i = (unsignedlonglong *) &v[0];
79-
index_oracle = * i;
71+
index_oracle = stamp64.ExtractValue(blob);
8072
break;
8173
}
8274
default:
83-
printf("StampDict::ExtractStr: Something is really wrong\n");
75+
printf("StampDict::ExtractStr: Something is really wrong\n");// FIXME better to throw something here :-)
8476
exit(1);
8577
}
8678
longlong actual_index = ((double) index_oracle) / stamp_max_value * dict.size();

‎blobstamper/stamp_dict.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,24 @@
2626
#include"stamp_arithm.h"
2727
#include"dict.h"
2828

29-
classStampDict:publicStampFixed
29+
classStampDict:publicStampFixed,publicStampBaseStr
3030
{
3131
protected:
32-
StampArithm<char> stamp8;
32+
StampArithm<unsignedchar> stamp8;
3333
StampArithm<unsignedshortint> stamp16;
3434
StampArithm<unsignedint> stamp32;
3535
StampArithm<unsignedlonglong> stamp64;
36-
StampFixed& stamp;
36+
int stamp_size;
3737
DictBase& dict;
3838
unsignedlonglong stamp_max_value;
3939

40-
StampFixed&GuessStamp(DictBase & dict);
40+
intChooseStampSize(DictBase & dict);
4141

4242
public:
43-
StampDict(DictBase & dict_arg) : dict{dict_arg},stamp{GuessStamp(dict_arg)} {};
43+
StampDict(DictBase & dict_arg) : dict{dict_arg},stamp_size{ChooseStampSize(dict_arg)} {};
4444
std::stringExtractStr(Blob &blob)override;
45-
intminSize()override {returnstamp.minSize();}
46-
intmaxSize()override {returnstamp.maxSize();}
45+
intminSize()override {returnstamp_size;}
46+
intmaxSize()override {returnstamp_size;}
4747
};
4848

4949
#endif/* STAMP_DICT_H*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp