IndexFileReader ---------------------------------------------------------------------------------
| 287 | |
| 288 | // IndexFileReader --------------------------------------------------------------------------------- |
| 289 | IndexFileReader::IndexFileReader(string const & name) |
| 290 | { |
| 291 | FileReader fileReader(name); |
| 292 | m_elements.clear(); |
| 293 | size_t const fileSize = base::checked_cast<size_t>(fileReader.Size()); |
| 294 | if (fileSize == 0) |
| 295 | return; |
| 296 | |
| 297 | LOG_SHORT(LINFO, ("Offsets reading is started for file", fileReader.GetName())); |
| 298 | CHECK_EQUAL(0, fileSize % sizeof(Element), ("Damaged file.")); |
| 299 | |
| 300 | try |
| 301 | { |
| 302 | m_elements.resize(fileSize / sizeof(Element)); |
| 303 | } |
| 304 | catch (std::bad_alloc const &) |
| 305 | { |
| 306 | LOG(LCRITICAL, ("Insufficient memory for required offset map")); |
| 307 | } |
| 308 | |
| 309 | fileReader.Read(0, &m_elements[0], fileSize); |
| 310 | |
| 311 | sort(m_elements.begin(), m_elements.end(), ElementComparator()); |
| 312 | |
| 313 | LOG_SHORT(LINFO, ("Offsets reading is finished")); |
| 314 | } |
| 315 | |
| 316 | bool IndexFileReader::GetValueByKey(Key key, Value & value) const |
| 317 | { |