示例#1
0
bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val)
{
	if(type(key) == OT_NULL)
		return false;
	_HashNode *n = _Get(key, HashObj(key) & (_numofnodes - 1));
	if (n) {
		val = _realval(n->val);
		return true;
	}
	return false;
}
示例#2
0
文件: sqclass.cpp 项目: q4a/scourge
SQInteger SQClass::Next( const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval ) {
	SQObjectPtr oval;
	SQInteger idx = _members->Next( false, refpos, outkey, oval );
	if ( idx != -1 ) {
		if ( _ismethod( oval ) ) {
			outval = _methods[_member_idx( oval )].val;
		} else {
			SQObjectPtr &o = _defaultvalues[_member_idx( oval )].val;
			outval = _realval( o );
		}
	}
	return idx;
}
示例#3
0
SQInteger SQTable::Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
{
	SQInteger idx = (SQInteger)TranslateIndex(refpos);
	while (idx < _numofnodes) {
		if(type(_nodes[idx].key) != OT_NULL) {
			//first found
			_HashNode &n = _nodes[idx];
			outkey = n.key;
			outval = getweakrefs?(SQObject)n.val:_realval(n.val);
			//return idx for the next iteration
			return ++idx;
		}
		++idx;
	}
	//nothing to iterate anymore
	return -1;
}