/// <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)); }
/// <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; }
/// <summary> /// 新しいインスタンスを初期化します。 /// </summary> /// <param name="name">メソッド名</param> /// <param name="bd">メソッドのデリゲート</param> public KecaknoahInteropMethodInfo(string name, KecaknoahInteropDelegate bd) : this(name, 0, bd) { }
/// <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) };
/// <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) };
/// <summary> /// 新しいインスタンスを生成します。 /// </summary> /// <param name="inst">インスタンス</param> /// <param name="method">メソッド</param> public KecaknoahInteropFunction(KecaknoahObject inst, KecaknoahInteropDelegate method) { Instance = inst; Function = method; ExtraType = "InteropFunction"; }
/// <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)); }
/// <summary> /// メソッドを登録します。 /// </summary> /// <param name="name">メソッド名</param> /// <param name="func">登録するメソッドのデリゲート</param> public void AddFunction(string name, KecaknoahInteropDelegate func) { funcs[name] = KecaknoahReference.Right(this, func); }
/// <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); }
/// <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); }