示例#1
0
        public static T GetNonRefTranslator(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            object obj = JsEnv.jsEnvs[jsEnvIdx].GeneralGetterManager.GetNativeObjectTranslatorFunc(isolate, getValueApi, value, isByRef);

            if (obj != null)
            {
                return((T)obj);
            }
            return(default(T));
        }
示例#2
0
 internal object NativeObjectTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     if (getValueApi.GetJsValueType(isolate, value, isByRef) == JsValueType.NativeObject)
     {
         var objPtr = getValueApi.GetNativeObject(isolate, value, isByRef);
         var obj    = objectPool.Get(objPtr.ToInt32());
         return(obj);
     }
     return(null);
 }
示例#3
0
        internal object AnyTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            var type = getValueApi.GetJsValueType(isolate, value, isByRef);

            switch (type)
            {
            case JsValueType.BigInt:
                return(getValueApi.GetBigInt(isolate, value, isByRef));

            case JsValueType.Boolean:
                return(getValueApi.GetBoolean(isolate, value, isByRef));

            case JsValueType.Date:
                return(DateTranslator(isolate, getValueApi, value, isByRef));

            case JsValueType.ArrayBuffer:
                return(getValueApi.GetArrayBuffer(isolate, value, isByRef));

            case JsValueType.Function:
                return(getValueApi.GetFunction(isolate, value, isByRef));

            case JsValueType.JsObject:
                return(getValueApi.GetJSObject(isolate, value, isByRef));

            case JsValueType.NativeObject:
                var typeId = getValueApi.GetTypeId(isolate, value, isByRef);
                if (!typeRegister.IsArray(typeId))
                {
                    var objType = typeRegister.GetType(typeId);
                    if (objType != typeof(object) && generalGetterMap.ContainsKey(objType))
                    {
                        return(generalGetterMap[objType](isolate, getValueApi, value, isByRef));
                    }
                }
                var objPtr = getValueApi.GetNativeObject(isolate, value, isByRef);
                var result = objectPool.Get(objPtr.ToInt32());

                var typedValueResult = result as TypedValue;
                if (typedValueResult != null)
                {
                    return(typedValueResult.Target);
                }

                return(result);

            case JsValueType.Number:
                return(getValueApi.GetNumber(isolate, value, isByRef));

            case JsValueType.String:
                return(getValueApi.GetString(isolate, value, isByRef));

            default:
                return(null);
            }
        }
示例#4
0
        private static T DefaultGetResult(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            object obj = JsEnv.jsEnvs[jsEnvIdx].GeneralGetterManager.GetTranslateFunc(typeof(T))(isolate, getValueApi, value, isByRef);

            if (obj == null)
            {
                return(default(T));
            }
            else
            {
                return((T)obj);
            }
        }
        private object GenericDelegateTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            var jsValueType = getValueApi.GetJsValueType(isolate, value, isByRef);

            if (jsValueType == JsValueType.Function)
            {
                var nativePtr = getValueApi.GetFunction(isolate, value, isByRef);
                return(new GenericDelegate(nativePtr, jsEnv));
            }
            else
            {
                return(AnyTranslator(isolate, getValueApi, value, isByRef));
            }
        }
示例#6
0
        private object JSObjectTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            var jsValueType = getValueApi.GetJsValueType(isolate, value, isByRef);

            if (jsValueType == JsValueType.JsObject)
            {
                IntPtr DLLJSObjectPtr = getValueApi.GetJSObject(isolate, value, isByRef);
                return(jsEnv.jsObjectFactory.GetOrCreateJSObject(DLLJSObjectPtr, jsEnv));
            }
            else
            {
                return(AnyTranslator(isolate, getValueApi, value, isByRef));
            }
        }
示例#7
0
        internal object AnyTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            var type = getValueApi.GetJsValueType(isolate, value, isByRef);

            switch (type)
            {
            case JsValueType.BigInt:
                return(getValueApi.GetBigInt(isolate, value, isByRef));

            case JsValueType.Boolean:
                return(getValueApi.GetBoolean(isolate, value, isByRef));

            case JsValueType.Date:
                return(DateTranslator(isolate, getValueApi, value, isByRef));

            //case JsValueType.Function:
            //case JsValueType.JsObject:
            case JsValueType.NativeObject:
                var typeId  = getValueApi.GetTypeId(isolate, value, isByRef);
                var objType = typeRegister.GetType(typeId);
                if (objType != typeof(object) && generalGetterMap.ContainsKey(objType))
                {
                    return(generalGetterMap[objType](isolate, getValueApi, value, isByRef));
                }
                var objPtr = getValueApi.GetObject(isolate, value, isByRef);
                return(objectPool.Get(objPtr.ToInt32()));

            case JsValueType.Number:
                return(getValueApi.GetNumber(isolate, value, isByRef));

            case JsValueType.String:
                return(getValueApi.GetString(isolate, value, isByRef));

            default:
                return(null);
            }
        }
示例#8
0
 public static string GetString(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return getValueApi.GetString(isolate, holder, isByRef);
 }
示例#9
0
 public static short GetInt16(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (short)getValueApi.GetNumber(isolate, holder, isByRef);
 }
示例#10
0
 public static sbyte GetSByte(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (sbyte)getValueApi.GetNumber(isolate, holder, isByRef);
 }
示例#11
0
 public static double GetDouble(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return getValueApi.GetNumber(isolate, holder, isByRef);
 }
示例#12
0
 public static float GetFloat(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (float)getValueApi.GetNumber(isolate, holder, isByRef);
 }
 private static object ArrayBufferTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     return(getValueApi.GetArrayBuffer(isolate, value, isByRef));
 }
示例#14
0
 public static DateTime GetDateTime(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     var ticks = getValueApi.GetDate(isolate, holder, isByRef);
     return (new DateTime(1970, 1, 1)).AddMilliseconds(ticks);
 }
示例#15
0
 private static object DoubleTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     return(getValueApi.GetNumber(isolate, value, isByRef));
 }
示例#16
0
 private static T DefaultGetResult(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     return (T)JsEnv.jsEnvs[jsEnvIdx].GeneralGetterManager.GetTranslateFunc(typeof(T))(isolate, getValueApi, value, isByRef);
 }
示例#17
0
 public static bool GetBoolean(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return(getValueApi.GetBoolean(isolate, holder, isByRef));
 }
示例#18
0
 private static object UlongTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     return((ulong)getValueApi.GetBigInt(isolate, value, isByRef));
 }
示例#19
0
        private static object DateTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            var ticks = getValueApi.GetDate(isolate, value, isByRef);

            return((new DateTime(1970, 1, 1)).AddMilliseconds(ticks));
        }
示例#20
0
 private static object StringTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
 {
     return(getValueApi.GetString(isolate, value, isByRef));
 }
示例#21
0
 public static ArrayBuffer GetArrayBuffer(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return(getValueApi.GetArrayBuffer(isolate, holder, isByRef));
 }
示例#22
0
 public static uint GetUInt32(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (uint)getValueApi.GetNumber(isolate, holder, isByRef);
 }
示例#23
0
 public static char GetChar(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (char)getValueApi.GetNumber(isolate, holder, isByRef);
 }
示例#24
0
 public static ulong GetUInt64(int jsEnvIdx, IntPtr isolate, IGetValueFromJs getValueApi, IntPtr holder, bool isByRef)
 {
     return (ulong)getValueApi.GetBigInt(isolate, holder, isByRef);
 }
示例#25
0
        private object JSObjectTranslator(IntPtr isolate, IGetValueFromJs getValueApi, IntPtr value, bool isByRef)
        {
            IntPtr DLLJSObjectPtr = getValueApi.GetJSObject(isolate, value, isByRef);

            return(jsEnv.jsObjectFactory.GetOrCreateJSObject(DLLJSObjectPtr, jsEnv));
        }