Exemple #1
0
        internal Array TableToArray(Func <int, object> luaParamValueExtractor, Type paramArrayType, int startIndex, int count)
        {
            Array paramArray;

            if (count == 0)
            {
                return(Array.CreateInstance(paramArrayType, 0));
            }

            var luaParamValue = luaParamValueExtractor(startIndex);

#if false
            // LuaTable unpacking is disabled.
            // In Lua, print({1, 2, 3}) should pass an array, not multiple arguments.
            // You can write print(unpack({1, 2, 3})) if necessary.
            if (luaParamValue is LuaTable)
            {
                LuaTable table = (LuaTable)luaParamValue;
                IDictionaryEnumerator tableEnumerator = table.GetEnumerator();
                tableEnumerator.Reset();
                paramArray = Array.CreateInstance(paramArrayType, table.Values.Count);

                int paramArrayIndex = 0;

                while (tableEnumerator.MoveNext())
                {
                    object value = tableEnumerator.Value;

                    if (paramArrayType == typeof(object))
                    {
                        if (value != null && value.GetType() == typeof(double) && IsInteger((double)value))
                        {
                            value = Convert.ToInt32((double)value);
                        }
                    }
                    paramArray.SetValue(Convert.ChangeType(value, paramArrayType), paramArrayIndex);
                    paramArrayIndex++;
                }
            }
            else
#endif
            {
                paramArray = Array.CreateInstance(paramArrayType, count);

                paramArray.SetValue(luaParamValue, 0);

                for (int i = 1; i < count; i++)
                {
                    startIndex++;
                    var value = luaParamValueExtractor(startIndex);
                    paramArray.SetValue(value, i);
                }
            }

            return(paramArray);
        }
Exemple #2
0
        internal Array TableToArray(Func <int, object> luaParamValueExtractor, Type paramArrayType, int startIndex, int count)
        {
            Array paramArray;

            if (count == 0)
            {
                return(Array.CreateInstance(paramArrayType, 0));
            }

            var luaParamValue = luaParamValueExtractor(startIndex);

            if (luaParamValue is LuaTable)
            {
                LuaTable table = (LuaTable)luaParamValue;
                IDictionaryEnumerator tableEnumerator = table.GetEnumerator();
                tableEnumerator.Reset();
                paramArray = Array.CreateInstance(paramArrayType, table.Values.Count);

                int paramArrayIndex = 0;

                while (tableEnumerator.MoveNext())
                {
                    object value = tableEnumerator.Value;

                    if (paramArrayType == typeof(object))
                    {
                        if (value != null && value.GetType() == typeof(double) && IsInteger((double)value))
                        {
                            value = Convert.ToInt32((double)value);
                        }
                    }
#if SILVERLIGHT
                    paramArray.SetValue(Convert.ChangeType(value, paramArrayType, System.Globalization.CultureInfo.InvariantCulture), paramArrayIndex);
#else
                    paramArray.SetValue(Convert.ChangeType(value, paramArrayType), paramArrayIndex);
#endif
                    paramArrayIndex++;
                }
            }
            else
            {
                paramArray = Array.CreateInstance(paramArrayType, count);

                paramArray.SetValue(luaParamValue, 0);

                for (int i = 1; i < count; i++)
                {
                    startIndex++;
                    var value = luaParamValueExtractor(startIndex);
                    paramArray.SetValue(value, i);
                }
            }

            return(paramArray);
        }