public TrafficPath Get(SideOfRoad side)
 {
     if (side == SideOfRoad.LEFT)
     {
         return(GetLeft());
     }
     else
     {
         return(GetRight());
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Encodes OpenLR SideOfRoad data into a binary SideOfRoad.
        /// </summary>
        /// <param name="sideOfRoad"></param>
        /// <param name="data"></param>
        /// <param name="startIndex"></param>
        /// <param name="byteIndex"></param>
        public static void Encode(SideOfRoad sideOfRoad, byte[] data, int startIndex, int byteIndex)
        {
            if (byteIndex > 6)
            {
                throw new ArgumentOutOfRangeException("byteIndex", "byteIndex has to be a value in the range of [0-6].");
            }

            int value = 0;

            switch (sideOfRoad)
            {
            case SideOfRoad.OnOrAbove:
                value = 0;
                break;

            case SideOfRoad.Right:
                value = 1;
                break;

            case SideOfRoad.Left:
                value = 2;
                break;

            case SideOfRoad.Both:
                value = 3;
                break;
            }

            byte target = data[startIndex];

            byte mask = (byte)(3 << (6 - byteIndex));

            target = (byte)(target & ~mask);           // set to zero.
            value  = (byte)(value << (6 - byteIndex)); // move value to correct position.
            target = (byte)(target | value);           // add to byte.

            data[startIndex] = target;
        }