예제 #1
0
        public override void Cubify(RCCube target, Stack <object> names)
        {
            object[] array = names.ToArray();
            System.Array.Reverse(array);
            RCSymbolScalar symbol = RCSymbolScalar.From(array);

            target.WriteCell(this.TypeCode.ToString(), symbol, Name, -1, true, false);
            target.Write(symbol);
        }
예제 #2
0
        public override void Cubify(RCCube target, Stack <object> names)
        {
            object[] array = names.ToArray();
            System.Array.Reverse(array);
            RCSymbolScalar symbol = RCSymbolScalar.From(array);

            for (int i = 0; i < Count; ++i)
            {
                T val = this[i];
                RCSymbolScalar symboli = new RCSymbolScalar(symbol, (long)i);
                // Do not try to evaluate incrs during cubification
                target.WriteCell(this.TypeCode.ToString(), symboli, val, -1, true, false);
                target.Write(symboli);
            }
        }
예제 #3
0
        public override void Cubify(RCCube target, Stack <object> names)
        {
            if (this.Left != null)
            {
                names.Push("L");
                this.Left.Cubify(target, names);
                names.Pop();
            }
            names.Push("R");
            this.Right.Cubify(target, names);
            names.Pop();
            object[] array = names.ToArray();
            System.Array.Reverse(array);
            RCSymbolScalar symbol = RCSymbolScalar.From(array);

            target.WriteCell("o", symbol, Name);
            target.Write(symbol);
        }
예제 #4
0
        public void Operators(RCRunner runner, RCClosure closure, RCBlock right)
        {
            RCCube result = new RCCube("S");

            result.ReserveColumn("module");
            result.ReserveColumn("name");
            result.ReserveColumn("method");
            result.ReserveColumn("left");
            result.ReserveColumn("right");
            foreach (KeyValuePair <RCActivator.OverloadKey,
                                   RCActivator.OverloadValue> kv in Activator._dispatch)
            {
                RCSymbolScalar sym;
                if (kv.Key.Left == null)
                {
                    sym = RCSymbolScalar.From("operator",
                                              kv.Value.Module.Name,
                                              kv.Key.Name,
                                              RCValue.TypeNameForType(kv.Key.Right));
                }
                else
                {
                    sym = RCSymbolScalar.From("operator",
                                              kv.Value.Module.Name,
                                              kv.Key.Name,
                                              RCValue.TypeNameForType(kv.Key.Left),
                                              RCValue.TypeNameForType(kv.Key.Right));
                }
                result.WriteCell("name", sym, kv.Key.Name);
                result.WriteCell("module", sym, kv.Value.Module.Name);
                result.WriteCell("method", sym, kv.Value.Implementation.Name);
                if (kv.Key.Left != null)
                {
                    result.WriteCell("left", sym, RCValue.TypeNameForType(kv.Key.Left));
                }
                result.WriteCell("right", sym, RCValue.TypeNameForType(kv.Key.Right));
                result.Axis.Write(sym);
            }
            runner.Yield(closure, result);
        }