in src/core/fishstore.h [3905:3947]
void FishStore<D, A>::ParserStateApplyActions(
ParserState& state, const std::vector<ParserAction>& actions) {
// Apply a list of parser actions to a global parser state. (the new one or
// the backup) First apply changes to ptr sets.
for(auto& action : actions) {
switch(action.type) {
case ParserActionType::REGISTER_INLINE_PSF:
state.ptr_inline_psf.insert(action.id);
break;
case ParserActionType::REGISTER_GENERAL_PSF:
assert(action.id <= UINT16_MAX);
state.ptr_general_psf.insert(static_cast<uint16_t>(action.id));
break;
case ParserActionType::DEREGISTER_INLINE_PSF:
state.ptr_inline_psf.erase(action.id);
break;
case ParserActionType::DEREGISTER_GENERAL_PSF:
assert(action.id <= UINT16_MAX);
state.ptr_general_psf.erase(static_cast<uint16_t>(action.id));
break;
}
}
// Construct parser essentials
std::unordered_set<uint16_t> field_ids;
for(auto psf_id : state.ptr_inline_psf) {
for(auto field_id : inline_psf_map[psf_id].fields) {
field_ids.insert(field_id);
}
}
for(auto psf_id : state.ptr_general_psf) {
for(auto field_id : general_psf_map[psf_id].fields) {
field_ids.insert(field_id);
}
}
state.main_parser_fields.clear();
state.main_parser_field_ids.clear();
for(auto field_id : field_ids) {
state.main_parser_fields.push_back(field_names[field_id]);
state.main_parser_field_ids.push_back(field_id);
}
}