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