198aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski/* 298aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * Copyright (C) 2015 The Android Open Source Project 398aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * 498aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 598aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * you may not use this file except in compliance with the License. 698aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * You may obtain a copy of the License at 798aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * 898aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 998aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * 1098aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1198aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1298aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * See the License for the specific language governing permissions and 1498aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski * limitations under the License. 1598aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski */ 1698aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 171ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#ifndef AAPT_COMPILE_IDASSIGNER_H 181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#define AAPT_COMPILE_IDASSIGNER_H 1998aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 20ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include <unordered_map> 21ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 22d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski#include "android-base/macros.h" 23d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski 24bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52Adam Lesinski#include "Resource.h" 251ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "process/IResourceTableConsumer.h" 2698aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 2798aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinskinamespace aapt { 2898aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 29ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski// Assigns IDs to each resource in the table, respecting existing IDs and 30ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski// filling in gaps in between fixed ID assignments. 31bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52Adam Lesinskiclass IdAssigner : public IResourceTableConsumer { 32cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski public: 33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski IdAssigner() = default; 34cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski explicit IdAssigner(const std::unordered_map<ResourceName, ResourceId>* map) 35ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski : assigned_id_map_(map) {} 36bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52Adam Lesinski 37ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski bool Consume(IAaptContext* context, ResourceTable* table) override; 38bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52Adam Lesinski 39cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski private: 40d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski const std::unordered_map<ResourceName, ResourceId>* assigned_id_map_ = nullptr; 4198aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski}; 4298aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 43cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace aapt 4498aa3ad6e46e3b0270785c8b3f9798e37e8af140Adam Lesinski 451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#endif /* AAPT_COMPILE_IDASSIGNER_H */ 46