| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * 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. |
| */ |
| |
| #include "Source.h" |
| #include "io/FileSystem.h" |
| #include "util/Files.h" |
| #include "util/Maybe.h" |
| #include "util/StringPiece.h" |
| #include "util/Util.h" |
| |
| #include <utils/FileMap.h> |
| |
| namespace aapt { |
| namespace io { |
| |
| RegularFile::RegularFile(const Source& source) : mSource(source) { |
| } |
| |
| std::unique_ptr<IData> RegularFile::openAsData() { |
| android::FileMap map; |
| if (Maybe<android::FileMap> map = file::mmapPath(mSource.path, nullptr)) { |
| return util::make_unique<MmappedData>(std::move(map.value())); |
| } |
| return {}; |
| } |
| |
| const Source& RegularFile::getSource() const { |
| return mSource; |
| } |
| |
| FileCollectionIterator::FileCollectionIterator(FileCollection* collection) : |
| mCurrent(collection->mFiles.begin()), mEnd(collection->mFiles.end()) { |
| } |
| |
| bool FileCollectionIterator::hasNext() { |
| return mCurrent != mEnd; |
| } |
| |
| IFile* FileCollectionIterator::next() { |
| IFile* result = mCurrent->second.get(); |
| ++mCurrent; |
| return result; |
| } |
| |
| IFile* FileCollection::insertFile(const StringPiece& path) { |
| return (mFiles[path.toString()] = util::make_unique<RegularFile>(Source(path))).get(); |
| } |
| |
| IFile* FileCollection::findFile(const StringPiece& path) { |
| auto iter = mFiles.find(path.toString()); |
| if (iter != mFiles.end()) { |
| return iter->second.get(); |
| } |
| return nullptr; |
| } |
| |
| std::unique_ptr<IFileCollectionIterator> FileCollection::iterator() { |
| return util::make_unique<FileCollectionIterator>(this); |
| } |
| |
| } // namespace io |
| } // namespace aapt |