segments_base.ipp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
  3. // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
  4. //
  5. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  6. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. //
  8. // Official repository: https://github.com/boostorg/url
  9. //
  10. #ifndef BOOST_URL_IMPL_SEGMENTS_BASE_IPP
  11. #define BOOST_URL_IMPL_SEGMENTS_BASE_IPP
  12. #include <boost/url/segments_base.hpp>
  13. #include <ostream>
  14. namespace boost {
  15. namespace urls {
  16. auto
  17. segments_base::
  18. iterator::
  19. operator*() const ->
  20. reference
  21. {
  22. encoding_opts opt;
  23. opt.space_as_plus = false;
  24. return it_.dereference().decode(opt);
  25. }
  26. segments_base::
  27. iterator::
  28. iterator(
  29. detail::path_ref const& ref) noexcept
  30. : it_(ref)
  31. {
  32. }
  33. segments_base::
  34. iterator::
  35. iterator(
  36. detail::path_ref const& ref,
  37. int) noexcept
  38. : it_(ref, 0)
  39. {
  40. }
  41. //------------------------------------------------
  42. //
  43. // segments_base
  44. //
  45. //------------------------------------------------
  46. segments_base::
  47. segments_base(
  48. detail::path_ref const& ref) noexcept
  49. : ref_(ref)
  50. {
  51. }
  52. pct_string_view
  53. segments_base::
  54. buffer() const noexcept
  55. {
  56. return ref_.buffer();
  57. }
  58. bool
  59. segments_base::
  60. is_absolute() const noexcept
  61. {
  62. return ref_.buffer().starts_with('/');
  63. }
  64. bool
  65. segments_base::
  66. empty() const noexcept
  67. {
  68. return ref_.nseg() == 0;
  69. }
  70. std::size_t
  71. segments_base::
  72. size() const noexcept
  73. {
  74. return ref_.nseg();
  75. }
  76. auto
  77. segments_base::
  78. begin() const noexcept ->
  79. iterator
  80. {
  81. return iterator(ref_);
  82. }
  83. auto
  84. segments_base::
  85. end() const noexcept ->
  86. iterator
  87. {
  88. return iterator(ref_, 0);
  89. }
  90. //------------------------------------------------
  91. std::ostream&
  92. operator<<(
  93. std::ostream& os,
  94. segments_base const& ps)
  95. {
  96. os << ps.buffer();
  97. return os;
  98. }
  99. } // urls
  100. } // boost
  101. #endif