iter.h 959 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include "obj.h"
  3. typedef std::function<PyVar (int)> _PyIntFn;
  4. class RangeIterator : public _Iterator {
  5. private:
  6. int current;
  7. _Range r;
  8. _PyIntFn fn;
  9. public:
  10. RangeIterator(PyVar _ref, _PyIntFn fn) : _Iterator(_ref), fn(fn) {
  11. this->r = std::get<_Range>(_ref->_native);
  12. this->current = r.start;
  13. }
  14. PyVar next() override {
  15. PyVar val = fn(current);
  16. current += r.step;
  17. return val;
  18. }
  19. bool hasNext() override {
  20. if(r.step > 0){
  21. return current < r.stop;
  22. }else{
  23. return current > r.stop;
  24. }
  25. }
  26. };
  27. class VectorIterator : public _Iterator {
  28. private:
  29. int index = 0;
  30. const PyVarList* vec;
  31. public:
  32. VectorIterator(PyVar _ref) : _Iterator(_ref) {
  33. vec = &std::get<PyVarList>(_ref->_native);
  34. }
  35. bool hasNext(){
  36. return index < vec->size();
  37. }
  38. PyVar next(){
  39. return vec->at(index++);
  40. }
  41. };