General Purpose library for Freestanding C++ and POSIX systems
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.1 KiB

  1. #pragma once
  2. #include "gp/algorithm/tmp_manip.hpp"
  3. namespace gp{
  4. template<typename it, bool Enable = std::is_same<typename it::difference_type,std::size_t>::value>
  5. class nameless_range;
  6. template<typename it>
  7. class nameless_range<it, false>
  8. {
  9. it _begin;
  10. it _end;
  11. friend nameless_range<it, true>;
  12. public:
  13. using associated_iterator = it;
  14. nameless_range() = delete;
  15. template<typename othT>
  16. nameless_range(const nameless_range<othT>& oth)
  17. : _begin(oth._begin)
  18. , _end(oth._end)
  19. {}
  20. nameless_range(it sbegin, it send)
  21. : _begin(sbegin)
  22. , _end(send)
  23. {}
  24. it begin() const
  25. {
  26. return _begin;
  27. }
  28. it end() const
  29. {
  30. return _end;
  31. }
  32. };
  33. template<typename it>
  34. class nameless_range<it, true> : public nameless_range<it, false>
  35. {
  36. public:
  37. nameless_range() = delete;
  38. template<typename othT>
  39. nameless_range(const nameless_range<othT>& oth)
  40. : nameless_range<it,false>(oth._begin,oth._end)
  41. {}
  42. nameless_range(it sbegin, it send)
  43. : nameless_range<it,false>(sbegin, send)
  44. {}
  45. std::size_t size() const
  46. {
  47. return this->_end-this->_begin;
  48. }
  49. };
  50. }