mirror of
https://github.com/janet-lang/janet
synced 2024-11-25 09:47:17 +00:00
Allow calling next on abstracts.
This will allow the creation of infinte streams, low cost generators, etc.
This commit is contained in:
parent
51678c1aba
commit
f4077b678a
@ -91,7 +91,8 @@ static const JanetAbstractType it_s64_type = {
|
|||||||
int64_unmarshal,
|
int64_unmarshal,
|
||||||
it_s64_tostring,
|
it_s64_tostring,
|
||||||
janet_int64_compare,
|
janet_int64_compare,
|
||||||
janet_int64_hash
|
janet_int64_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const JanetAbstractType it_u64_type = {
|
static const JanetAbstractType it_u64_type = {
|
||||||
@ -104,7 +105,8 @@ static const JanetAbstractType it_u64_type = {
|
|||||||
int64_unmarshal,
|
int64_unmarshal,
|
||||||
it_u64_tostring,
|
it_u64_tostring,
|
||||||
janet_uint64_compare,
|
janet_uint64_compare,
|
||||||
janet_int64_hash
|
janet_int64_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
int64_t janet_unwrap_s64(Janet x) {
|
int64_t janet_unwrap_s64(Janet x) {
|
||||||
|
@ -52,6 +52,7 @@ JanetAbstractType cfun_io_filetype = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -62,7 +62,8 @@ static JanetAbstractType JanetRNG_type = {
|
|||||||
janet_rng_unmarshal,
|
janet_rng_unmarshal,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL,
|
||||||
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
JanetRNG *janet_default_rng(void) {
|
JanetRNG *janet_default_rng(void) {
|
||||||
|
@ -743,6 +743,7 @@ static JanetAbstractType janet_parse_parsertype = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1214,6 +1214,7 @@ static const JanetAbstractType peg_type = {
|
|||||||
peg_unmarshal,
|
peg_unmarshal,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -402,6 +402,7 @@ static JanetAbstractType Thread_AT = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,6 +121,7 @@ static const JanetAbstractType ta_buffer_type = {
|
|||||||
ta_buffer_unmarshal,
|
ta_buffer_unmarshal,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -287,6 +288,7 @@ static const JanetAbstractType ta_view_type = {
|
|||||||
ta_view_unmarshal,
|
ta_view_unmarshal,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -427,6 +427,7 @@ static const JanetAbstractType type_wrap = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -87,6 +87,12 @@ Janet janet_next(Janet ds, Janet key) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case JANET_ABSTRACT: {
|
||||||
|
JanetAbstract abst = janet_unwrap_abstract(ds);
|
||||||
|
const JanetAbstractType *at = janet_abstract_type(abst);
|
||||||
|
if (NULL == at->next) break;
|
||||||
|
return at->next(abst, key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return janet_wrap_nil();
|
return janet_wrap_nil();
|
||||||
}
|
}
|
||||||
|
@ -907,6 +907,7 @@ struct JanetAbstractType {
|
|||||||
void (*tostring)(void *p, JanetBuffer *buffer);
|
void (*tostring)(void *p, JanetBuffer *buffer);
|
||||||
int (*compare)(void *lhs, void *rhs);
|
int (*compare)(void *lhs, void *rhs);
|
||||||
int32_t (*hash)(void *p, size_t len);
|
int32_t (*hash)(void *p, size_t len);
|
||||||
|
Janet(*next)(void *p, Janet key);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct JanetReg {
|
struct JanetReg {
|
||||||
|
Loading…
Reference in New Issue
Block a user