コード例 #1
0
ファイル: KecaknoahModule.cs プロジェクト: utgwkk/Kecaknoah
 /// <summary>
 /// .NETメソッドをトップレベルに登録します。
 /// </summary>
 /// <param name="func">登録する<see cref="KecaknoahInteropDelegate"/>形式のメソッド</param>
 /// <param name="name">メソッド名</param>
 public void RegisterFunction(KecaknoahInteropDelegate func, string name)
 {
     var fo = new KecaknoahInteropMethodInfo(name, func);
     topMethods.Add(fo);
     methodReferences.Add(KecaknoahReference.CreateRightReference(null, func));
 }
コード例 #2
0
 /// <summary>
 /// 新しいインスタンスを初期化します。
 /// </summary>
 /// <param name="name">メソッド名</param>
 /// <param name="length">引数の数</param>
 /// <param name="bd">メソッドのデリゲート</param>
 public KecaknoahInteropMethodInfo(string name, int length, KecaknoahInteropDelegate bd)
 {
     Name = name;
     ArgumentLength = length;
     Body = bd;
 }
コード例 #3
0
        /// <summary>
        /// 新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="name">メソッド名</param>
        /// <param name="bd">メソッドのデリゲート</param>
        public KecaknoahInteropMethodInfo(string name, KecaknoahInteropDelegate bd) : this(name, 0, bd)
        {

        }
コード例 #4
0
 /// <summary>
 /// 左辺値を生成します。
 /// </summary>
 /// <param name="self">属するインスタンス</param>
 /// <param name="sobj">対象</param>
 /// <returns>左辺値参照</returns>
 public static KecaknoahReference Left(KecaknoahObject self, KecaknoahInteropDelegate sobj) => new KecaknoahReference
 {
     IsLeftValue = true,
     obj = new KecaknoahInteropFunction(self, sobj)
 };
コード例 #5
0
 /// <summary>
 /// 右辺値を生成します。
 /// </summary>
 /// <param name="self">属するインスタンス</param>
 /// <param name="sobj">対象</param>
 /// <returns>右辺値参照</returns>
 public static KecaknoahReference CreateRightReference(KecaknoahObject self, KecaknoahInteropDelegate sobj) => new KecaknoahReference
 {
     IsLeftValue = false,
     obj = new KecaknoahInteropFunction(self, sobj)
 };
コード例 #6
0
 /// <summary>
 /// 新しいインスタンスを生成します。
 /// </summary>
 /// <param name="inst">インスタンス</param>
 /// <param name="method">メソッド</param>
 public KecaknoahInteropFunction(KecaknoahObject inst, KecaknoahInteropDelegate method)
 {
     Instance = inst;
     Function = method;
     ExtraType = "InteropFunction";
 }
コード例 #7
0
 /// <summary>
 /// メソッドを登録します。
 /// </summary>
 /// <param name="name">メソッド名</param>
 /// <param name="func">登録するメソッドのデリゲート</param>
 public void AddFunction(string name, KecaknoahInteropDelegate func)
 {
     funcs[name] = KecaknoahReference.CreateRightReference(new KecaknoahInteropFunction(this, func));
 }
コード例 #8
0
 /// <summary>
 /// メソッドを登録します。
 /// </summary>
 /// <param name="name">メソッド名</param>
 /// <param name="func">登録するメソッドのデリゲート</param>
 public void AddFunction(string name, KecaknoahInteropDelegate func)
 {
     funcs[name] = KecaknoahReference.Right(this, func);
 }
コード例 #9
0
        /// <summary>
        /// メソッドを登録します。
        /// </summary>
        /// <param name="name">メソッド名</param>
        /// <param name="func">
        /// 登録するメソッドのデリゲート。
        /// インスタンスと引数が渡されます。
        /// </param>
        public void AddStringFunction(string name, Func <KecaknoahObject, KecaknoahObject[], string> func)
        {
            KecaknoahInteropDelegate wp = (c, s, a) => func(s, a).AsKecaknoahString().NoResume();

            funcs[name] = KecaknoahReference.Right(this, wp);
        }
コード例 #10
0
        /// <summary>
        /// メソッドを登録します。
        /// </summary>
        /// <param name="name">メソッド名</param>
        /// <param name="func">
        /// 登録するメソッドのデリゲート。
        /// インスタンスと引数が渡されます。
        /// </param>
        public void AddSingleFunction(string name, Func <KecaknoahObject, KecaknoahObject[], float> func)
        {
            KecaknoahInteropDelegate wp = (c, s, a) => ((double)func(s, a)).AsKecaknoahFloat().NoResume();

            funcs[name] = KecaknoahReference.Right(this, wp);
        }