sam_header parse_sam_header(const std::string &header_text) { sam_header header; std::stringstream headers_stream(header_text); std::string header_tag; for (std::string header_string; std::getline(headers_stream, header_string); ) { std::stringstream header_stream(header_string); header_stream >> header_tag; header_tag = header_tag.substr(1); std::map<std::string, std::string> field_map; for (std::string field; std::getline(header_stream, field, '\t');) { std::stringstream field_stream(field); for (std::string field_text; std::getline(field_stream, field_text, '\t');) { std::vector<std::string> splitfield = split(field_text, ":"); field_map[splitfield[0]] = splitfield[1]; } } header[header_tag].push_back(field_map); } return header; }
RecorderTransportHeader read_recorder_transport_header(Transport& trans) { char data[13]; InStream headers_stream(data); trans.recv_boom(make_array_view(data)); return { RecorderFile::PacketType(headers_stream.in_uint8()), std::chrono::milliseconds(headers_stream.in_uint64_le()), headers_stream.in_uint32_le() }; }