203 bool is_demo = args.
filename ==
nullptr;
206 char demo_yaml[] =
""
207 "doe: a deer, a female deer\n"
208 "ray: a drop of golden sun\n"
209 "me : a name I call myself\n"
210 "far: a long long way to run\n"
215 const int demo_expected[] = {
253 const char *filename = args.
filename;
254 std::vector<char> yaml_file;
265 if(filename_ ==
"-" || filename_ ==
"stdin")
315 bool ok = (result.
events[pos] == demo_expected[pos]);
321 printf(
"pos=%zu\tevent[%zu]:\t%.*s = 0x%08x", pos, evt, static_cast<int>(len), flags, result.
events[pos]);
325 int offset = result.
events[pos + 1];
326 int length = result.
events[pos + 2];
329 const char *ptr = in_arena ? result.
arena.data() : yaml.
str;
330 const char *
str = ptr + offset;
332 printf(
"\tstr=(%d,%d)\t'%.*s'", offset, length, length, str);
333 ok = ok && (offset == demo_expected[pos + 1]);
334 ok = ok && (length == demo_expected[pos + 2]);
340 printf(
" ... fail!");
347 return success ? 0 : 1;
std::vector< evt_bits > events
result buffer with events
bool parse_in_place(const char *filename, c4::substr yaml, IntsResult *result)
c4::yml::extra::EventHandlerInts handler
C * str
a restricted pointer to the first character of the substring
substr to_substr(char(&s)[N]) noexcept
void stdin_get_contents(ContiguousContainer *cont, FILE *f=stdin)
load a file from stdin (or similar stream-like file) and return a newly created ContiguousContainer w...
evt_size required_size_events() const
get the size needed for the event buffer from the previous parse
evt_size estimate_events_ints_size(csubstr src)
Read YAML source and, without undergoing a full parse, estimate the size of the integer buffer requir...
void events_ints_print(csubstr parsed_yaml, csubstr arena, ievt::evt_bits const *evts, ievt::evt_bits evts_sz)
Print integer events to stdout.
size_t size() const noexcept
std::vector< char > arena
arena to place out-of-source filtered scalars or tags
csubstr to_csubstr(const char(&s)[N]) noexcept
void file_get_contents(const char *filename, FILE *fp, size_t filesz, void *buf, size_t bufsz)
load a file of specified size from disk into an existing contiguous buffer.
void resize_buffers(c4::yml::extra::evt_size esz, size_t arena_size)
int32_t evt_size
data type for integer events size.
bool parse_or_resize_and_then_parse(const char *filename, c4::csubstr yaml, IntsResult *result)
std::vector< char > yaml
source buffer
bool parse_args(int argc, const char **argv, Args *args, int &status)