String と (正確には String じゃないんですが) 同じ length が使えると ポリモルフィックに扱えていいよねということで。
pop() その他は便利そうなので。
Index: tjsArray.cpp
===================================================================
--- tjsArray.cpp (リビジョン 2157)
+++ tjsArray.cpp (作業コピー)
@@ -807,6 +807,82 @@
}
TJS_END_NATIVE_METHOD_DECL(/* func.name */add)
//----------------------------------------------------------------------
+TJS_BEGIN_NATIVE_METHOD_DECL(/* func.name */push)
+{
+ // add item(s) at last
+
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+
+ for(tjs_int i = 0; i < numparams; ++i)
+ {
+ ((tTJSArrayObject*)objthis)->Add(ni, *param[i]);
+ }
+
+ if(result) *result = (tTVInteger)(ni->Items.size());
+
+ return TJS_S_OK;
+}
+TJS_END_NATIVE_METHOD_DECL(/* func.name */push)
+//----------------------------------------------------------------------
+TJS_BEGIN_NATIVE_METHOD_DECL(/* func.name */pop)
+{
+ // pop item from last
+
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+
+ if(ni->Items.empty())
+ {
+ tTJSVariant voidValue;
+ if(result) *result = voidValue;
+ }
+ else
+ {
+ if(result) *result = ni->Items[ni->Items.size() - 1];
+ ((tTJSArrayObject*)objthis)->Erase(ni, ni->Items.size() - 1);
+ }
+
+ return TJS_S_OK;
+}
+TJS_END_NATIVE_METHOD_DECL(/* func.name */pop)
+//----------------------------------------------------------------------
+TJS_BEGIN_NATIVE_METHOD_DECL(/* func.name */shift)
+{
+ // shift item at head
+
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+
+ if(ni->Items.empty())
+ {
+ tTJSVariant voidValue;
+ if(result) *result = voidValue;
+ }
+ else
+ {
+ if(result) *result = ni->Items[0];
+ ((tTJSArrayObject*)objthis)->Erase(ni, 0);
+ }
+
+ return TJS_S_OK;
+}
+TJS_END_NATIVE_METHOD_DECL(/* func.name */shift)
+//----------------------------------------------------------------------
+TJS_BEGIN_NATIVE_METHOD_DECL(/* func.name */unshift)
+{
+ // add item(s) at head
+
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+
+ for(tjs_int i = 0; i < numparams; ++i)
+ {
+ ((tTJSArrayObject*)objthis)->Insert(ni, *param[i], i);
+ }
+
+ if(result) *result = (tTVInteger)(ni->Items.size());
+
+ return TJS_S_OK;
+}
+TJS_END_NATIVE_METHOD_DECL(/* func.name */unshift)
+//----------------------------------------------------------------------
TJS_BEGIN_NATIVE_METHOD_DECL(/* func.name */find)
{
// find item in the array,
@@ -862,7 +938,28 @@
}
TJS_END_NATIVE_PROP_DECL(count)
//----------------------------------------------------------------------
+// same as count
+TJS_BEGIN_NATIVE_PROP_DECL(length)
+{
+ TJS_BEGIN_NATIVE_PROP_GETTER
+ {
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+ if(result) *result = (tTVInteger)(ni->Items.size());
+ return TJS_S_OK;
+ }
+ TJS_END_NATIVE_PROP_GETTER
+ TJS_BEGIN_NATIVE_PROP_SETTER
+ {
+ TJS_GET_NATIVE_INSTANCE(/* var. name */ni, /* var. type */tTJSArrayNI);
+ ni->Items.resize((tjs_uint)(tTVInteger)*param);
+ return TJS_S_OK;
+ }
+ TJS_END_NATIVE_PROP_SETTER
+}
+TJS_END_NATIVE_PROP_DECL(length)
+//----------------------------------------------------------------------
+
ClassID_Array = TJS_NCM_CLASSID;
TJS_END_NATIVE_MEMBERS
}