TypeWrappers.h revision ce5e56e243d262a9b65459c3bd0bb9eaadd40628
1e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis/* 2e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Copyright (C) 2014 The Android Open Source Project 3e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 4e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Licensed under the Apache License, Version 2.0 (the "License"); 5e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * you may not use this file except in compliance with the License. 6e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * You may obtain a copy of the License at 7e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 8e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * http://www.apache.org/licenses/LICENSE-2.0 9e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 10e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Unless required by applicable law or agreed to in writing, software 11e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * distributed under the License is distributed on an "AS IS" BASIS, 12e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * See the License for the specific language governing permissions and 14e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * limitations under the License. 15e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis */ 16e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 17e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis#ifndef __TYPE_WRAPPERS_H 18e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis#define __TYPE_WRAPPERS_H 19e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 20e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis#include <androidfw/ResourceTypes.h> 21e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis#include <utils/ByteOrder.h> 22e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 23e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisnamespace android { 24e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 25e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisstruct TypeVariant { 26e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis TypeVariant(const ResTable_type* data) 27e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis : data(data) {} 28e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 29e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis class iterator { 30e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis public: 31e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator& operator=(const iterator& rhs) { 32e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis mTypeVariant = rhs.mTypeVariant; 33e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis mIndex = rhs.mIndex; 34e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 35e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 36e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis bool operator==(const iterator& rhs) const { 37e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return mTypeVariant == rhs.mTypeVariant && mIndex == rhs.mIndex; 38e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 39e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 40e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis bool operator!=(const iterator& rhs) const { 41e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return mTypeVariant != rhs.mTypeVariant || mIndex != rhs.mIndex; 42e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 43e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 44e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator operator++(int) { 45e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis uint32_t prevIndex = mIndex; 46e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis operator++(); 47e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return iterator(mTypeVariant, prevIndex); 48e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 49e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 50e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis const ResTable_entry* operator->() const { 51e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return operator*(); 52e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 53e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 54e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis uint32_t index() const { 55e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return mIndex; 56e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 57e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 58e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator& operator++(); 59e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis const ResTable_entry* operator*() const; 60e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 61e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis private: 62e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis friend struct TypeVariant; 63e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator(const TypeVariant* tv, uint32_t index) 64e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis : mTypeVariant(tv), mIndex(index) {} 65e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis const TypeVariant* mTypeVariant; 66e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis uint32_t mIndex; 67e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis }; 68e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 69e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator beginEntries() const { 70e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return iterator(this, 0); 71e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 72e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 73e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis iterator endEntries() const { 74e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis return iterator(this, dtohl(data->entryCount)); 75e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 76e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 77e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis const ResTable_type* data; 78e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis}; 79e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 80e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis} // namespace android 81e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 82e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis#endif // __TYPE_WRAPPERS_H 83e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis