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

Commit5db502b

Browse files
Now StamJSON works as it should
1 parent5224579 commit5db502b

File tree

1 file changed

+72
-10
lines changed

1 file changed

+72
-10
lines changed

‎t/321-galley-recursion-experiments_2.cpp

Lines changed: 72 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ PoolPickerStamp::isRecursive()
9696
std::string
9797
PoolPickerStamp::ExtractStr(std::shared_ptr<Blob> blob)
9898
{
99-
fprintf(stderr,"*");
10099
static ORACLE_STAMP stamp_oracle;
101100
ORACLE_TYPE oracle = stamp_oracle.ExtractValue(blob);
102101

@@ -192,36 +191,99 @@ class StampJSONArray: public StampStrEnumerator
192191
:StampStrEnumerator(picker,",","[","]") {};
193192
};
194193

194+
classStampJSONHashEl:publicStampBaseStr
195+
{
196+
private:
197+
std::shared_ptr<StampJSONString> stamp_name;
198+
std::shared_ptr<PoolPickerStamp> stamp_value;
199+
public:
200+
StampJSONHashEl(std::shared_ptr<PoolPickerStamp> picker)
201+
:stamp_value(picker), stamp_name(std::make_shared<StampJSONString>()) {};
202+
virtualintminSize()override {return stamp_name->minSize() + stamp_value->minSize();};
203+
virtualintmaxSize()override {return -1;};
204+
std::stringExtractStr(std::shared_ptr<Blob> blob)override;
205+
};
206+
207+
std::string
208+
StampJSONHashEl::ExtractStr(std::shared_ptr<Blob> blob)
209+
{
210+
std::string n = stamp_name->ExtractStr(blob);
211+
std::string v = stamp_value->ExtractStr(blob);
212+
return n +":" + v;
213+
}
214+
215+
classStampJSONHash:publicStampStrEnumerator
216+
{
217+
private:
218+
std::shared_ptr<StampJSONHashEl> stamp_el;
219+
public:
220+
StampJSONHash(std::shared_ptr<PoolPickerStamp> picker)
221+
:StampStrEnumerator(stamp_el = std::make_shared<StampJSONHashEl>(picker),",","{","}") {};
222+
};
223+
224+
225+
classStampJSON:publicPoolPickerStamp
226+
{
227+
private:
228+
std::shared_ptr<StampJSONString> stamp_s;
229+
std::shared_ptr<StampJSONInt> stamp_i;
230+
std::shared_ptr<StampJSONFloat> stamp_f;
231+
std::shared_ptr<StampJSONArray> stamp_a;
232+
std::shared_ptr<StampJSONHash> stamp_h;
233+
234+
public:
235+
StampJSON();
236+
};
237+
238+
voidnull_deleter(StampJSON *) {}
239+
240+
StampJSON::StampJSON()
241+
: PoolPickerStamp({})
242+
{
243+
stamp_i = std::make_shared<StampJSONInt>();
244+
stamp_f = std::make_shared<StampJSONFloat>();
245+
stamp_s = std::make_shared<StampJSONString>();
246+
247+
// FIXME Так не надо делеать!!!! null_deleter -- зло.
248+
stamp_a = std::make_shared<StampJSONArray>(std::shared_ptr<StampJSON>(this, null_deleter));
249+
stamp_h = std::make_shared<StampJSONHash>(std::shared_ptr<StampJSON>(this, null_deleter));
250+
add_weak(stamp_i);
251+
add_weak(stamp_f);
252+
add_weak(stamp_s);
253+
add_weak(stamp_a);
254+
add_weak(stamp_h);
255+
}
195256

196257

197258
int
198259
main()
199260
{
200-
// auto dict =std::make_shared<DictLCAlphaSmall>();
201-
// auto stamp_d = std::make_shared<StampDict>(dict);
202-
// auto stamp_d = std::make_shared<StampDictT<DictLCAlphaSmall>>();
203-
// auto stamp_i = std::make_shared<StampArithm<long int>>();
204-
// auto stamp_f = std::make_shared<StampArithm<float>>();
205-
//
206261
auto stamp_d = std::make_shared<StampJSONString>();
207262
auto stamp_i = std::make_shared<StampJSONInt>();
208263
auto stamp_f = std::make_shared<StampJSONFloat>();
209264

210265

211266
// PoolPickerStamp stamp({stamp_i, stamp_f, stamp_d});
212-
std::shared_ptr<PoolPickerStamp>picker(newPoolPickerStamp({stamp_i, stamp_f, stamp_d}));
267+
std::shared_ptr<PoolPickerStamp>picker(newPoolPickerStamp({stamp_f, stamp_i, stamp_d}));
213268
// picker->add_weak(picker);
214269
auto stamp_a = std::make_shared<StampJSONArray>(picker);
215270
picker->add_weak(stamp_a);
216271

272+
auto stamp_h = std::make_shared<StampJSONHash>(picker);
273+
picker->add_weak(stamp_h);
274+
275+
fprintf(stderr," hash sizes= %i %i\n",stamp_h->minSize(), stamp_h->maxSize());
276+
217277

218-
std::shared_ptr<Blob> blob = std::make_shared<Blob>((char *)bin_sample,strlen((char *)bin_sample));
278+
auto blob = std::make_shared<Blob>((char *)bin_sample,strlen((char *)bin_sample));
219279

280+
auto stamp_j = std::make_shared<StampJSON>();
220281

221282
fprintf(stderr,"%i %i\n",stamp_a->minSize(), stamp_a->maxSize());
222283
// for(int i =0; i<25; i++)
223284
{
224-
std::string s = stamp_a->ExtractStr(blob);
285+
// std::string s = stamp_a->ExtractStr(blob);
286+
std::string s = stamp_h->ExtractStr(blob);
225287

226288
fprintf(stderr,"%i %s\n",picker->isRecursive(), s.c_str());
227289
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp