Exemplo n.º 1
0
 public Sym12TernaryTableUpdater(string relvarName, Sym12TernaryTable table, ValueStoreUpdater store12, ValueStoreUpdater store3)
 {
     this.relvarName = relvarName;
     this.table      = table;
     this.store12    = store12;
     this.store3     = store3;
 }
Exemplo n.º 2
0
 public Iter3(Sym12TernaryTable table, int arg3, int index0) : base(table, index0)
 {
     this.arg3 = arg3;
     while (index != Empty && table.Arg3(index) != arg3)
     {
         index = table.index3.Next(index);
     }
 }
Exemplo n.º 3
0
 public Iter2(Sym12TernaryTable table, int arg2, int index0) : base(table, index0)
 {
     this.arg2 = arg2;
     while (index != Empty && !IsMatch())
     {
         index = table.index2.Next(index);
     }
 }
Exemplo n.º 4
0
 public Iter1(Sym12TernaryTable table, int arg1, int index0) : base(table, index0)
 {
     this.arg1 = arg1;
     while (index != Empty && !IsMatch())
     {
         index = table.index1.Next(index);
     }
 }
Exemplo n.º 5
0
 public Iter12(Sym12TernaryTable table, int arg1, int arg2, int index0) : base(table, index0)
 {
     Debug.Assert(arg1 <= arg2);
     this.arg1 = arg1;
     this.arg2 = arg2;
     while (index != Empty && !IsMatch())
     {
         index = table.index12.Next(index);
     }
 }
Exemplo n.º 6
0
        //////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////

        public static void Write(DataWriter writer, int fieldSymbId, Sym12TernaryTable[] tables, int indentation, bool indentFirstLine, bool writeSeparator)
        {
            string baseWs  = new string(Array.Repeat(' ', indentation));
            string entryWs = new string(Array.Repeat(' ', indentation + 2));

            int count = 0;

            for (int i = 0; i < tables.Length; i++)
            {
                count += tables[i].Size();
            }

            if (indentFirstLine)
            {
                writer.Write(baseWs);
            }
            writer.Write(SymbObj.IdxToStr(fieldSymbId));
            writer.Write(": [");

            if (count > 0)
            {
                writer.Write("\n");

                int written = 0;
                for (int i = 0; i < tables.Length; i++)
                {
                    Sym12TernaryTable      table    = tables[i];
                    SurrObjMapper          mapper12 = table.mapper12;
                    SurrObjMapper          mapper3  = table.mapper3;
                    Sym12TernaryTable.Iter it       = table.GetIter();
                    while (!it.Done())
                    {
                        writer.Write(entryWs);
                        Obj obj1 = mapper12(it.Get1());
                        Obj obj2 = mapper12(it.Get2());
                        Obj obj3 = mapper3(it.Get3());
                        ObjPrinter.PrintNoFlush(obj1, writer);
                        writer.Write(", ");
                        ObjPrinter.PrintNoFlush(obj2, writer);
                        writer.Write(", ");
                        ObjPrinter.PrintNoFlush(obj3, writer);
                        written++;
                        writer.Write(written < count || count == 1 ? ";\n" : "\n");
                        it.Next();
                    }
                }
                Debug.Assert(written == count);

                writer.Write(baseWs);
            }

            writer.Write(writeSeparator ? "],\n" : "]\n");
        }
Exemplo n.º 7
0
 public Iter123(Sym12TernaryTable table) : base(table, 0)
 {
     end = table.Capacity();
     while (table.Arg2OrEmptyMarker(index) == Empty)
     {
         index++;
         if (index == end)
         {
             index = Empty;
             break;
         }
     }
 }
Exemplo n.º 8
0
        //////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////////

        public static Obj Copy(Sym12TernaryTable[] tables)
        {
            int count = 0;

            for (int i = 0; i < tables.Length; i++)
            {
                count += tables[i].count;
            }

            if (count == 0)
            {
                return(EmptyRelObj.singleton);
            }

            Obj[] col1 = new Obj[count];
            Obj[] col2 = new Obj[count];
            Obj[] col3 = new Obj[count];

            int next = 0;

            for (int iT = 0; iT < tables.Length; iT++)
            {
                Sym12TernaryTable table    = tables[iT];
                SurrObjMapper     mapper12 = table.mapper12;
                SurrObjMapper     mapper3  = table.mapper3;
                int size = table.Capacity();
                for (int iS = 0; iS < size; iS++)
                {
                    int arg2 = table.Arg2OrEmptyMarker(iS);
                    if (arg2 != Empty)
                    {
                        col1[next] = mapper12(table.Arg1OrNext(iS));
                        col2[next] = mapper12(arg2);
                        col3[next] = mapper3(table.Arg3(iS));
                        next++;
                    }
                }
            }
            Debug.Assert(next == count);

            return(Builder.CreateTernRel(col1, col2, col3, count));
        }
Exemplo n.º 9
0
 public IterPair(Sym12TernaryTable table, Iter iter1, Iter iter2) : base(table)
 {
     Debug.Assert(!iter1.Done() & !iter2.Done());
     this.iter1 = iter1;
     this.iter2 = iter2;
 }
Exemplo n.º 10
0
 protected Iter(Sym12TernaryTable table)
 {
     this.table = table;
 }
Exemplo n.º 11
0
 protected IdxIter(Sym12TernaryTable table, int index) : base(table)
 {
     this.index = index;
 }