summaryrefslogtreecommitdiff
path: root/xfa_test/pdf/chunk_stream.cc
diff options
context:
space:
mode:
Diffstat (limited to 'xfa_test/pdf/chunk_stream.cc')
-rw-r--r--xfa_test/pdf/chunk_stream.cc172
1 files changed, 0 insertions, 172 deletions
diff --git a/xfa_test/pdf/chunk_stream.cc b/xfa_test/pdf/chunk_stream.cc
deleted file mode 100644
index 7ac8f974a5..0000000000
--- a/xfa_test/pdf/chunk_stream.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "pdf/chunk_stream.h"
-
-#define __STDC_LIMIT_MACROS
-#ifdef _WIN32
-#include <limits.h>
-#else
-#include <stdint.h>
-#endif
-
-#include <algorithm>
-
-#include "base/basictypes.h"
-
-namespace chrome_pdf {
-
-ChunkStream::ChunkStream() {
-}
-
-ChunkStream::~ChunkStream() {
-}
-
-void ChunkStream::Clear() {
- chunks_.clear();
- data_.clear();
-}
-
-void ChunkStream::Preallocate(size_t stream_size) {
- data_.reserve(stream_size);
-}
-
-size_t ChunkStream::GetSize() {
- return data_.size();
-}
-
-bool ChunkStream::WriteData(size_t offset, void* buffer, size_t size) {
- if (SIZE_MAX - size < offset)
- return false;
-
- if (data_.size() < offset + size)
- data_.resize(offset + size);
-
- memcpy(&data_[offset], buffer, size);
-
- if (chunks_.empty()) {
- chunks_[offset] = size;
- return true;
- }
-
- std::map<size_t, size_t>::iterator start = chunks_.upper_bound(offset);
- if (start != chunks_.begin())
- --start; // start now points to the key equal or lower than offset.
- if (start->first + start->second < offset)
- ++start; // start element is entirely before current chunk, skip it.
-
- std::map<size_t, size_t>::iterator end = chunks_.upper_bound(offset + size);
- if (start == end) { // No chunks to merge.
- chunks_[offset] = size;
- return true;
- }
-
- --end;
-
- size_t new_offset = std::min<size_t>(start->first, offset);
- size_t new_size =
- std::max<size_t>(end->first + end->second, offset + size) - new_offset;
-
- chunks_.erase(start, ++end);
-
- chunks_[new_offset] = new_size;
-
- return true;
-}
-
-bool ChunkStream::ReadData(size_t offset, size_t size, void* buffer) const {
- if (!IsRangeAvailable(offset, size))
- return false;
-
- memcpy(buffer, &data_[offset], size);
- return true;
-}
-
-bool ChunkStream::GetMissedRanges(
- size_t offset, size_t size,
- std::vector<std::pair<size_t, size_t> >* ranges) const {
- if (IsRangeAvailable(offset, size))
- return false;
-
- ranges->clear();
- if (chunks_.empty()) {
- ranges->push_back(std::pair<size_t, size_t>(offset, size));
- return true;
- }
-
- std::map<size_t, size_t>::const_iterator start = chunks_.upper_bound(offset);
- if (start != chunks_.begin())
- --start; // start now points to the key equal or lower than offset.
- if (start->first + start->second < offset)
- ++start; // start element is entirely before current chunk, skip it.
-
- std::map<size_t, size_t>::const_iterator end =
- chunks_.upper_bound(offset + size);
- if (start == end) { // No data in the current range available.
- ranges->push_back(std::pair<size_t, size_t>(offset, size));
- return true;
- }
-
- size_t cur_offset = offset;
- std::map<size_t, size_t>::const_iterator it;
- for (it = start; it != end; ++it) {
- if (cur_offset < it->first) {
- size_t new_size = it->first - cur_offset;
- ranges->push_back(std::pair<size_t, size_t>(cur_offset, new_size));
- cur_offset = it->first + it->second;
- } else if (cur_offset < it->first + it->second) {
- cur_offset = it->first + it->second;
- }
- }
-
- // Add last chunk.
- if (cur_offset < offset + size)
- ranges->push_back(std::pair<size_t, size_t>(cur_offset,
- offset + size - cur_offset));
-
- return true;
-}
-
-bool ChunkStream::IsRangeAvailable(size_t offset, size_t size) const {
- if (chunks_.empty())
- return false;
-
- if (SIZE_MAX - size < offset)
- return false;
-
- std::map<size_t, size_t>::const_iterator it = chunks_.upper_bound(offset);
- if (it == chunks_.begin())
- return false; // No chunks includes offset byte.
-
- --it; // Now it starts equal or before offset.
- return (it->first + it->second) >= (offset + size);
-}
-
-size_t ChunkStream::GetFirstMissingByte() const {
- if (chunks_.empty())
- return 0;
- std::map<size_t, size_t>::const_iterator begin = chunks_.begin();
- return begin->first > 0 ? 0 : begin->second;
-}
-
-size_t ChunkStream::GetLastByteBefore(size_t offset) const {
- if (chunks_.empty())
- return 0;
- std::map<size_t, size_t>::const_iterator it = chunks_.upper_bound(offset);
- if (it == chunks_.begin())
- return 0;
- --it;
- return it->first + it->second;
-}
-
-size_t ChunkStream::GetFirstByteAfter(size_t offset) const {
- if (chunks_.empty())
- return 0;
- std::map<size_t, size_t>::const_iterator it = chunks_.upper_bound(offset);
- if (it == chunks_.end())
- return data_.size();
- return it->first;
-}
-
-} // namespace chrome_pdf