1
0
forked from 0ad/0ad

Avoid some code duplication

This was SVN commit r10583.
This commit is contained in:
Ykkrosh 2011-11-23 21:26:14 +00:00
parent ab88151ed0
commit 2878102ed7

View File

@ -210,24 +210,24 @@ template<> jsval ScriptInterface::ToJSVal<CFixedVector2D>(JSContext* cx, const C
return OBJECT_TO_JSVAL(obj);
}
template<> jsval ScriptInterface::ToJSVal<Grid<u16> >(JSContext* cx, const Grid<u16>& val)
template<jsint atype, typename T> jsval ToJSVal_Grid(JSContext* cx, const Grid<T>& val)
{
JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL);
if (!obj)
return JSVAL_VOID;
jsuint len = val.m_W * val.m_H;
JSObject *darray = js_CreateTypedArray(cx, js::TypedArray::TYPE_UINT16, len);
JSObject *darray = js_CreateTypedArray(cx, atype, len);
if (!darray)
return JSVAL_VOID;
js::TypedArray *tdest = js::TypedArray::fromJSObject(darray);
ENSURE(tdest->byteLength == len*sizeof(u16));
ENSURE(tdest->byteLength == len*sizeof(T));
memcpy(tdest->data, val.m_Data, tdest->byteLength);
jsval w = ToJSVal(cx, val.m_W);
jsval h = ToJSVal(cx, val.m_H);
jsval w = ScriptInterface::ToJSVal(cx, val.m_W);
jsval h = ScriptInterface::ToJSVal(cx, val.m_H);
jsval data = OBJECT_TO_JSVAL(darray);
JS_SetProperty(cx, obj, "width", &w);
@ -239,27 +239,10 @@ template<> jsval ScriptInterface::ToJSVal<Grid<u16> >(JSContext* cx, const Grid<
template<> jsval ScriptInterface::ToJSVal<Grid<u8> >(JSContext* cx, const Grid<u8>& val)
{
JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL);
if (!obj)
return JSVAL_VOID;
jsuint len = val.m_W * val.m_H;
JSObject *darray = js_CreateTypedArray(cx, js::TypedArray::TYPE_UINT8, len);
if (!darray)
return JSVAL_VOID;
js::TypedArray *tdest = js::TypedArray::fromJSObject(darray);
ENSURE(tdest->byteLength == len*sizeof(u8));
memcpy(tdest->data, val.m_Data, tdest->byteLength);
jsval w = ToJSVal(cx, val.m_W);
jsval h = ToJSVal(cx, val.m_H);
jsval data = OBJECT_TO_JSVAL(darray);
JS_SetProperty(cx, obj, "width", &w);
JS_SetProperty(cx, obj, "height", &h);
JS_SetProperty(cx, obj, "data", &data);
return OBJECT_TO_JSVAL(obj);
return ToJSVal_Grid<js::TypedArray::TYPE_UINT8>(cx, val);
}
template<> jsval ScriptInterface::ToJSVal<Grid<u16> >(JSContext* cx, const Grid<u16>& val)
{
return ToJSVal_Grid<js::TypedArray::TYPE_UINT16>(cx, val);
}