1 Star 0 Fork 86

Fuchen/pythonvm

forked from hinus/pythonvm 
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
hiDict.hpp 2.26 KB
一键复制 编辑 原始数据 按行查看 历史
hinus 提交于 2018-10-20 23:28 +08:00 . add next method to DictIterator
#ifndef HI_DICT_HPP
#define HI_DICT_HPP
#include "object/hiObject.hpp"
#include "util/map.hpp"
class DictKlass : public Klass {
private:
DictKlass();
static DictKlass* instance;
public:
static DictKlass* get_instance();
void initialize();
virtual HiObject* getattr(HiObject* x, HiString* y);
virtual HiObject* subscr (HiObject* x, HiObject* y);
virtual HiObject* iter(HiObject* x);
virtual void print(HiObject* obj);
virtual void store_subscr(HiObject* x, HiObject* y, HiObject* z);
virtual void del_subscr (HiObject* x, HiObject* y);
virtual HiObject* allocate_instance(HiObject* callable,
ArrayList<HiObject*>* args);
virtual size_t size();
virtual void oops_do(OopClosure* f, HiObject* obj);
};
class HiDict : public HiObject {
friend class DictKlass;
private:
Map<HiObject*, HiObject*>* _map;
public:
HiDict();
HiDict(Map<HiObject*, HiObject*>* map);
Map<HiObject*, HiObject*>* map() { return _map; }
void put(HiObject* k, HiObject* v) { _map->put(k, v); }
HiObject* get(HiObject* k) { return _map->get(k); }
bool has_key(HiObject* k) { return _map->has_key(k); }
int size() { return _map->size(); }
HiObject* remove(HiObject* k) { return _map->remove(k); }
void update(HiDict* d);
};
HiObject* dict_set_default(ObjList args);
HiObject* dict_remove(ObjList args);
HiObject* dict_keys(ObjList args);
HiObject* dict_values(ObjList args);
HiObject* dict_items(ObjList args);
HiObject* dict_iterkeys(ObjList args);
HiObject* dict_itervalues(ObjList args);
HiObject* dict_iteritems(ObjList args);
enum ITER_TYPE {
ITER_KEY = 0,
ITER_VALUE,
ITER_ITEM
};
template<ITER_TYPE n>
class DictIteratorKlass : public Klass {
private:
static DictIteratorKlass* instance;
DictIteratorKlass();
public:
static DictIteratorKlass* get_instance();
virtual HiObject* iter(HiObject* x) { return x; }
virtual HiObject* next(HiObject* x);
};
class DictIterator : public HiObject {
private:
HiDict* _owner;
int _iter_cnt;
public:
DictIterator(HiDict* owner);
HiDict* owner() { return _owner; }
int iter_cnt() { return _iter_cnt; }
void inc_cnt() { _iter_cnt++; }
};
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/foocoder/pythonvm.git
git@gitee.com:foocoder/pythonvm.git
foocoder
pythonvm
pythonvm
master

搜索帮助