MCPcopy Create free account
hub / github.com/comaps/comaps / Read

Method Read

libs/coding/reader_cache.hpp:52–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50 ReaderCache(uint32_t logPageSize, uint32_t logPageCount) : m_Cache(logPageCount), m_LogPageSize(logPageSize) {}
51
52 void Read(ReaderT & reader, uint64_t pos, void * p, size_t size)
53 {
54 if (size == 0)
55 return;
56 ASSERT_LESS_OR_EQUAL(pos + size, reader.Size(), (pos, size, reader.Size()));
57 m_Stats.m_ReadSize(static_cast<uint32_t>(size));
58 char * pDst = static_cast<char *>(p);
59 uint64_t pageNum = pos >> m_LogPageSize;
60 size_t const firstPageOffset = static_cast<size_t>(pos - (pageNum << m_LogPageSize));
61 size_t const firstCopySize = std::min(size, PageSize() - firstPageOffset);
62 ASSERT_GREATER(firstCopySize, 0, ());
63 memcpy(pDst, ReadPage(reader, pageNum) + firstPageOffset, firstCopySize);
64 size -= firstCopySize;
65 pos += firstCopySize;
66 pDst += firstCopySize;
67 ++pageNum;
68 while (size > 0)
69 {
70 size_t const copySize = std::min(size, PageSize());
71 memcpy(pDst, ReadPage(reader, pageNum), copySize);
72 size -= copySize;
73 pos += copySize;
74 pDst += copySize;
75 ++pageNum;
76 }
77 }
78
79 std::string GetStatsStr() const { return m_Stats.GetStatsStr(m_LogPageSize, m_Cache.GetCacheSize()); }
80

Callers 1

ReadPageMethod · 0.45

Calls 1

SizeMethod · 0.45

Tested by

no test coverage detected