bucket_iterator.inl - Engine C API Reference

bucket_iterator.inl
  1. namespace stingray_plugin_foundation {
  2. // ----------------------------------------------------------------------
  3. // BucketIterator
  4. // ----------------------------------------------------------------------
  5. template <class CONTAINER, class ITEM>
  6. BucketIterator<CONTAINER, ITEM>::BucketIterator(CONTAINER &container, unsigned int i) : _container(&container), _i(i)
  7. {
  8. advance_to_valid_bucket();
  9. }
  10. template <class CONTAINER, class ITEM>
  11. BucketIterator<CONTAINER, ITEM>::BucketIterator(const iterator &other) : _container(other._container), _i(other._i)
  12. {}
  13. template <class CONTAINER, class ITEM>
  14. BucketIterator<CONTAINER, ITEM> BucketIterator<CONTAINER, ITEM>::operator++()
  15. {
  16. //XASSERT(_i < _container->num_buckets(), "iterating past end of container");
  17. XENSURE(_i < _container->num_buckets());
  18. ++_i;
  19. advance_to_valid_bucket();
  20. return *this;
  21. }
  22. template <class CONTAINER, class ITEM>
  23. BucketIterator<CONTAINER, ITEM> BucketIterator<CONTAINER, ITEM>::operator++(int)
  24. {
  25. iterator result = *this;
  26. ++(*this);
  27. return result;
  28. }
  29. template <class CONTAINER, class ITEM>
  30. void BucketIterator<CONTAINER, ITEM>::advance_to_valid_bucket()
  31. {
  32. unsigned int size = _container->num_buckets();
  33. for (; _i < size; ++_i)
  34. if (_container->bucket_valid(_i))
  35. break;
  36. }
  37. // ----------------------------------------------------------------------
  38. // ConstBucketIterator
  39. // ----------------------------------------------------------------------
  40. template <class CONTAINER, class ITEM>
  41. ConstBucketIterator<CONTAINER, ITEM>::ConstBucketIterator(const CONTAINER &container, unsigned int i) : _container(&container), _i(i)
  42. {
  43. advance_to_valid_bucket();
  44. }
  45. template <class CONTAINER, class ITEM>
  46. ConstBucketIterator<CONTAINER, ITEM>::ConstBucketIterator(const iterator &other) : _container(other._container), _i(other._i)
  47. {}
  48. template <class CONTAINER, class ITEM>
  49. ConstBucketIterator<CONTAINER, ITEM>::ConstBucketIterator(const BucketIterator<CONTAINER,ITEM> &other) : _container(other._container), _i(other._i)
  50. {}
  51. template <class CONTAINER, class ITEM>
  52. ConstBucketIterator<CONTAINER, ITEM> ConstBucketIterator<CONTAINER, ITEM>::operator++()
  53. {
  54. XASSERT(_i < _container->num_buckets(), "iterating past end of container");
  55. ++_i;
  56. advance_to_valid_bucket();
  57. return *this;
  58. }
  59. template <class CONTAINER, class ITEM>
  60. ConstBucketIterator<CONTAINER, ITEM> ConstBucketIterator<CONTAINER, ITEM>::operator++(int)
  61. {
  62. iterator result = *this;
  63. ++(*this);
  64. return result;
  65. }
  66. template <class CONTAINER, class ITEM>
  67. void ConstBucketIterator<CONTAINER, ITEM>::advance_to_valid_bucket()
  68. {
  69. unsigned int size = _container->num_buckets();
  70. for (; _i < size; ++_i)
  71. if (_container->bucket_valid(_i))
  72. break;
  73. }
  74. } // namespace stingray_plugin_foundation