1 /* 2 * Copyright (C) 2025 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "IdAllocator.h" 18 19 namespace aidl { 20 namespace android { 21 namespace hardware { 22 namespace radio { 23 namespace implementation { 24 get()25int32_t IdAllocator::get() { 26 const auto i = mReturnedIds.rbegin(); 27 28 if (i == mReturnedIds.rend()) { 29 return ++mIdGenerator; 30 } else { 31 const int32_t id = *i; 32 mReturnedIds.erase(std::next(i).base()); 33 return id; 34 } 35 } 36 put(const int32_t id)37void IdAllocator::put(const int32_t id) { 38 if (id == mIdGenerator) { 39 --mIdGenerator; 40 41 auto i = mReturnedIds.begin(); 42 while (i != mReturnedIds.end()) { 43 if (*i == mIdGenerator) { 44 --mIdGenerator; 45 i = mReturnedIds.erase(i); 46 } else { 47 break; 48 } 49 } 50 } else { 51 mReturnedIds.insert(id); 52 } 53 } 54 55 } // namespace implementation 56 } // namespace radio 57 } // namespace hardware 58 } // namespace android 59 } // namespace aidl 60