/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.userdata.base; import android.content.Context; import com.taobao.luaview.global.LuaResourceFinder; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaUserdata; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import java.io.Serializable; import java.lang.ref.WeakReference; /** * 基础用户数据 * * @author song * @date 15/8/21 */ public class BaseUserdata extends LuaUserdata implements Serializable { private Globals mGlobals; public Varargs initParams = LuaValue.NIL; public BaseUserdata(Globals globals, LuaValue metatable) { this(globals, metatable, NIL); } public BaseUserdata(Object obj, Globals globals, LuaValue metatable) { this(obj, globals, metatable, NIL); } public BaseUserdata(Globals globals, LuaValue metatable, Varargs varargs) { super(globals, metatable); this.initParams = varargs; } public BaseUserdata(Object obj, Globals globals, LuaValue metatable, Varargs varargs) { super(new WeakReference<Object>(obj), metatable); this.mGlobals = globals; this.initParams = varargs; } public LuaValue setInitParams(Varargs initParams) { this.initParams = initParams; return this; } public Varargs getInitParams() { return initParams; } public LuaValue getInitParam1() { return getInitParam1(LuaValue.NIL); } public LuaValue getInitParam2() { return getInitParam2(LuaValue.NIL); } public LuaValue getInitParam1(LuaValue defaultValue) { return getInitParam(1, defaultValue); } public LuaValue getInitParam2(LuaValue defaultValue) { return getInitParam(2, defaultValue); } public LuaValue getInitParam(int index, LuaValue defaultValue) { return initParams != null && initParams.narg() >= index ? initParams.arg(index) : defaultValue; } public LuaValue getInitParam1(Varargs varargs) { return getInitParam1(1, varargs, LuaValue.NIL); } public LuaValue getInitParam1(int index, Varargs varargs, LuaValue defaultValue) { return varargs != null && varargs.narg() >= index ? varargs.arg(index) : defaultValue; } public int getInitParamsCount() { return initParams != null ? initParams.narg() : 0; } @Override public Object userdata() { Object obj = super.userdata(); if (obj instanceof WeakReference) { return ((WeakReference) obj).get(); } else { return obj; } } public Globals getGlobals() { return userdata() instanceof Globals ? (Globals) userdata() : mGlobals; } public LuaResourceFinder getLuaResourceFinder() { return getGlobals() != null ? getGlobals().getLuaResourceFinder() : null; } public Context getContext() { return getGlobals() != null ? getGlobals().getContext() : null; } /** * 销毁的时候置空 */ public void onDestroy() { m_instance = null; } @Override public String tojstring() { return String.valueOf(userdata()); } }