Exemple #1
0
 public DataItem Type3Relation(DataItem di, RelationTable rt)
 {
     //<Time, VID, Xway, QID, Day, InTime(DateTime)>
     di.AddCapacity(1);
     object[] keys = { di[1] };
     lock (rt)
     {
         DataRow drow = rt.Find(keys);
         if (drow == null)
         {
             drow = rt.GetRow();
             drow["VID"] = Convert.ToInt32(di[1]);
             drow["Bal"] = 0;
             drow["Time"] = DateTime.Now.Subtract(di.TimeStamp).TotalSeconds;
             rt.Add(drow);
             //Console.WriteLine("We had to make a new balance for a type 3 query");
         }
         di.AddValue(drow["Bal"]);
     }
     return di;
     //<Time, VID, Xway, QID, Day, Bal>
 }
Exemple #2
0
 public DataItem Type2Relation(DataItem di, RelationTable rt)
 {
     //<Time, VID, QID>
     if (!(di is Punctuation))
     {
         object[] keys = { di[1] }; //VID
         int bal, time;
         di.AddCapacity(2);
         lock (rt)
         {
             DataRow drow = rt.Find(keys);
             if (drow == null)
             {
                 drow = rt.GetRow();
                 drow["VID"] = Convert.ToInt32(di[1]);
                 drow["Bal"] = 0;
                 drow["Time"] = DateTime.Now.Subtract(di.TimeStamp).TotalSeconds;
                 rt.Add(drow);
                 //Console.WriteLine("We had to make a new balance for a type 2 query");
             }
             bal = drow["Bal"];
             time = drow["Time"];
         }
         di.AddValue(bal);
         di.AddValue(time);
         return di;
     }
     else
         return di;
     //<Time, VID, QID, Bal, UTime>
 }
Exemple #3
0
 public DataItem Type3MapConvert(DataItem di)
 {
     //<Time, VID, Xway, QID, Day, Bal>
     di.AddCapacity(1);
     di.AddValue(Convert.ToInt32(di[0]) + (int)(DateTime.Now.Subtract(di.TimeStamp).TotalSeconds));
     return di;
     //<Time, VID, Xway, QID, Day, Bal, Emit>
 }
Exemple #4
0
 public DataItem IsDupCheckVID(DataItem di)
 {
     //<Time, VID, Spd, Xway, Lane, Dir, Seg, Pos, WID(List)>
     di.AddCapacity(1);
     if (di is Punctuation)
     {
         Punctuation p = di as Punctuation;
         p.AddValue(new Punctuation.WildcardPattern());
         IsDupTable.Clear();
         return p;
     }
     else
     {
         int VID = (int)di[1];
         if (IsDupTable.Contains(VID))
         {
             di.AddValue((int)1);
         }
         else
         {
             di.AddValue((int)0);
             IsDupTable.Add(VID);
         }
         return di;
     }
     //<Time, VID, Spd, Xway, Lane, Dir, Seg, Pos, WID(List), ?isDup>
 }
Exemple #5
0
 public DataItem FindToll(DataItem di, RelationTable rt)
 {
     //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS>
     di.AddCapacity(2);
     if (di is Punctuation)
     {
         Punctuation p = di as Punctuation;
         p.AddValue(new Punctuation.WildcardPattern());
         p.AddValue(new Punctuation.WildcardPattern());
         return p;
     }
     else
     {
         uint seg = Convert.ToUInt32(di[5]);
         if (Convert.ToUInt32(di[4]) == 0) //find the seg before this one
             seg--;
         else
             seg++;
         object[] keys = { di[1], seg }; //VID
         lock (rt)
         {
             DataRow drow = rt.Find(keys);
             if (drow == null) //there's no toll, we can drop it
             {
                 di.AddValue((int)0);
                 di.AddValue((int)0);
             }
             else
             {
                 di.AddValue(drow["Toll"]);
                 di.AddValue(drow["LAV"]);
                 rt.Drop(drow);
                 //Console.WriteLine("We found a toll");
             }
         }
         return di;
     }
     //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS, Toll, LAV>
 }
Exemple #6
0
 public DataItem ConvertTimeStamp(DataItem di)
 {
     //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS, ...>
     if (!(di is Punctuation))
     {
         di.AddCapacity(1);
         di.AddValue(Convert.ToUInt32(di[0]) + ((DateTime.Now.Subtract(di.TimeStamp)).TotalSeconds));
         return di;
     }
     return di;
     //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS, ...>
 }
Exemple #7
0
 public DataItem AttachStats(DataItem di, RelationTable rt)
 {
     //<Time, VID, Xway, Lane, Dir, Seg, InTime(DateTime), ?isNSS, isAIR>
     di.AddCapacity(2);
     if (!(di is Punctuation))
     {
         try
         {
             object[] keys = { di[5], di[2], di[4] }; //Seg, Xway, Dir
             lock (rt)
             {
                 DataRow drow = rt.Find(keys);
                 if (drow == null)
                 {
                     di.AddValue((uint)0);
                     di.AddValue((uint)0);
                 }
                 else
                 {
                     di.AddValue(drow["LAV"]);
                     di.AddValue(drow["Count"]);
                 }
             }
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
     return di;
     //<Time, VID, Xway, Lane, Dir, Seg, InTime(DateTime), ?isNSS, ?isAIR, LAV, Count>
 }
Exemple #8
0
            public DataItem AccidentInRange(DataItem di, RelationTable rt)
            {
                //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS>
                di.AddCapacity(1);
                if (di is Punctuation)
                {
                    Punctuation p = di as Punctuation;
                    p.AddValue(new Punctuation.WildcardPattern());
                    return p;
                }
                else
                {
                    int Xway = (int)di[2],
                        dir = (int)di[4],
                        seg = (int)di[5];
                    lock (rt)
                    {
                        DataRow[] drows = rt.Find("[Xway] = " + Xway + " AND [Dir] = " + dir);
                        if (drows.Length > 0)
                        {
                            int accseg = (int)drows[0]["Seg"],
                                lbound, hbound;
                            if (dir == 0)//segs are increasing
                            {
                                lbound = accseg - 4;
                                hbound = accseg;
                            }
                            else
                            {
                                lbound = accseg;
                                hbound = accseg + 4;
                            }

                            if (seg <= hbound && seg >= lbound) //between the bounds
                                di.AddValue(accseg);
                            else
                                di.AddValue((int)-1);
                        }
                        else
                            di.AddValue((int)-1);
                    }
                    return di;
                }
                //<Time, VID, Xway, Lane, Dir, Seg, ?isNSS, isAIR>
            }