pocketpy/src/iter.h
blueloveTH 176211611c up
2023-01-11 18:25:03 +08:00

59 lines
1.1 KiB
C++

#pragma once
#include "obj.h"
class RangeIterator : public BaseIterator {
private:
i64 current;
_Range r;
public:
RangeIterator(VM* vm, PyVar _ref) : BaseIterator(vm, _ref) {
this->r = UNION_GET(_Range, _ref);
this->current = r.start;
}
bool hasNext() override {
if(r.step > 0){
return current < r.stop;
}else{
return current > r.stop;
}
}
PyVar next() override;
};
class VectorIterator : public BaseIterator {
private:
size_t index = 0;
const PyVarList* vec;
public:
VectorIterator(VM* vm, PyVar _ref) : BaseIterator(vm, _ref) {
vec = &UNION_GET(PyVarList, _ref);
}
bool hasNext(){
return index < vec->size();
}
PyVar next(){
return vec->operator[](index++);
}
};
class StringIterator : public BaseIterator {
private:
int index = 0;
_Str str;
public:
StringIterator(VM* vm, PyVar _ref) : BaseIterator(vm, _ref) {
str = UNION_GET(_Str, _ref);
}
bool hasNext(){
return index < str.u8_length();
}
PyVar next();
};