@@ -28,16 +28,16 @@ class prng;
2828// memory segments
2929// @param bits size in bits
3030// @param size segment size in bytes
31- constexpr int segmentsFromBits (int bits, int size)
31+ constexpr size_t segmentsFromBits (size_t bits, size_t size)
3232{
33- size *= 8 ;
34- return bits / size + (bits % size ? 1 : 0 );
33+ size *= 8U ;
34+ return bits / size + (bits % size ? 1U : 0 );
3535}
3636
3737// / managed all list entries and list metadata
3838class list_table : public snapshot_interface
3939{
40- using data_t = int ;
40+ using data_t = unsigned ;
4141 enum class state : char {
4242 unused,
4343 used,
@@ -77,9 +77,9 @@ class list_table : public snapshot_interface
7777 flag.flag = -1 ;
7878 return flag;
7979 }
80- for (int i = listBegin (flag.list_id ); i < _list_end[flag.list_id ]; ++i) {
81- if (_flag_values[i ] == flag.flag ) {
82- flag.flag = i - listBegin (flag.list_id );
80+ for (int i = listBegin (flag.list_id ); i < _list_end[static_cast < size_t >( flag.list_id ) ]; ++i) {
81+ if (_flag_values[static_cast < size_t >(i) ] == flag.flag ) {
82+ flag.flag = static_cast < int16_t >( i - listBegin (flag.list_id ) );
8383 return flag;
8484 }
8585 }
@@ -89,7 +89,7 @@ class list_table : public snapshot_interface
8989
9090 int get_flag_value (list_flag flag) const
9191 {
92- return _flag_values[listBegin (flag.list_id ) + flag.flag ];
92+ return _flag_values[static_cast < size_t >( listBegin (flag.list_id ) + flag.flag ) ];
9393 }
9494
9595 // / zeros all usage values
@@ -257,9 +257,9 @@ class list_table : public snapshot_interface
257257
258258private:
259259 void copy_lists (const data_t * src, data_t * dst);
260- static constexpr int bits_per_data = sizeof (data_t ) * 8 ;
260+ static constexpr size_t bits_per_data = sizeof (data_t ) * 8U ;
261261
262- int listBegin (int lid) const { return lid == 0 ? 0 : _list_end[lid - 1 ]; }
262+ size_t listBegin (int lid) const { return lid == 0 ? 0 : _list_end[static_cast < size_t >( lid - 1 ) ]; }
263263
264264 const data_t * getPtr (int eid) const
265265 {
@@ -273,13 +273,13 @@ class list_table : public snapshot_interface
273273 + static_cast <std::ptrdiff_t >(_entrySize) * static_cast <std::ptrdiff_t >(eid);
274274 }
275275
276- int numFlags () const
276+ size_t numFlags () const
277277 {
278278 return _flag_names.size ();
279279 // return _list_end.end()[-1]; TODO:
280280 }
281281
282- int numLists () const { return _list_end.size (); }
282+ size_t numLists () const { return _list_end.size (); }
283283
284284 bool getBit (const data_t * data, int id) const
285285 {
@@ -314,12 +314,12 @@ class list_table : public snapshot_interface
314314 }
315315 }
316316
317- int toFid (list_flag e) const ;
317+ size_t toFid (list_flag e) const ;
318318
319319 auto flagStartMask () const
320320 {
321321 struct {
322- int segment;
322+ size_t segment;
323323 data_t mask;
324324 } res{numLists () / bits_per_data, ~static_cast <data_t >(0 ) >> (numLists () % bits_per_data)};
325325
@@ -330,18 +330,18 @@ class list_table : public snapshot_interface
330330 using managed_array = managed_array < T,
331331 config<0 , abs(config)>;
332332
333- static constexpr int maxMemorySize
333+ static constexpr long maxMemorySize
334334 = (config::maxListTypes < 0 || config::maxFlags < 0 || config::maxLists < 0 ? -1 : 1 )
335- * segmentsFromBits (abs(config::maxListTypes) + abs(config::maxFlags), sizeof(data_t ))
336- * static_cast<int>(abs(config::maxLists));
335+ * static_cast < long >( segmentsFromBits(abs(config::maxListTypes) + abs(config::maxFlags), sizeof (data_t ))
336+ * static_cast <int >(abs(config::maxLists))) ;
337337
338338 int _entrySize; // /< entry size in data_t
339339 // entries (created lists)
340340 managed_array<data_t , maxMemorySize> _data;
341341 managed_array<state, config::maxLists> _entry_state;
342342
343343 // defined list (meta data)
344- managed_array<int , config::maxListTypes> _list_end;
344+ managed_array<size_t , config::maxListTypes> _list_end;
345345 managed_array<const char *, config::maxFlags> _flag_names;
346346 managed_array<int , config::maxFlags> _flag_values;
347347 managed_array<const char *, config::maxListTypes> _list_names;
@@ -351,7 +351,7 @@ class list_table : public snapshot_interface
351351 bool _valid;
352352
353353public:
354- friend class name_flag_itr ;
354+ friend class named_flag_itr ;
355355 friend class list_impl ;
356356
357357 class named_flag_itr
@@ -364,10 +364,14 @@ class list_table : public snapshot_interface
364364 const char * name;
365365 } _pos;
366366
367+ /* * carry list change.
368+ * if the iterator incremented to the next flag, also increment the list if necessary
369+ * @pre _pos.flag.list_id >= 0
370+ */
367371 void carry ()
368372 {
369373 if (_pos.flag .flag
370- == _list._list_end [_pos.flag .list_id ] - _list.listBegin (_pos.flag .list_id )) {
374+ == _list._list_end [static_cast < size_t >( _pos.flag .list_id ) ] - _list.listBegin (static_cast < size_t >( _pos.flag .list_id ) )) {
371375 _pos.flag .flag = 0 ;
372376 ++_pos.flag .list_id ;
373377 }
@@ -401,6 +405,12 @@ class list_table : public snapshot_interface
401405 }
402406
403407 public:
408+ named_flag_itr (const named_flag_itr& o)
409+ : _list{o._list }
410+ , _data{o._data }
411+ , _pos{o._pos }
412+ {}
413+ named_flag_itr& operator =(const named_flag_itr&) = delete ;
404414 bool operator !=(const named_flag_itr& o) const { return _pos.flag != o._pos .flag ; }
405415
406416 named_flag_itr (const list_table& list, const data_t * filter)
0 commit comments