adaptor.h 624 B

123456789101112131415161718192021222324252627282930
  1. //
  2. // adaptor.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 4/6/23.
  6. //
  7. #pragma once
  8. #include <stream/forward.h>
  9. namespace stream::detail {
  10. template <typename T, typename It = void> struct adaptor {
  11. using dereference_t = T (*)(void *);
  12. using equal_to_t = bool (*)(void *, void *);
  13. using increment_t = void (*)(void *);
  14. static dereference_t dereference() {
  15. return [](void * p) -> T { return **((It *)p); };
  16. }
  17. static equal_to_t equal_to() {
  18. return [](void * l, void * r) { return *((It *)l) == *((It *)r); };
  19. }
  20. static increment_t increment() {
  21. return [](void * p) { ++(*(It *)(p)); };
  22. }
  23. };
  24. }