Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ c4_add_library(ryml
ryml.natvis
c4/yml/detail/checks.hpp
c4/yml/detail/dbgprint.hpp
c4/yml/detail/emit_scalar.hpp
c4/yml/detail/print.hpp
c4/yml/detail/stack.hpp
c4/yml/common.hpp
Expand Down Expand Up @@ -169,8 +170,13 @@ if(RYML_EXTRA_ALL
# test the extra facilities as well
if(RYML_EXTRA_INTS OR RYML_EXTRA_ALL)
list(APPEND RYML_EXTRA_SRC
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_handler_ints.cpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_ints.cpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_ints.hpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_handler_ints_resize.cpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_handler_ints_no_resize.cpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/event_handler_ints.hpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/emitter_ints.hpp"
"${CMAKE_CURRENT_LIST_DIR}/src_extra/c4/yml/extra/emitter_ints.def.hpp"
)
endif()
if(RYML_EXTRA_INTS_UTILS OR RYML_EXTRA_ALL)
Expand Down
1 change: 0 additions & 1 deletion bm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ function(ryml_add_bm_comparison_exe name)
c4_add_executable(ryml-bm-${name}
SOURCES bm_common.hpp ${ARGN}
../src_extra/c4/yml/extra/event_handler_ints.hpp
../src_extra/c4/yml/extra/event_handler_ints.cpp
LIBS ryml yaml yaml-cpp benchmark jsoncpp_static nlohmann_json c4fs
INC_DIRS
${RYML_RAPIDJSON_INC_DIR}
Expand Down
67 changes: 51 additions & 16 deletions bm/bm_common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,39 +111,41 @@ namespace bm = benchmark;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------

using IntHandler = ryml::extra::EventHandlerInts;
using IntParser = ryml::ParseEngine<IntHandler>;
struct IntData
using IntHandlerResize = ryml::extra::ievt::EventHandlerInts<true>;
using IntHandlerNoResize = ryml::extra::ievt::EventHandlerInts<false>;
using IntParserResize = ryml::ParseEngine<IntHandlerResize>;
using IntParserNoResize = ryml::ParseEngine<IntHandlerNoResize>;
struct IntDataNoResize
{
std::vector<int> events;
std::vector<char> arena;
void resize(ryml::extra::EventHandlerInts const& handler)
void resize(IntHandlerNoResize const& handler)
{
resize((size_t)handler.required_size_events(),
handler.required_size_arena());
}
void resize(ryml::substr src)
void resize(ryml::csubstr src)
{
resize((size_t)ryml::extra::estimate_events_ints_size(src),
resize((size_t)ryml::extra::ievt::estimate_events_size(src),
src.len);
}
void resize(size_t evt_sz, size_t arn_sz)
{
events.resize(evt_sz);
events.resize(arn_sz);
arena.resize(arn_sz);
}
};
struct IntObjects
struct IntObjectsNoResize
{
IntObjects(ryml::ParserOptions opts={})
IntObjectsNoResize(ryml::ParserOptions opts={})
: handler()
, parser(&handler, opts)
, data()
{
}
IntHandler handler;
IntParser parser;
IntData data;
IntHandlerNoResize handler;
IntParserNoResize parser;
IntDataNoResize data;
bool again()
{
if(!handler.fits_buffers())
Expand All @@ -154,15 +156,15 @@ struct IntObjects
return false;
}
};
inline void parse_yaml_inplace(ryml::csubstr filename, ryml::substr src, IntParser &parser, IntData *dst)
inline void parse_yaml_ints_noresize_inplace(ryml::csubstr filename, ryml::substr src, IntParserNoResize &parser, IntDataNoResize *dst)
{
parser.m_evt_handler->reset(src,
ryml::to_substr(dst->arena),
dst->events.data(),
(int)dst->events.size());
parser.parse_in_place_ev(filename, src);
}
inline void parse_json_inplace(ryml::csubstr filename, ryml::substr src, IntParser &parser, IntData *dst)
inline void parse_json_ints_noresize_inplace(ryml::csubstr filename, ryml::substr src, IntParserNoResize &parser, IntDataNoResize *dst)
{
parser.m_evt_handler->reset(src,
ryml::to_substr(dst->arena),
Expand All @@ -171,6 +173,36 @@ inline void parse_json_inplace(ryml::csubstr filename, ryml::substr src, IntPars
parser.parse_json_in_place_ev(filename, src);
}

struct IntObjectsResize
{
IntObjectsResize(ryml::ParserOptions opts={})
: handler()
, parser(&handler, opts)
, data()
{
}
IntHandlerResize handler;
IntParserResize parser;
ryml::extra::ievt::Buffers data;
void reserve(ryml::csubstr src)
{
handler.reserve_evts(ryml::extra::ievt::estimate_events_size(src));
handler.reserve_arena(src.len);
}
};
inline void parse_yaml_ints_resize_inplace(ryml::csubstr filename, ryml::substr src, IntParserResize &parser, ryml::extra::ievt::Buffers *dst)
{
parser.m_evt_handler->reset(src);
parser.parse_in_place_ev(filename, src);
*dst = parser.m_evt_handler->get_buffers();
}
inline void parse_json_ints_resize_inplace(ryml::csubstr filename, ryml::substr src, IntParserResize &parser, ryml::extra::ievt::Buffers *dst)
{
parser.m_evt_handler->reset(src);
parser.parse_json_in_place_ev(filename, src);
*dst = parser.m_evt_handler->get_buffers();
}


//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Expand Down Expand Up @@ -200,8 +232,11 @@ struct BmCase
rapidjson::Document rapidjson_doc;
ryml::Tree libyaml_tree;

IntObjects int_obj;
IntObjects int_obj_nofilter{ryml::ParserOptions().scalar_filtering(false)};
IntObjectsNoResize int_obj_noresize;
IntObjectsNoResize int_obj_noresize_nofilter{ryml::ParserOptions().scalar_filtering(false)};

IntObjectsResize int_obj_resize;
IntObjectsResize int_obj_resize_nofilter{ryml::ParserOptions().scalar_filtering(false)};

void run(std::string name, int argc, char **argv)
{
Expand Down
3 changes: 3 additions & 0 deletions bm/bm_emit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@ void bm_yamlcpp(bm::State& st)
s_bm_case->report(st);
}


//-----------------------------------------------------------------------------

void bm_ryml_yaml_ostream(bm::State& st)
{
c4::csubstr src = c4::to_csubstr(s_bm_case->src).trimr('\0');
Expand Down
Loading
Loading