1 /* 2 * Copyright (c) Meta Platforms, Inc. and affiliates. 3 * 4 * This source code is licensed under the MIT license found in the 5 * LICENSE file in the root directory of this source tree. 6 */ 7 8 #pragma once 9 10 #include <bitset> 11 12 namespace ABI49_0_0facebook { 13 namespace ABI49_0_0React { 14 15 template <size_t size> 16 class ABI49_0_0RCTIdentifierPool { 17 public: enqueue(int index)18 void enqueue(int index) { 19 usage[index] = false; 20 } 21 dequeue()22 int dequeue() { 23 while (true) { 24 if (!usage[lastIndex]) { 25 usage[lastIndex] = true; 26 return lastIndex; 27 } 28 lastIndex = (lastIndex + 1) % size; 29 } 30 } 31 reset()32 void reset() { 33 for (int i = 0; i < size; i++) { 34 usage[i] = false; 35 } 36 } 37 38 private: 39 std::bitset<size> usage; 40 int lastIndex; 41 }; 42 43 } // namespace ABI49_0_0React 44 } // namespace ABI49_0_0facebook 45