void Decoder::decodeTags(ByteStream& strm, TagSet& tags) { //M_ASSERT(strm.remaining()); mstl::string name; mstl::string value; for (tag::ID id = tag::ID(strm.get()); id; id = tag::ID(strm.get())) { if (id == tag::ExtraTag) { name.clear(); value.clear(); strm.get(name); strm.get(value); tags.setExtra(name, value); } else { value.clear(); strm.get(value); tags.set(id, value); if (tag::isRatingTag(id)) tags.setSignificance(id, 0); } #define SCI_TAGS_FIX #ifdef SCI_TAGS_FIX if (strm.remaining() == 0) return; #endif } }
void MoveInfoTable::decode(ByteStream& strm) { MoveInfo m; unsigned index = 0; m_table.clear(); while (strm.remaining()) { unsigned skip = m.decode(strm); m_table.resize((index += skip) + 1); m_table[index].add(m); } }