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; }
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; }
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; }