diff options
Diffstat (limited to 'src/binary_parse/cached_paged_byte_array.cc')
-rw-r--r-- | src/binary_parse/cached_paged_byte_array.cc | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/src/binary_parse/cached_paged_byte_array.cc b/src/binary_parse/cached_paged_byte_array.cc deleted file mode 100644 index 83b6c03..0000000 --- a/src/binary_parse/cached_paged_byte_array.cc +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// -// -// The cache layer works as follows: -// The cache is implemented as a vector (of size 'cache_size') of shared -// pointers to pages recently used. The least recently used page is stored -// at the begining of the vector, the most recent at the end. - -#include "src/binary_parse/cached_paged_byte_array.h" - -#include <cstddef> - -namespace piex { -namespace binary_parse { - -CachedPagedByteArray::CachedPagedByteArray( - const PagedByteArray* paged_byte_array, size_t cache_size) - : paged_byte_array_(paged_byte_array), cache_size_(cache_size) {} - -void CachedPagedByteArray::getPage(size_t page_index, - const unsigned char** begin, - const unsigned char** end, - PagedByteArray::PagePtr* page) const { - std::lock_guard<std::mutex> lock(mutex_); - size_t cache_index; - if (getFromCache(page_index, &cache_index)) { - // Cache hit, retrieve the page from the cache. - *begin = cached_pages_[cache_index].begin; - *end = cached_pages_[cache_index].end; - *page = cached_pages_[cache_index].page; - - // Remove the page to insert it at the end of the cache later. - cached_pages_.erase(cached_pages_.begin() + - static_cast<std::ptrdiff_t>(cache_index)); - } else { - // Cache miss, ask PagedByteArray to load the page. - paged_byte_array_->getPage(page_index, begin, end, page); - - // If the cache is full, remove the first (least recently used) page. - if (cached_pages_.size() >= cache_size_) { - cached_pages_.erase(cached_pages_.begin()); - } - } - - // Cache the most recently used page to the end of the vector. - CachedPage cache_page; - cache_page.index = page_index; - cache_page.page = *page; - cache_page.begin = *begin; - cache_page.end = *end; - cached_pages_.push_back(cache_page); -} - -bool CachedPagedByteArray::getFromCache(size_t page_index, - size_t* cache_index) const { - for (size_t i = 0; i < cached_pages_.size(); ++i) { - if (cached_pages_[i].index == page_index) { - *cache_index = i; - return true; - } - } - return false; -} - -} // namespace binary_parse -} // namespace piex |