15eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski/*
25eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * Copyright (C) 2016 The Android Open Source Project
35eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski *
45eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
55eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * you may not use this file except in compliance with the License.
65eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * You may obtain a copy of the License at
75eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski *
85eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
95eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski *
105eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * Unless required by applicable law or agreed to in writing, software
115eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
125eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * See the License for the specific language governing permissions and
145eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski * limitations under the License.
155eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski */
165eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
175eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski#include "io/File.h"
185eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
195eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski#include <memory>
205eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
215eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinskinamespace aapt {
225eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinskinamespace io {
235eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
24ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam LesinskiIFile* IFile::CreateFileSegment(size_t offset, size_t len) {
25ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  FileSegment* file_segment = new FileSegment(this, offset, len);
26ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  segments_.push_back(std::unique_ptr<IFile>(file_segment));
27ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  return file_segment;
285eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski}
295eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
30ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskistd::unique_ptr<IData> FileSegment::OpenAsData() {
31ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::unique_ptr<IData> data = file_->OpenAsData();
32ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  if (!data) {
335eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski    return {};
34ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  }
35ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski
36ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  if (offset_ <= data->size() - len_) {
37ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski    return util::make_unique<DataSegment>(std::move(data), offset_, len_);
38ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  }
39ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  return {};
405eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski}
415eeaaddffd23d8d85aeb321e3ceea626e42cf9deAdam Lesinski
42ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski}  // namespace io
43ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski}  // namespace aapt
44