Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

46 Zeilen
1.2KB

  1. #pragma once
  2. #ifndef NEO_CONCEPT
  3. #if defined(__GNUC__) && __GNUC__ < 9
  4. #define NEO_CONCEPT concept bool
  5. #else
  6. #define NEO_CONCEPT concept
  7. #endif
  8. #endif
  9. #include <neo/buffer_seq_iter.hpp>
  10. #include <neo/const_buffer.hpp>
  11. #include <neo/mutable_buffer.hpp>
  12. #include <iterator>
  13. namespace neo {
  14. template <typename T>
  15. NEO_CONCEPT const_buffer_sequence_iterator = requires(T iter) {
  16. typename std::iterator_traits<T>::value_type;
  17. std::is_convertible_v<typename std::iterator_traits<T>::value_type, const_buffer>;
  18. };
  19. template <typename T>
  20. NEO_CONCEPT mutable_buffer_sequence_iterator
  21. = const_buffer_sequence_iterator<T>&& requires(T iter) {
  22. std::is_convertible_v<typename std::iterator_traits<T>::value_type, mutable_buffer>;
  23. };
  24. template <typename T>
  25. NEO_CONCEPT const_buffer_sequence = requires(T seq) {
  26. { buffer_sequence_begin(seq) }
  27. ->const_buffer_sequence_iterator;
  28. buffer_sequence_end(seq);
  29. { buffer_sequence_begin(seq) != buffer_sequence_end(seq) }
  30. ->bool;
  31. };
  32. template <typename T>
  33. NEO_CONCEPT mutable_buffer_sequence = const_buffer_sequence<T>&& requires(T seq) {
  34. { buffer_sequence_begin(seq) }
  35. ->mutable_buffer_sequence_iterator;
  36. };
  37. } // namespace neo