Exemple #1
0
        public IObject CreateFunction(ExecutableCode executableCode, ReadOnlyList <string> formalParameters, ILexicalEnvironment scope)
        {
            // 13.2 Creating Function Objects

            var f = new NFunction(this);

            {
                f.Class            = "Function";
                f.Extensible       = true;
                f.Prototype        = FunctionPrototype;
                f.ExecutableCode   = executableCode;
                f.FormalParameters = formalParameters;
                f.Scope            = scope;

                f.DefineOwnProperty("length", CreateDataDescriptor(CreateNumber(f.FormalParameters.Count), false, false, false), false);
                f.DefineOwnProperty("constructor", CreateDataDescriptor(f, true, false, true), false);
                f.DefineOwnProperty("prototype", CreateDataDescriptor(ObjectConstructor.Op_Construct(EmptyArgs), true, false, false), false);

                if (executableCode.Strict)
                {
                    var desc = CreateAccessorDescriptor(ThrowTypeErrorFunction, ThrowTypeErrorFunction, false, false);
                    f.DefineOwnProperty("caller", desc, false);
                    f.DefineOwnProperty("arguments", desc, false);
                }
            }
            return(f);
        }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="NFuzzySet"/>.
 /// </summary>
 /// <param name="function">Функция принадлежности.</param>
 /// <param name="xmin">Массив, содержащий минимумы универсальных множеств для каждой переменной. Размерности
 /// <see cref="xmin"/> и <see cref="xmax"/> должны совпадать.</param>
 /// <param name="xmax">>Массив, содержащий максимумы универсальных множеств для каждой переменной. Размерности
 /// <see cref="xmin"/> и <see cref="xmax"/> должны совпадать.</param>
 public NFuzzySet(NFunction function, double[] xmin, double[] xmax)
 {
     if (xmin.Length == 0)
     {
         throw new ArgumentException("Размерность массива должна быть больше 0.", "xmin");
     }
     if (xmax.Length == 0)
     {
         throw new ArgumentException("Размерность массива должна быть больше 0.", "xmax");
     }
     if (xmin.Length != xmax.Length)
     {
         throw new ArgumentException("Размерности массивов должны совпадать.");
     }
     this.function = function;
     this.xmax     = xmax;
     this.xmin     = xmin;
 }
Exemple #3
0
    public UInt32 Send(Client c, int messageid)
    {
        ClientObject obj;

        ClientObject.cache_by_client.TryGetValue(c, out obj);

        IntPtr    L = XLuaManager.Instance.GetLuaEnv().rawL;
        NFunction f = NModuleManager.GetInstance().GetFunctin(messageid);

        if (f != null)
        {
            Package p = c.PackageFactory.CreatePackage();
            p.MessageID = messageid;
            p.Header.SetExtData(c.NextSendPackageExtData);
//            Logger.Log("send message id is " + messageid);
            FormatPackage(p, f, L);
            c.Send(p);
            if (null != this.OnSend)
            {
                this.OnSend(messageid, p.Header.GetExtData(), p.Header.GetSeqNum());
            }

#if UNITY_EDITOR
            StringBuilder sb = new StringBuilder();
            sb.Append(f.Nm.Name);
            sb.Append(".");
            sb.Append(f.Name);
            if (!m_allSendMessage.ContainsKey(messageid))
            {
                m_allSendMessage.Add(messageid, sb.ToString());
                if (!m_allHandleMessage.ContainsKey(sb.ToString()))
                {
//                    Logger.Log(string.Format("<color=#ff9900ff><<<need handle message>>>,id:{0} name:{1}</color>", messageid, sb.ToString()));
                    m_allHandleMessage.Add(sb.ToString(), 1);
                }
            }
            //Logger.Log(string.Format("<color=#00ababff><<<send>>>,msgid:{0}({1})</color>", messageid, sb.ToString()), Logger.LogLevel.Important);
#endif
            return(p.Header.GetExtData());
        }
        return(0);
    }
Exemple #4
0
    private void FormatPackage(Package p, NFunction f, RealStatePtr L)
    {
        int            startparamnum = 3;
        IList <NParam> parmlist      = f.ParamList;

        using (MemoryStream ms = new MemoryStream())
        {
            for (int i = 0; i < parmlist.Count; i++)
            {
                Sio.SData d = format_data(parmlist[i], L, ++startparamnum, true);
                if (d != null)
                {
                    d.Serializ(ms);
                }
            }
            byte[] dbyte = new byte[ms.Length];
            Array.Copy(ms.GetBuffer(), dbyte, ms.Length);
            p.Data = dbyte;
        }
    }