Quellcode durchsuchen

Add operator overload [] for SQObjctPtr to be used by C++

mingodad vor 9 Jahren
Ursprung
Commit
31eee5abdc
2 geänderte Dateien mit 19 neuen und 0 gelöschten Zeilen
  1. 17 0
      SquiLu/squirrel/sqobject.cpp
  2. 2 0
      SquiLu/squirrel/sqobject.h

+ 17 - 0
SquiLu/squirrel/sqobject.cpp

@@ -46,6 +46,23 @@ const SQChar *GetTypeName(const SQObjectPtr &obj1)
 	return IdType2Name(type(obj1));
 	return IdType2Name(type(obj1));
 }
 }
 
 
+SQObjectPtr SQObjectPtr::operator[](SQInteger nidx) {
+    SQObjectPtr val;
+    if(type(*this) == OT_ARRAY) _array(*this)->Get(nidx, val);
+    return val;
+}
+
+SQObjectPtr SQObjectPtr::operator[](const SQChar *key) {
+    SQObjectPtr val;
+    switch(type(*this))
+    {
+        case OT_TABLE: _table(*this)->Get(key, val); break;
+        case OT_CLASS: _class(*this)->Get(key, val); break;
+        case OT_INSTANCE: _instance(*this)->Get(key, val); break;
+    }
+    return val;
+}
+
 SQString *SQString::Create(SQSharedState *ss,const SQChar *s,SQInteger len)
 SQString *SQString::Create(SQSharedState *ss,const SQChar *s,SQInteger len)
 {
 {
 	SQString *str=ADD_STRING(ss,s,len);
 	SQString *str=ADD_STRING(ss,s,len);

+ 2 - 0
SquiLu/squirrel/sqobject.h

@@ -313,6 +313,8 @@ struct SQObjectPtr : public SQObject
 	{
 	{
 		return _type == OT_NULL;
 		return _type == OT_NULL;
 	}
 	}
+	SQObjectPtr operator[](SQInteger nidx);
+	SQObjectPtr operator[](const SQChar *key);
 	private:
 	private:
 		SQObjectPtr(const SQChar *){} //safety
 		SQObjectPtr(const SQChar *){} //safety
 };
 };