mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +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:
|
def len() -> int:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def __iter__() -> any:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __next__() -> any:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Dict(TinyObj):
|
class Dict(TinyObj):
|
||||||
def __init__():
|
def __init__():
|
||||||
@ -37,3 +43,9 @@ class Dict(TinyObj):
|
|||||||
# remove an arg by the key
|
# remove an arg by the key
|
||||||
def remove(key: str):
|
def remove(key: str):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def __iter__() -> any:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __next__() -> any:
|
||||||
|
pass
|
||||||
|
@ -15,3 +15,10 @@ void PikaStdData_Dict_set(PikaObj* self, Arg* arg, char* key) {
|
|||||||
void PikaStdData_Dict_remove(PikaObj* self, char* key) {
|
void PikaStdData_Dict_remove(PikaObj* self, char* key) {
|
||||||
PikaStdLib_SysObj_remove(self, 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"
|
#include "PikaObj.h"
|
||||||
|
|
||||||
void PikaStdData_List_append(PikaObj* self, Arg* arg) {
|
void PikaStdData_List_append(PikaObj* self, Arg* arg) {
|
||||||
int top = obj_getInt(self, "top");
|
int top = obj_getInt(self, "top");
|
||||||
char buff[11];
|
char buff[11];
|
||||||
char* topStr = fast_itoa(buff, top);
|
char* topStr = fast_itoa(buff, top);
|
||||||
obj_setArg(self, topStr, arg);
|
PikaObj* pyload = obj_getObj(self, "pyload", 0);
|
||||||
|
obj_setArg(pyload, topStr, arg);
|
||||||
/* top++ */
|
/* top++ */
|
||||||
obj_setInt(self, "top", top + 1);
|
obj_setInt(self, "top", top + 1);
|
||||||
}
|
}
|
||||||
@ -16,11 +18,13 @@ int PikaStdData_List_len(PikaObj* self) {
|
|||||||
Arg* PikaStdData_List_get(PikaObj* self, int i) {
|
Arg* PikaStdData_List_get(PikaObj* self, int i) {
|
||||||
char buff[11];
|
char buff[11];
|
||||||
char* index = fast_itoa(buff, i);
|
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) {
|
void PikaStdData_List___init__(PikaObj* self) {
|
||||||
/* set top index for append */
|
/* set top index for append */
|
||||||
obj_setInt(self, "top", 0);
|
obj_setInt(self, "top", 0);
|
||||||
|
obj_newObj(self, "pyload", "", New_TinyObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdData_List_set(PikaObj* self, Arg* arg, int i) {
|
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_setErrorCode(self, 1);
|
||||||
obj_setSysOut(self, "[error]: index exceeded lengh of list.");
|
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():
|
def now():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def getMax()->float:
|
def getMax() -> float:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def getNow()->float:
|
def getNow() -> float:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def resetMax():
|
def resetMax():
|
||||||
@ -31,4 +31,19 @@ class SysObj(BaseObj):
|
|||||||
def float(arg: any) -> float:
|
def float(arg: any) -> float:
|
||||||
pass
|
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 "BaseObj.h"
|
||||||
|
#include "PikaStdLib_RangeObj.h"
|
||||||
#include "dataStrs.h"
|
#include "dataStrs.h"
|
||||||
|
|
||||||
void PikaStdLib_SysObj_remove(PikaObj* self, char* argPath) {
|
void PikaStdLib_SysObj_remove(PikaObj* self, char* argPath) {
|
||||||
@ -74,3 +75,31 @@ int PikaStdLib_SysObj_int(PikaObj* self, Arg* arg) {
|
|||||||
obj_setErrorCode(self, 1);
|
obj_setErrorCode(self, 1);
|
||||||
return -999999999;
|
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