Lua: Fix type confusion between signed and unsigned
[lsnes.git] / include / library / integer-pool.hpp
blob45a2b8cf4a381bdfa620e40d20efb24857d4b07b
1 #ifndef _library__integer_pool__hpp__included__
2 #define _library__integer_pool__hpp__included__
4 #include <cstdint>
5 #include <vector>
7 class integer_pool
9 public:
10 /**
11 * Create a new pool
13 integer_pool() throw();
14 /**
15 * Destroy a pool.
17 ~integer_pool() throw();
18 /**
19 * Draw a number from the pool.
21 * Returns: The number drawn.
22 * Throws std::bad_alloc: Not enough memory.
24 uint64_t operator()() throw(std::bad_alloc);
25 /**
26 * Return a number into the pool.
28 * Parameter num: The number to return.
30 void operator()(uint64_t num) throw();
31 /**
32 * Temporarily hold an integer.
34 class holder
36 public:
37 /**
38 * Allocate an integer.
40 holder(integer_pool& _pool)
41 : pool(_pool)
43 i = pool();
44 own = true;
46 /**
47 * Release an integer.
49 ~holder()
51 if(own) pool(i);
53 /**
54 * Grab the integer without transferring ownership.
56 * Returns: The integer.
58 uint64_t operator()()
60 return i;
62 /**
63 * Transfer the ownership.
65 * Returns: The integer.
67 uint64_t commit()
69 own = false;
70 return i;
72 private:
73 holder(const holder&);
74 holder& operator=(const holder&);
75 integer_pool& pool;
76 bool own;
77 uint64_t i;
79 private:
80 std::vector<uint8_t> _bits;
81 uint8_t _bits2;
82 uint8_t* bits;
83 bool invalid;
86 #endif