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

Commit6d8607a

Browse files
Rework code that deals with chopping blob into pieces... Now you should point only size values
1 parent13caa8a commit6d8607a

10 files changed

+42
-42
lines changed

‎blobstamper/blob.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,46 +46,40 @@ Blob::Dump()
4646
hexdump(data + begin, length);
4747
}
4848

49+
4950
std::shared_ptr<Blob>
50-
Blob::ShiftBytes(size_tn)
51+
Blob::Chop(size_tchop_size)
5152
{
52-
if (this->Size() <n)
53+
if (this->Size() <chop_size)
5354
{
5455
throwOutOfData();
5556
}
5657

57-
std::shared_ptr<Blob> new_blob = std::make_shared<Blob>(this->data, size);
58-
59-
new_blob->begin = begin;/* FIXME this should go private once*/
60-
new_blob->end = begin + n -1;
61-
62-
begin += n;
58+
std::shared_ptr<Blob> new_blob = std::make_shared<Blob>(this->data + begin, chop_size);
59+
begin += chop_size;
6360

6461
return new_blob;
6562
}
6663

67-
std::vector<char>
68-
Blob::ChopBlank(StampBase &stamp)
64+
std::shared_ptr<Blob>
65+
Blob::Chop(size_t min_size,size_t max_size)
6966
{
70-
if (stamp.minSize() >this->Size())
67+
if (this->Size() < min_size)
7168
{
7269
throwOutOfData();
7370
}
74-
size_t res_size;
75-
if (stamp.isUnbounded())
76-
{
77-
res_size =this->Size();
78-
}else
79-
{
80-
res_size = stamp.maxSize();
81-
if (res_size >this->Size())
82-
res_size =this->Size();
83-
}
84-
std::vector<char>res((char*)this->data +this->begin, (char*)this->data +this->begin + res_size);
85-
this->begin += res_size;
86-
return res;
71+
if (this->Size() >= max_size)
72+
returnthis->Chop(max_size);
73+
74+
returnthis->Chop(this->Size());
8775
}
8876

77+
std::vector<char>
78+
Blob::AsByteVector()
79+
{
80+
std::vector<char>res(data + begin, data + begin + size);
81+
return res;
82+
}
8983

9084
size_t
9185
Blob::Size()

‎blobstamper/blob.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ class Blob
3939
boolisEmpty ();
4040
size_tSize();
4141
voidDump();
42-
std::shared_ptr<Blob>ShiftBytes(size_t n);
43-
std::vector<char>ChopBlank(StampBase &stmp);
42+
43+
std::vector<char>AsByteVector();
44+
std::shared_ptr<Blob>Chop(size_t chop_size);
45+
std::shared_ptr<Blob>Chop(size_t min_size,size_t max_size);
46+
4447
voidDataDup(char *& data_out,size_t& size_out);
4548
std::vector<char>asVector();
4649
std::stringasString();/* Should not be used in prod, for tests and examples only*/

‎blobstamper/galley.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ GalleyVectorBase::extract_internal(std::shared_ptr<Blob> blob)
8787
int size = stamp.minSize();
8888
while (blob->Size() >= size)
8989
{
90-
std::shared_ptr<Blob> el = blob->ShiftBytes(size);
90+
std::shared_ptr<Blob> el = blob->Chop(size);
9191
res.push_back(el);
9292
}
9393
}
@@ -151,7 +151,7 @@ GalleyVectorBase::extract_internal(std::shared_ptr<Blob> blob)
151151
int el_size = el_size_f;
152152
remainder = el_size_f - el_size;
153153

154-
std::shared_ptr<Blob> blob2 = blob->ShiftBytes(el_size);
154+
std::shared_ptr<Blob> blob2 = blob->Chop(el_size);
155155
res.push_back(blob2);
156156
}
157157
}
@@ -171,7 +171,7 @@ GalleyVectorBase::extract_internal(std::shared_ptr<Blob> blob)
171171
int size = (double) oracle / ORACLE_MAX * (var_size +1);/* +1 -- это грубая эмуляция округления вверх. oracle == ORACLE_MAX-1 == 65534 должен дать count_max*/
172172
if (size > var_size) size = var_size;// In case we've hit oracle == ORACLE_MAX boundary
173173
size += fixed_size;
174-
std::shared_ptr<Blob> blob2 = blob->ShiftBytes(size);
174+
std::shared_ptr<Blob> blob2 = blob->Chop(size);
175175
res.push_back(blob2);
176176
}
177177
}
@@ -341,7 +341,7 @@ GalleySetBase::extract_internal(std::shared_ptr<Blob> blob)
341341
unbounded_remainder = len - el_size;
342342
el_size +=s.minSize();
343343
}
344-
std::shared_ptr<Blob> blob2 = blob->ShiftBytes(el_size);
344+
std::shared_ptr<Blob> blob2 = blob->Chop(el_size);
345345
res.push_back(blob2);
346346
}
347347
return res;

‎blobstamper/stamp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@ StampBase::Load(std::shared_ptr<Blob> blob)
4545
if (res_size > blob->Size())
4646
res_size = blob->Size();
4747
}
48-
bitten_blob = blob->ShiftBytes(res_size);
48+
bitten_blob = blob->Chop(res_size);
4949
}

‎blobstamper/stamp_arithm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ StampArithm<T>::ExtractStr(std::shared_ptr<Blob> blob)
4242
template<classT> T
4343
StampArithm<T>::ExtractValue(std::shared_ptr<Blob> blob)
4444
{
45-
std::vector<char> v = blob->ChopBlank(*this);/* Chop out blank ofmaxSize*/
45+
std::vector<char> v = blob->Chop(sizeof(T))->AsByteVector();/* Chop out blank oftype's size*/
4646
T *pT = (T *) &v[0];/* And interpret it as value of arithmetic type*/
4747
return *pT;
4848
}

‎blobstamper/stamp_text.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
std::string
2222
StampTextPulp::ExtractStr(std::shared_ptr<Blob> blob)
2323
{
24-
25-
std::vector<char> data = blob->ChopBlank(*this);
24+
std::vector<char> data = blob->Chop(minSize(),maxSize())->AsByteVector();
2625

2726
std::vector<char>::iterator the_iterator;
2827

‎t/001-blob-generic.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ main()
5656
char expected2[]="123";
5757

5858
std::shared_ptr<Blob> blob1 = std::make_shared<Blob>(short_sample,strlen(short_sample));
59-
std::shared_ptr<Blob> blob2 = blob1->ShiftBytes(3);
59+
std::shared_ptr<Blob> blob2 = blob1->Chop(3);
6060

6161
blob1->DataDup(ptr,size);
6262
ok(size ==strlen(expected1),"Blob shifted data size ok");
@@ -73,7 +73,7 @@ main()
7373
std::shared_ptr<Blob> blob = std::make_shared<Blob>(my_data,strlen(my_data));
7474
try
7575
{
76-
std::shared_ptr<Blob> blob_res = blob->ShiftBytes(99999);
76+
std::shared_ptr<Blob> blob_res = blob->Chop(99999);
7777
ok(false,"Shift too many bytes");
7878
}
7979
catch (OutOfData)

‎t/320-galley-recursion-experiments.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ printf("___________________________ %i\n", blob->Size());
292292

293293
printf("llll - %i %i\n", split_data[0], split_data[1]);
294294

295-
std::shared_ptr<Blob> blob_left = blob->ShiftBytes(split_data[0]+2*stamp_char.minSize() );
295+
std::shared_ptr<Blob> blob_left = blob->Chop(split_data[0]+2*stamp_char.minSize() );
296296

297297
printf("~~~ %i\n",variant_n);
298298

@@ -303,7 +303,7 @@ std::string
303303
TestRNode2::do_recursion(std::shared_ptr<Blob> blob)
304304
{
305305
try{
306-
std::shared_ptr<Blob> tmp = blob->ShiftBytes(1);
306+
std::shared_ptr<Blob> tmp = blob->Chop(1);
307307
}
308308
catch (OutOfData)
309309
{
@@ -318,7 +318,7 @@ std::string
318318
TestRNode3::do_recursion(std::shared_ptr<Blob> blob)
319319
{
320320
try{
321-
std::shared_ptr<Blob> tmp = blob->ShiftBytes(1);
321+
std::shared_ptr<Blob> tmp = blob->Chop(1);
322322
}
323323
catch (OutOfData)
324324
{

‎t/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Запуск отдельного теста:
2+
3+
```
4+
LD_LIBRARY_PATH=../libtappp ./001-blob-generic.t
5+
```

‎t/test-chars-stamps.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ std::string
3232
StampTwoChars::ExtractStr(std::shared_ptr<Blob> blob)
3333
{
3434
/* Chopping suitable data chunk from blob*/
35-
std::vector<char> data = blob->ChopBlank(*this);
35+
std::vector<char> data = blob->Chop(minSize(),maxSize())->AsByteVector();
3636

3737
size_t buf_size = data.size() +1;
3838
char * buf = (char *)malloc(buf_size);
@@ -59,8 +59,7 @@ class StampSeveralChars: public StampBaseStr
5959
std::string
6060
StampSeveralChars::ExtractStr(std::shared_ptr<Blob> blob)
6161
{
62-
63-
std::vector<char> data = blob->ChopBlank(*this);
62+
std::vector<char> data = blob->Chop(minSize(),maxSize())->AsByteVector();
6463
/* Save optained data as string*/
6564
/* NEVER do this in prod, as in real live blob is binary and may have 0 in the middle of it*/
6665
char * buf;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp