void FishStore::ParserStateApplyActions()

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);
  }
}