Example #1
0
        /// <summary>
        /// Gets the virtual container.
        /// </summary>
        /// <param name="level">The level of Virtual Container</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        public IContent GetVirtualContainer(VirtualContainerLevel level, int index)
        {
            IContent returnContent = null;

            if (level == VirtualContainerLevel.VC4)
            {
                if (this.Content.Count >= index + 1)
                {
                    returnContent = this.Content[index];
                }
            }
            else
            {
                int higherIndex = GetHigherContainerIndex(level, index);
                if (this.Content.Count >= higherIndex + 1)
                {
                    returnContent = this.Content[higherIndex];
                    if (VirtualContainer.isVirtualContainer(returnContent))
                    {
                        returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, index); //Get specific virtual container lower level
                    }
                }
            }
            return(returnContent);
        }
Example #2
0
        /// <summary>
        /// Gets the IContent from VirtualContainer at the index.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        public IContent GetVirtualContainerAtIndex(VirtualContainerLevel level, int index)
        {
            IContent returnValue;

            returnValue = this.Content[GetContainerIndex(level, index)];
            return(returnValue);
        }
Example #3
0
        /// <summary>
        /// Gets the index of the higher level container.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private int GetHigherContainerIndex(VirtualContainerLevel level, int index)
        {
            int returnIndex = -1;

            switch (level)
            {
            case VirtualContainerLevel.VC12:
                returnIndex = index / 63;
                break;

            case VirtualContainerLevel.VC21:
                returnIndex = index / 21;
                break;

            case VirtualContainerLevel.VC32:
                returnIndex = index / 3;
                break;

            case VirtualContainerLevel.VC4:
                returnIndex = index;
                break;

            case VirtualContainerLevel.UNDEF:
                break;
            }
            return(returnIndex);
        }
Example #4
0
        /// <summary>
        /// Gets the virtual container.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="hiIndex">Index of the hi.</param>
        /// <param name="lowIndex">Index of the low.</param>
        /// <returns></returns>
        public IContent GetVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex)
        {
            IContent returnContent = null;

            if (level == VirtualContainerLevel.VC4)
            {
                if (this.Content.Count >= hiIndex + 1)
                {
                    returnContent = this.Content[hiIndex];
                }
            }
            else
            {
                if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
                {
                    int lowerIndex = (int)lowIndex;
                    returnContent = this.Content[hiIndex];
                    if (VirtualContainer.isVirtualContainer(returnContent))
                    {
                        returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, lowerIndex); //Get specific virtual container lower level
                    }
                }
            }
            return(returnContent);
        }
Example #5
0
 public StreamData(int port, StmLevel stm, VirtualContainerLevel vcLevel, int hpo, int? lpo)
 {
     Port = port;
     Stm = stm;
     VcLevel = vcLevel;
     HigherPath = hpo;
     LowerPath = lpo;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="VirtualContainer" /> class.
 /// </summary>
 /// <param name="level">The level.</param>
 public VirtualContainer(VirtualContainerLevel level)
 {
     this.Level = level;
     this.Type = ContentType.VICONTAINER;
     this.POH = new POH();
     this.Pointer = string.Empty;
     this.Content = this.GenerateContentList();
 }
Example #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VirtualContainer" /> class.
 /// </summary>
 /// <param name="level">The level.</param>
 public VirtualContainer(VirtualContainerLevel level)
 {
     this.Level   = level;
     this.Type    = ContentType.VICONTAINER;
     this.POH     = new POH();
     this.Pointer = string.Empty;
     this.Content = this.GenerateContentList();
 }
Example #8
0
        /// <summary>
        /// Gets the index of the container. This convert user index for Frame index.
        /// VC12 has user index multiplied by 1
        /// VC2 has user index multiplied by 3
        /// VC3 has user index multiplied by 21
        /// VC4 has user index multiplied by 63
        /// </summary>
        /// <param name="level">The level of Virtual Container</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private int GetContainerIndex(VirtualContainerLevel level, int index)
        {
            int counter     = 0;
            int returnValue = -1;

            switch (level)
            {
            case VirtualContainerLevel.VC12:
                for (int i = 0; i < Content.Count; i++)
                {
                    if (counter == index)
                    {
                        returnValue = i;
                    }
                    counter++;
                }
                break;

            case VirtualContainerLevel.VC21:
                for (int i = 0; i < Content.Count; i += 3)
                {
                    if (counter == index)
                    {
                        returnValue = i;
                    }
                    counter++;
                }
                break;

            case VirtualContainerLevel.VC32:
                for (int i = 0; i < Content.Count; i += 21)
                {
                    if (counter == index)
                    {
                        returnValue = i;
                    }
                    counter++;
                }
                break;

            case VirtualContainerLevel.VC4:
                for (int i = 0; i < Content.Count; i += 63)
                {
                    if (counter == index)
                    {
                        returnValue = i;
                    }
                    counter++;
                }
                break;

            case VirtualContainerLevel.UNDEF:
                break;
            }
            return(returnValue);
        }
Example #9
0
 public ForwardingRecord(int inputPort, int outputPort, VirtualContainerLevel containerLevel, int vcNumberIn, int vcNumberOut, int hPathIn, int hPathOut)
 {
     OutputPort     = outputPort;
     InputPort      = inputPort;
     ContainerLevel = containerLevel;
     VcNumberIn     = vcNumberIn;
     VcNumberOut    = vcNumberOut;
     InputPort      = inputPort;
     HigherPathIn   = hPathIn;
     HigherPathOut  = hPathOut;
 }
Example #10
0
        /// <summary>
        /// Tests adding the container to frame space.
        /// Check if Virtual Container have TU-space for itself
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        public bool TryAddContainer(VirtualContainerLevel level, int index)
        {
            bool testUp   = false;
            bool testDown = false;

            switch (level)
            {
            case VirtualContainerLevel.VC12:
                if (this.CheckContainerUp(level, index))
                {
                    testUp = true;
                }
                testDown = true;
                break;

            case VirtualContainerLevel.VC21:
                if (this.CheckContainerUp(level, index))
                {
                    testUp = true;
                }
                if (this.CheckContainerDown(level, index))
                {
                    testDown = true;
                }
                break;

            case VirtualContainerLevel.VC32:
                if (this.CheckContainerUp(level, index))
                {
                    testUp = true;
                }
                if (this.CheckContainerDown(level, index))
                {
                    testDown = true;
                }
                break;

            case VirtualContainerLevel.VC4:
                if (this.CheckContainerDown(level, index))
                {
                    testDown = true;
                }
                testUp = true;
                break;
            }
            if (testUp && testDown)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #11
0
        private StreamData CreateRecord(List <string> literalRecord)
        {
            int outPort    = int.Parse(literalRecord[0]);
            int?lowerPath  = literalRecord[4].Equals("") ? null : (int?)int.Parse(literalRecord[4]);
            int higherPath = int.Parse(literalRecord[3]);

            VirtualContainerLevel level = VirtualContainerLevelExt.GetContainer(literalRecord[2]);
            StmLevel stm = StmLevelExt.GetContainer(literalRecord[1]);

            StreamData record = new StreamData(outPort, stm, level, higherPath, lowerPath);

            return(record);
        }
Example #12
0
 /// <summary>
 /// Sets the virtual container. This overwrite the <see cref="Content" /> list member.
 /// Content must by VirtualContainer!
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="hiIndex">Index of the higher level virtual container (VC-4).</param>
 /// <param name="lowIndex">Index of the lower level virtual container.</param>
 /// <param name="content">The content. Virtual Container</param>
 /// <returns>
 /// True - success, False - fail
 /// </returns>
 public bool SetVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex, IContent content)
 {
     if (VirtualContainer.isVirtualContainer(content))
     {
         VirtualContainer contentVC = (VirtualContainer)content;
         if (level == contentVC.Level && this.CalculateFreeSpace() >= Frame.ContainerSpaceConverter(level))
         {
             if (level == VirtualContainerLevel.VC4)
             {
                 if (this.Content.Count >= hiIndex + 1)
                 {
                     this.Content[hiIndex] = content;
                     return(true);
                 }
                 else
                 {
                     return(false);
                 }
             }
             else
             {
                 //int higherIndex = GetHigherContainerIndex(level, index);
                 if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
                 {
                     int      lowerIndex           = (int)lowIndex;
                     IContent tempVirtualContainer = this.Content[hiIndex];
                     if (VirtualContainer.isVirtualContainer(tempVirtualContainer) && ((VirtualContainer)tempVirtualContainer).TryAddContainer(level, lowerIndex))
                     {
                         ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content);
                     }
                     else if (tempVirtualContainer == null) //Frame does not have VC4 to keep lower virtual container levels
                     {
                         this.Content[hiIndex] = new VirtualContainer(VirtualContainerLevel.VC4);
                         tempVirtualContainer  = this.Content[hiIndex];
                         ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content);
                     }
                     return(true);
                 }
                 else
                 {
                     return(false);
                 }
             }
         }
         else
         {
             return(false);
         }
     }
     return(false);
 }
Example #13
0
 /// <summary>
 /// Clears the virtual container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The number.</param>
 /// <returns></returns>
 public bool ClearVirtualContainer(VirtualContainerLevel level, int index)
 {
     if (level == VirtualContainerLevel.VC4)
     {
         this.Content[index] = null;
     }
     else
     {
         IContent tempContainer = this.Content[GetHigherContainerIndex(level, index)];
         if (VirtualContainer.isVirtualContainer(tempContainer))
         {
             ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, index, null); //Get specific virtual container lower level
         }
     }
     return(true);
 }
Example #14
0
        private List <ForwardingRecord> createRecord(List <string> literalRecord)
        {
            int port1  = int.Parse(literalRecord[0]);
            int port2  = int.Parse(literalRecord[1]);
            int lPath1 = int.Parse(literalRecord[3].Equals("") ? "-1" : literalRecord[3]);
            int lPath2 = int.Parse(literalRecord[5].Equals("") ? "-1" : literalRecord[5]);
            int hPath1 = int.Parse(literalRecord[4]);
            int hPath2 = int.Parse(literalRecord[6]);
            VirtualContainerLevel level = VirtualContainerLevelExt.GetContainer(literalRecord[2]);
            //StmLevel stm = StmLevelExt.GetContainer(literalRecord[5]);
            List <ForwardingRecord> forwardingRecords = new List <ForwardingRecord>();

            forwardingRecords.Add(new ForwardingRecord(port1, port2, level, lPath1, lPath2, hPath1, hPath2));
            forwardingRecords.Add(new ForwardingRecord(port2, port1, level, lPath2, lPath1, hPath2, hPath1));

            return(forwardingRecords);
        }
Example #15
0
 /// <summary>
 /// Clears the virtual container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="hiIndex">The number.</param>
 /// <param name="lowIndex">The number.</param>
 /// <returns></returns>
 public bool ClearVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex)
 {
     if (level == VirtualContainerLevel.VC4)
     {
         this.Content[hiIndex] = null;
     }
     else
     {
         if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
         {
             int      lowerIndex    = (int)lowIndex;
             IContent tempContainer = this.Content[hiIndex];
             if (VirtualContainer.isVirtualContainer(tempContainer))
             {
                 ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, lowerIndex, null); //Get specific virtual container lower level
             }
         }
     }
     return(true);
 }
Example #16
0
        /// <summary>
        /// Convert <see cref="ContainerLevel"/> enum to space occupied in <see cref="Frame"/>
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        public static int ContainerSpaceConverter(VirtualContainerLevel value)
        {
            switch (value)
            {
            case VirtualContainerLevel.VC12:
                return(1);

            case VirtualContainerLevel.VC21:
                return(3);

            case VirtualContainerLevel.VC32:
                return(21);

            case VirtualContainerLevel.VC4:
                return(63);

            default:
                return(63);
            }
        }
Example #17
0
        /// <summary>
        /// Gets the relative index for virtual container index position.
        /// </summary>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private int GetRelativeIndex(VirtualContainerLevel level, int index)
        {
            int returnIndex = -1;

            switch (level)
            {
            case VirtualContainerLevel.VC12:
                returnIndex = index - 21 * (GetHigherContainerIndex(level, index));
                break;

            case VirtualContainerLevel.VC21:
                returnIndex = index - 7 * (GetHigherContainerIndex(level, index));
                break;

            case VirtualContainerLevel.VC32:
                returnIndex = index - 3 * (GetHigherContainerIndex(level, index));
                break;

            default:
                returnIndex = index;
                break;
            }
            return(returnIndex);
        }
 /// <summary>
 /// Checks the lower virtual container exists and has lower virtual containers.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 private bool CheckContainerDown(VirtualContainerLevel level, int index)
 {
     bool returnVal = false;
     int contentPosition = GetContainerIndex(level, index);
     int childPosition;
     if (contentPosition == -1)
     {
         return false;
     }
     switch (level)
     {
         case VirtualContainerLevel.VC12:
             if (this.Content[index] != null && ((VirtualContainer)this.Content[index]).Level == VirtualContainerLevel.VC12)
                 returnVal = false;
             else returnVal = true;
             break;
         case VirtualContainerLevel.VC21:
             childPosition = index * 3;
             for (int i = childPosition; i < childPosition + 3; i++)
             {
                 if (CheckContainerDown(VirtualContainerLevel.VC12, i))
                 {
                     if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC21)
                         returnVal = false;
                     else returnVal = true;
                 }
                 else
                 {
                     returnVal = false;
                     break;
                 }
             }
             break;
         case VirtualContainerLevel.VC32:
             childPosition = index * 7;
             for (int i = childPosition; i < childPosition + 7; i++)
             {
                 if (CheckContainerDown(VirtualContainerLevel.VC21, i))
                 {
                     if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC32)
                         returnVal = false;
                     else returnVal = true;
                 }
                 else
                 {
                     returnVal = false;
                     break;
                 }
             }
             break;
         case VirtualContainerLevel.VC4:
             childPosition = index * 3;
             for (int i = childPosition; i < childPosition + 3; i++)
             {
                 if (CheckContainerDown(VirtualContainerLevel.VC32, i))
                 {
                     if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC4)
                         returnVal = false;
                     else returnVal = true;
                 }
                 else
                 {
                     returnVal = false;
                     break;
                 }
             }
             break;
     }
     return returnVal;
 }
 /// <summary>
 /// Checks if upper virtual container exists and has higher level.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 private bool CheckContainerUp(VirtualContainerLevel level, int index)
 {
     bool returnVal = false;
     int contentPosition = contentPosition = GetContainerIndex(level, index);
     int parentPostion;
     if (contentPosition == -1)
     {
         return false;
     }
     switch (level)
     {
         case VirtualContainerLevel.VC12:
             parentPostion = index / 3;
             if (CheckContainerUp(VirtualContainerLevel.VC21, parentPostion))
             {
                 if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC12)
                     returnVal = false;
                 else returnVal = true;
             }
             else returnVal = false;
             break;
         case VirtualContainerLevel.VC21:
             parentPostion = index / 7;
             if (CheckContainerUp(VirtualContainerLevel.VC32, parentPostion))
             {
                 if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC21)
                     returnVal = false;
                 else returnVal = true;
             }
             else returnVal = false;
             break;
         case VirtualContainerLevel.VC32:
             parentPostion = index / 3;
             if (CheckContainerUp(VirtualContainerLevel.VC4, parentPostion))
             {
                 if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC32)
                     returnVal = false;
                 else returnVal = true;
             }
             else returnVal = false;
             break;
         case VirtualContainerLevel.VC4:
             if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC4)
                 returnVal = false;
             else returnVal = true;
             break;
     }
     return returnVal;
 }
Example #20
0
        /// <summary>
        /// Checks if upper virtual container exists and has higher level.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private bool CheckContainerUp(VirtualContainerLevel level, int index)
        {
            bool returnVal       = false;
            int  contentPosition = contentPosition = GetContainerIndex(level, index);
            int  parentPostion;

            if (contentPosition == -1)
            {
                return(false);
            }
            switch (level)
            {
            case VirtualContainerLevel.VC12:
                parentPostion = index / 3;
                if (CheckContainerUp(VirtualContainerLevel.VC21, parentPostion))
                {
                    if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC12)
                    {
                        returnVal = false;
                    }
                    else
                    {
                        returnVal = true;
                    }
                }
                else
                {
                    returnVal = false;
                }
                break;

            case VirtualContainerLevel.VC21:
                parentPostion = index / 7;
                if (CheckContainerUp(VirtualContainerLevel.VC32, parentPostion))
                {
                    if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC21)
                    {
                        returnVal = false;
                    }
                    else
                    {
                        returnVal = true;
                    }
                }
                else
                {
                    returnVal = false;
                }
                break;

            case VirtualContainerLevel.VC32:
                parentPostion = index / 3;
                if (CheckContainerUp(VirtualContainerLevel.VC4, parentPostion))
                {
                    if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC32)
                    {
                        returnVal = false;
                    }
                    else
                    {
                        returnVal = true;
                    }
                }
                else
                {
                    returnVal = false;
                }
                break;

            case VirtualContainerLevel.VC4:
                if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC4)
                {
                    returnVal = false;
                }
                else
                {
                    returnVal = true;
                }
                break;
            }
            return(returnVal);
        }
 /// <summary>
 /// Tests adding the container to frame space.
 /// Check if Virtual Container have TU-space for itself
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 public bool TryAddContainer(VirtualContainerLevel level, int index)
 {
     bool testUp = false;
     bool testDown = false;
     switch (level)
     {
         case VirtualContainerLevel.VC12:
             if (this.CheckContainerUp(level, index))
                 testUp = true;
             testDown = true;
             break;
         case VirtualContainerLevel.VC21:
             if (this.CheckContainerUp(level, index))
                 testUp = true;
             if (this.CheckContainerDown(level, index))
                 testDown = true;
             break;
         case VirtualContainerLevel.VC32:
             if (this.CheckContainerUp(level, index))
                 testUp = true;
             if (this.CheckContainerDown(level, index))
                 testDown = true;
             break;
         case VirtualContainerLevel.VC4:
             if (this.CheckContainerDown(level, index))
                 testDown = true;
             testUp = true;
             break;
     }
     if (testUp && testDown)
         return true;
     else return false;
 }
 /// <summary>
 /// Gets the IContent from VirtualContainer at the index.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 public IContent GetVirtualContainerAtIndex(VirtualContainerLevel level, int index)
 {
     IContent returnValue;
     returnValue = this.Content[GetContainerIndex(level, index)];
     return returnValue;
 }
 /// <summary>
 /// Sets the content of the content list at index.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <param name="content">The content.</param>
 public void SetVirtualContainerAtIndex(VirtualContainerLevel level, int index, IContent content)
 {
     this.Content[GetContainerIndex(level, index)] = content;
 }
Example #24
0
 /// <summary>
 /// Sets the virtual container. This overwrite the <see cref="Content" /> list member.
 /// Content must by VirtualContainer!
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="hiIndex">Index of the higher level virtual container (VC-4).</param>
 /// <param name="lowIndex">Index of the lower level virtual container.</param>
 /// <param name="content">The content. Virtual Container</param>
 /// <returns>
 /// True - success, False - fail
 /// </returns>
 public bool SetVirtualContainer(VirtualContainerLevel level, int hiIndex, int? lowIndex , IContent content)
 {
     if (VirtualContainer.isVirtualContainer(content))
     {
         VirtualContainer contentVC = (VirtualContainer)content;
         if (level == contentVC.Level && this.CalculateFreeSpace() >= Frame.ContainerSpaceConverter(level))
         {
             if (level == VirtualContainerLevel.VC4)
             {
                 if (this.Content.Count >= hiIndex + 1)
                 {
                     this.Content[hiIndex] = content;
                     return true;
                 }
                 else return false;
             }
             else
             {
                 //int higherIndex = GetHigherContainerIndex(level, index);
                 if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
                 {
                     int lowerIndex = (int)lowIndex;
                     IContent tempVirtualContainer = this.Content[hiIndex];
                     if (VirtualContainer.isVirtualContainer(tempVirtualContainer) && ((VirtualContainer)tempVirtualContainer).TryAddContainer(level, lowerIndex))
                     {
                         ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content);
                     }
                     else if (tempVirtualContainer == null) //Frame does not have VC4 to keep lower virtual container levels
                     {
                         this.Content[hiIndex] = new VirtualContainer(VirtualContainerLevel.VC4);
                         tempVirtualContainer = this.Content[hiIndex];
                         ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content);
                     }
                     return true;
                 }
                 else return false;
             }
         }
         else return false;
     }
     return false;
 }
Example #25
0
 /// <summary>
 /// Gets the virtual container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="hiIndex">Index of the hi.</param>
 /// <param name="lowIndex">Index of the low.</param>
 /// <returns></returns>
 public IContent GetVirtualContainer(VirtualContainerLevel level, int hiIndex, int? lowIndex)
 {
     IContent returnContent = null;
     if (level == VirtualContainerLevel.VC4)
     {
         if (this.Content.Count >= hiIndex + 1)
         {
             returnContent = this.Content[hiIndex];
         }
     }
     else
     {
         if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
         {
             int lowerIndex = (int)lowIndex;
             returnContent = this.Content[hiIndex];
             if (VirtualContainer.isVirtualContainer(returnContent))
             {
                 returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, lowerIndex); //Get specific virtual container lower level
             }
         }
     }
     return returnContent;
 }
Example #26
0
 /// <summary>
 /// Gets the index of the higher level container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 private int GetHigherContainerIndex(VirtualContainerLevel level, int index)
 {
     int returnIndex = -1;
     switch (level)
     {
         case VirtualContainerLevel.VC12:
             returnIndex = index / 63;
             break;
         case VirtualContainerLevel.VC21:
             returnIndex = index / 21;
             break;
         case VirtualContainerLevel.VC32:
             returnIndex = index / 3;
             break;
         case VirtualContainerLevel.VC4:
             returnIndex = index;
             break;
         case VirtualContainerLevel.UNDEF:
             break;
     }
     return returnIndex;
 }
Example #27
0
        /// <summary>
        /// Checks the lower virtual container exists and has lower virtual containers.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private bool CheckContainerDown(VirtualContainerLevel level, int index)
        {
            bool returnVal       = false;
            int  contentPosition = GetContainerIndex(level, index);
            int  childPosition;

            if (contentPosition == -1)
            {
                return(false);
            }
            switch (level)
            {
            case VirtualContainerLevel.VC12:
                if (this.Content[index] != null && ((VirtualContainer)this.Content[index]).Level == VirtualContainerLevel.VC12)
                {
                    returnVal = false;
                }
                else
                {
                    returnVal = true;
                }
                break;

            case VirtualContainerLevel.VC21:
                childPosition = index * 3;
                for (int i = childPosition; i < childPosition + 3; i++)
                {
                    if (CheckContainerDown(VirtualContainerLevel.VC12, i))
                    {
                        if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC21)
                        {
                            returnVal = false;
                        }
                        else
                        {
                            returnVal = true;
                        }
                    }
                    else
                    {
                        returnVal = false;
                        break;
                    }
                }
                break;

            case VirtualContainerLevel.VC32:
                childPosition = index * 7;
                for (int i = childPosition; i < childPosition + 7; i++)
                {
                    if (CheckContainerDown(VirtualContainerLevel.VC21, i))
                    {
                        if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC32)
                        {
                            returnVal = false;
                        }
                        else
                        {
                            returnVal = true;
                        }
                    }
                    else
                    {
                        returnVal = false;
                        break;
                    }
                }
                break;

            case VirtualContainerLevel.VC4:
                childPosition = index * 3;
                for (int i = childPosition; i < childPosition + 3; i++)
                {
                    if (CheckContainerDown(VirtualContainerLevel.VC32, i))
                    {
                        if (this.Content[contentPosition] != null && ((VirtualContainer)this.Content[contentPosition]).Level == VirtualContainerLevel.VC4)
                        {
                            returnVal = false;
                        }
                        else
                        {
                            returnVal = true;
                        }
                    }
                    else
                    {
                        returnVal = false;
                        break;
                    }
                }
                break;
            }
            return(returnVal);
        }
Example #28
0
 /// <summary>
 /// Gets the virtual container.
 /// </summary>
 /// <param name="level">The level of Virtual Container</param>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 public IContent GetVirtualContainer(VirtualContainerLevel level, int index)
 {
     IContent returnContent = null;
     if (level == VirtualContainerLevel.VC4)
     {
         if (this.Content.Count >= index + 1)
         {
             returnContent = this.Content[index];
         }
     }
     else
     {
         int higherIndex = GetHigherContainerIndex(level, index);
         if (this.Content.Count >= higherIndex + 1)
         {
             returnContent = this.Content[higherIndex];
             if (VirtualContainer.isVirtualContainer(returnContent))
             {
                 returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, index); //Get specific virtual container lower level
             }
         }
     }
     return returnContent;
 }
        /// <summary>
        /// Gets the index of the container. This convert user index for Frame index.
        /// VC12 has user index multiplied by 1
        /// VC2 has user index multiplied by 3
        /// VC3 has user index multiplied by 21
        /// VC4 has user index multiplied by 63
        /// </summary>
        /// <param name="level">The level of Virtual Container</param>
        /// <param name="index">The index.</param>
        /// <returns></returns>
        private int GetContainerIndex(VirtualContainerLevel level, int index)
        {
            int counter = 0;
            int returnValue = -1;
            switch (level)
            {
                case VirtualContainerLevel.VC12:
                    for (int i = 0; i < Content.Count; i++)
                    {
                        if (counter == index)
                        {
                            returnValue = i;
                        }
                        counter++;
                    }
                    break;

                case VirtualContainerLevel.VC21:
                    for (int i = 0; i < Content.Count; i += 3)
                    {
                        if (counter == index)
                        {
                            returnValue = i;
                        }
                        counter++;
                    }
                    break;

                case VirtualContainerLevel.VC32:
                    for (int i = 0; i < Content.Count; i += 21)
                    {
                        if (counter == index)
                        {
                            returnValue = i;
                        }
                        counter++;
                    }
                    break;

                case VirtualContainerLevel.VC4:
                    for (int i = 0; i < Content.Count; i += 63)
                    {
                        if (counter == index)
                        {
                            returnValue = i;
                        }
                        counter++;
                    }
                    break;
                case VirtualContainerLevel.UNDEF:
                    break;
            }
            return returnValue;
        }
Example #30
0
 /// <summary>
 /// Gets the relative index for virtual container index position.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <returns></returns>
 private int GetRelativeIndex(VirtualContainerLevel level, int index)
 {
     int returnIndex = -1;
     switch (level)
     {
         case VirtualContainerLevel.VC12:
             returnIndex = index - 21 * (GetHigherContainerIndex(level, index));
             break;
         case VirtualContainerLevel.VC21:
             returnIndex = index - 7 * (GetHigherContainerIndex(level, index));
             break;
         case VirtualContainerLevel.VC32:
             returnIndex = index - 3 * (GetHigherContainerIndex(level, index));
             break;
         default:
             returnIndex = index;
             break;
     }
     return returnIndex;
 }
Example #31
0
 /// <summary>
 /// Convert <see cref="ContainerLevel"/> enum to space occupied in <see cref="Frame"/>
 /// </summary>
 /// <param name="value">The value.</param>
 /// <returns></returns>
 public static int ContainerSpaceConverter(VirtualContainerLevel value)
 {
     switch (value)
     {
         case VirtualContainerLevel.VC12:
             return 1;
         case VirtualContainerLevel.VC21:
             return 3;
         case VirtualContainerLevel.VC32:
             return 21;
         case VirtualContainerLevel.VC4:
             return 63;
         default:
             return 63;
     }
 }
Example #32
0
 /// <summary>
 /// Clears the virtual container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The number.</param>
 /// <returns></returns>
 public bool ClearVirtualContainer(VirtualContainerLevel level, int index)
 {
     if (level == VirtualContainerLevel.VC4)
     {
         this.Content[index] = null;
     }
     else
     {
         IContent tempContainer = this.Content[GetHigherContainerIndex(level, index)];
         if (VirtualContainer.isVirtualContainer(tempContainer))
         {
             ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, index, null); //Get specific virtual container lower level
         }
     }
     return true;
 }
Example #33
0
 /// <summary>
 /// Sets the content of the content list at index.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="index">The index.</param>
 /// <param name="content">The content.</param>
 public void SetVirtualContainerAtIndex(VirtualContainerLevel level, int index, IContent content)
 {
     this.Content[GetContainerIndex(level, index)] = content;
 }
Example #34
0
 /// <summary>
 /// Clears the virtual container.
 /// </summary>
 /// <param name="level">The level.</param>
 /// <param name="hiIndex">The number.</param>
 /// <param name="lowIndex">The number.</param>
 /// <returns></returns>
 public bool ClearVirtualContainer(VirtualContainerLevel level, int hiIndex, int? lowIndex)
 {
     if (level == VirtualContainerLevel.VC4)
     {
         this.Content[hiIndex] = null;
     }
     else
     {
         if (this.Content.Count >= hiIndex + 1 && lowIndex != null)
         {
             int lowerIndex = (int)lowIndex;
             IContent tempContainer = this.Content[hiIndex];
             if (VirtualContainer.isVirtualContainer(tempContainer))
             {
                 ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, lowerIndex, null); //Get specific virtual container lower level
             }
         }
     }
     return true;
 }