MCPcopy Create free account
hub / github.com/creatale/node-dv / ReCachePages

Method ReCachePages

deps/tesseract/ccstruct/imagedata.cpp:505–549  ·  view source on GitHub ↗

Locks the pages_mutex_ and Loads as many pages can fit in max_memory_ starting at index pages_offset_.

Source from the content-addressed store, hash-verified

503// Locks the pages_mutex_ and Loads as many pages can fit in max_memory_
504// starting at index pages_offset_.
505bool DocumentData::ReCachePages() {
506 SVAutoLock lock(&pages_mutex_);
507 // Read the file.
508 set_total_pages(0);
509 set_memory_used(0);
510 int loaded_pages = 0;
511 pages_.truncate(0);
512 TFile fp;
513 if (!fp.Open(document_name_, reader_) ||
514 !PointerVector<ImageData>::DeSerializeSize(false, &fp, &loaded_pages) ||
515 loaded_pages <= 0) {
516 tprintf("Deserialize header failed: %s\n", document_name_.string());
517 return false;
518 }
519 pages_offset_ %= loaded_pages;
520 // Skip pages before the first one we want, and load the rest until max
521 // memory and skip the rest after that.
522 int page;
523 for (page = 0; page < loaded_pages; ++page) {
524 if (page < pages_offset_ ||
525 (max_memory_ > 0 && memory_used() > max_memory_)) {
526 if (!PointerVector<ImageData>::DeSerializeSkip(false, &fp)) break;
527 } else {
528 if (!pages_.DeSerializeElement(false, &fp)) break;
529 ImageData* image_data = pages_.back();
530 if (image_data->imagefilename().length() == 0) {
531 image_data->set_imagefilename(document_name_);
532 image_data->set_page_number(page);
533 }
534 image_data->set_language(lang_);
535 set_memory_used(memory_used() + image_data->MemoryUsed());
536 }
537 }
538 if (page < loaded_pages) {
539 tprintf("Deserialize failed: %s read %d/%d pages\n",
540 document_name_.string(), page, loaded_pages);
541 pages_.truncate(0);
542 } else {
543 tprintf("Loaded %d/%d pages (%d-%d) of document %s\n", pages_.size(),
544 loaded_pages, pages_offset_, pages_offset_ + pages_.size(),
545 document_name_.string());
546 }
547 set_total_pages(loaded_pages);
548 return !pages_.empty();
549}
550
551// A collection of DocumentData that knows roughly how much memory it is using.
552DocumentCache::DocumentCache(inT64 max_memory)

Callers 1

ReCachePagesFuncFunction · 0.80

Calls 11

DeSerializeElementMethod · 0.80
set_imagefilenameMethod · 0.80
set_page_numberMethod · 0.80
set_languageMethod · 0.80
MemoryUsedMethod · 0.80
truncateMethod · 0.45
OpenMethod · 0.45
stringMethod · 0.45
lengthMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected