// Serializes to the given vector. void TessdataManager::Serialize(GenericVector<char> *data) const { ASSERT_HOST(is_loaded_); // Compute the offset_table and total size. int64_t offset_table[TESSDATA_NUM_ENTRIES]; int64_t offset = sizeof(int32_t) + sizeof(offset_table); for (int i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { if (entries_[i].empty()) { offset_table[i] = -1; } else { offset_table[i] = offset; offset += entries_[i].size(); } } data->init_to_size(offset, 0); int32_t num_entries = TESSDATA_NUM_ENTRIES; TFile fp; fp.OpenWrite(data); fp.Serialize(&num_entries); fp.Serialize(&offset_table[0], countof(offset_table)); for (int i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { if (!entries_[i].empty()) { fp.Serialize(&entries_[i][0], entries_[i].size()); } } }
// Writes all the pages to the given filename. Returns false on error. bool DocumentData::SaveDocument(const char* filename, FileWriter writer) { TFile fp; fp.OpenWrite(NULL); if (!pages_.Serialize(&fp) || !fp.CloseWrite(filename, writer)) { tprintf("Serialize failed: %s\n", filename); return false; } return true; }
bool DocumentData::SaveToBuffer(GenericVector<char>* buffer) { TFile fp; fp.OpenWrite(buffer); return pages_.Serialize(&fp); }