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