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