mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
update PikaStdData and PikaStdLib
This commit is contained in:
parent
56bc4deef7
commit
2d22ed170a
@ -21,6 +21,12 @@ class List(TinyObj):
|
||||
def len() -> int:
|
||||
pass
|
||||
|
||||
def __iter__() -> any:
|
||||
pass
|
||||
|
||||
def __next__() -> any:
|
||||
pass
|
||||
|
||||
|
||||
class Dict(TinyObj):
|
||||
def __init__():
|
||||
@ -37,3 +43,9 @@ class Dict(TinyObj):
|
||||
# remove an arg by the key
|
||||
def remove(key: str):
|
||||
pass
|
||||
|
||||
def __iter__() -> any:
|
||||
pass
|
||||
|
||||
def __next__() -> any:
|
||||
pass
|
||||
|
@ -14,4 +14,11 @@ void PikaStdData_Dict_set(PikaObj* self, Arg* arg, char* key) {
|
||||
|
||||
void PikaStdData_Dict_remove(PikaObj* self, char* key) {
|
||||
PikaStdLib_SysObj_remove(self, key);
|
||||
}
|
||||
|
||||
Arg * PikaStdData_Dict___iter__(PikaObj *self){
|
||||
return NULL;
|
||||
}
|
||||
Arg * PikaStdData_Dict___next__(PikaObj *self){
|
||||
return NULL;
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
#include "BaseObj.h"
|
||||
#include "PikaObj.h"
|
||||
|
||||
void PikaStdData_List_append(PikaObj* self, Arg* arg) {
|
||||
int top = obj_getInt(self, "top");
|
||||
char buff[11];
|
||||
char* topStr = fast_itoa(buff, top);
|
||||
obj_setArg(self, topStr, arg);
|
||||
PikaObj* pyload = obj_getObj(self, "pyload", 0);
|
||||
obj_setArg(pyload, topStr, arg);
|
||||
/* top++ */
|
||||
obj_setInt(self, "top", top + 1);
|
||||
}
|
||||
@ -16,11 +18,13 @@ int PikaStdData_List_len(PikaObj* self) {
|
||||
Arg* PikaStdData_List_get(PikaObj* self, int i) {
|
||||
char buff[11];
|
||||
char* index = fast_itoa(buff, i);
|
||||
return arg_copy(obj_getArg(self, index));
|
||||
PikaObj* pyload = obj_getObj(self, "pyload", 0);
|
||||
return arg_copy(obj_getArg(pyload, index));
|
||||
}
|
||||
void PikaStdData_List___init__(PikaObj* self) {
|
||||
/* set top index for append */
|
||||
obj_setInt(self, "top", 0);
|
||||
obj_newObj(self, "pyload", "", New_TinyObj);
|
||||
}
|
||||
|
||||
void PikaStdData_List_set(PikaObj* self, Arg* arg, int i) {
|
||||
@ -31,5 +35,21 @@ void PikaStdData_List_set(PikaObj* self, Arg* arg, int i) {
|
||||
obj_setErrorCode(self, 1);
|
||||
obj_setSysOut(self, "[error]: index exceeded lengh of list.");
|
||||
}
|
||||
obj_setArg(self, i_str, arg);
|
||||
PikaObj* pyload = obj_getObj(self, "pyload", 0);
|
||||
obj_setArg(pyload, i_str, arg);
|
||||
}
|
||||
|
||||
Arg* PikaStdData_List___iter__(PikaObj* self) {
|
||||
obj_setInt(self, "__iter_i", 0);
|
||||
return arg_setPtr(NULL, "", TYPE_POINTER, self);
|
||||
}
|
||||
|
||||
Arg* PikaStdData_List___next__(PikaObj* self) {
|
||||
int __iter_i = args_getInt(self->list, "__iter_i");
|
||||
Arg* res = PikaStdData_List_get(self, __iter_i);
|
||||
if(NULL == res){
|
||||
return arg_setNull(NULL);
|
||||
}
|
||||
args_setInt(self->list, "__iter_i", __iter_i + 1);
|
||||
return res;
|
||||
}
|
@ -8,10 +8,10 @@ class MemChecker(TinyObj):
|
||||
def now():
|
||||
pass
|
||||
|
||||
def getMax()->float:
|
||||
def getMax() -> float:
|
||||
pass
|
||||
|
||||
def getNow()->float:
|
||||
def getNow() -> float:
|
||||
pass
|
||||
|
||||
def resetMax():
|
||||
@ -31,4 +31,19 @@ class SysObj(BaseObj):
|
||||
def float(arg: any) -> float:
|
||||
pass
|
||||
|
||||
def iter(arg: any) -> any:
|
||||
pass
|
||||
|
||||
def next(arg: any) -> any:
|
||||
pass
|
||||
|
||||
def range(a1: int, a2: int, a3: int) -> any:
|
||||
pass
|
||||
|
||||
|
||||
class RangeObj(TinyObj):
|
||||
def __iter__() -> any:
|
||||
pass
|
||||
|
||||
def __next__() -> any:
|
||||
pass
|
||||
|
31
package/PikaStdLib/PikaStdLib_RangeObj.c
Normal file
31
package/PikaStdLib/PikaStdLib_RangeObj.c
Normal file
@ -0,0 +1,31 @@
|
||||
#include "PikaObj.h"
|
||||
|
||||
Arg* PikaStdLib_RangeObj___iter__(PikaObj* self) {
|
||||
return arg_setPtr(NULL, "", TYPE_OBJECT, self);
|
||||
;
|
||||
}
|
||||
Arg* PikaStdLib_RangeObj___next__(PikaObj* self) {
|
||||
int a1 = obj_getInt(self, "a1");
|
||||
int a2 = obj_getInt(self, "a2");
|
||||
int a3 = obj_getInt(self, "a3");
|
||||
int start = 0;
|
||||
int end = 0;
|
||||
int foot = 1;
|
||||
/* only start and end */
|
||||
if (-999999999 == a3) {
|
||||
start = a1;
|
||||
end = a2;
|
||||
}
|
||||
/* start */
|
||||
int iter_i = obj_getInt(self, "iter_i");
|
||||
/* iter_i is not inited */
|
||||
if (-999999999 == iter_i) {
|
||||
iter_i = start;
|
||||
}
|
||||
/* exit */
|
||||
if (iter_i >= end) {
|
||||
return arg_setNull(NULL);
|
||||
}
|
||||
obj_setInt(self, "iter_i", iter_i + foot);
|
||||
return arg_setInt(NULL, "", iter_i);
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
#include "BaseObj.h"
|
||||
#include "PikaStdLib_RangeObj.h"
|
||||
#include "dataStrs.h"
|
||||
|
||||
void PikaStdLib_SysObj_remove(PikaObj* self, char* argPath) {
|
||||
@ -73,4 +74,32 @@ int PikaStdLib_SysObj_int(PikaObj* self, Arg* arg) {
|
||||
obj_setSysOut(self, "[error] convert to int type faild.");
|
||||
obj_setErrorCode(self, 1);
|
||||
return -999999999;
|
||||
}
|
||||
}
|
||||
|
||||
Arg* PikaStdLib_SysObj_iter(PikaObj* self, Arg* arg) {
|
||||
/* a MATE object */
|
||||
if (TYPE_MATE_OBJECT == arg_getType(arg)) {
|
||||
return arg_copy(arg);
|
||||
}
|
||||
/* object */
|
||||
if (TYPE_POINTER == arg_getType(arg)) {
|
||||
PikaObj* arg_obj = arg_getPtr(arg);
|
||||
obj_run(arg_obj, "__res = __iter__()");
|
||||
return arg_copy(args_getArg(arg_obj->list, "__res"));
|
||||
}
|
||||
return arg_setNull(NULL);
|
||||
}
|
||||
|
||||
Arg* PikaStdLib_SysObj_next(PikaObj* self, Arg* arg) {
|
||||
PikaObj* arg_obj = arg_getPtr(arg);
|
||||
obj_run(arg_obj, "__res = __next__()");
|
||||
return arg_copy(args_getArg(arg_obj->list, "__res"));
|
||||
}
|
||||
|
||||
Arg* PikaStdLib_SysObj_range(PikaObj* self, int a1, int a2, int a3) {
|
||||
/* set template arg to create rangeObj */
|
||||
obj_setInt(self, "__range_a1", a1);
|
||||
obj_setInt(self, "__range_a2", a2);
|
||||
obj_setInt(self, "__range_a3", a3);
|
||||
return arg_setMetaObj("", "PikaStdLib_RangeObj", New_PikaStdLib_RangeObj);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user