rows.hpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // Copyright (c) 2019-2023 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. #ifndef BOOST_MYSQL_IMPL_ROWS_HPP
  8. #define BOOST_MYSQL_IMPL_ROWS_HPP
  9. #pragma once
  10. #include <boost/mysql/rows.hpp>
  11. #include <boost/mysql/rows_view.hpp>
  12. #include <boost/mysql/detail/auxiliar/access_fwd.hpp>
  13. #include <boost/mysql/detail/auxiliar/rows_iterator.hpp>
  14. #include <cassert>
  15. #include <cstddef>
  16. #include <stdexcept>
  17. boost::mysql::rows& boost::mysql::rows::operator=(const rows_view& rhs)
  18. {
  19. // Protect against self-assignment
  20. if (rhs.fields_ == fields_.data())
  21. {
  22. assert(rhs.num_fields_ == fields_.size());
  23. }
  24. else
  25. {
  26. assign(rhs.fields_, rhs.num_fields_);
  27. }
  28. num_columns_ = rhs.num_columns_;
  29. return *this;
  30. }
  31. boost::mysql::row_view boost::mysql::rows::at(std::size_t i) const
  32. {
  33. if (i >= size())
  34. {
  35. throw std::out_of_range("rows::at");
  36. }
  37. return detail::row_slice(fields_.data(), num_columns_, i);
  38. }
  39. boost::mysql::row_view boost::mysql::rows::operator[](std::size_t i) const noexcept
  40. {
  41. assert(i < size());
  42. return detail::row_slice(fields_.data(), num_columns_, i);
  43. }
  44. struct boost::mysql::detail::rows_access
  45. {
  46. static void clear(rows& r) noexcept { r.clear(); }
  47. };
  48. #endif