Example #1
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 #2
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 #3
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 #4
0
        /// <summary>
        /// Calculates the free space in <see cref="Frame"/>
        /// </summary>
        /// <returns></returns>
        private int CalculateFreeSpace()
        {
            int freeSpace = 63 * this.ConvertSTMLevel(this.Level);

            for (int i = 0; i < Content.Count; i++)
            {
                if (VirtualContainer.isVirtualContainer(Content[i]))
                {
                    VirtualContainer VC = (VirtualContainer)Content[i];
                    freeSpace -= VC.CalculateSpace();
                }
            }
            return(freeSpace);
        }
Example #5
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 #6
0
        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public override string ToString()
        {
            string returnString = string.Empty;

            returnString += this.Level.ToString() + "|";
            if (this.Msoh != null)
            {
                returnString += "MSOH|";
            }
            else
            {
                returnString += "null|";
            }
            if (this.Rsoh != null)
            {
                returnString += "RSOH";
            }
            else
            {
                returnString += "null";
            }
            foreach (IContent item in this.Content)
            {
                if (item != null && VirtualContainer.isVirtualContainer(item))
                {
                    returnString += "|" + ((VirtualContainer)item).Level.ToString();
                    returnString += "+POH";
                    string VCcontent = string.Empty;
                    foreach (var innerItem in ((VirtualContainer)item).Content)
                    {
                        if (innerItem != null && VirtualContainer.isVirtualContainer(innerItem))
                        {
                            VCcontent += ((VirtualContainer)innerItem).ToString();
                        }
                    }
                    if (VCcontent != string.Empty)
                    {
                        returnString += "[" + VCcontent + "]";
                    }
                }
            }
            return(returnString.Remove(returnString.LastIndexOf('|'), 1));
        }
Example #7
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 #8
0
        /// <summary>
        /// Calculates the space used in the container.
        /// If VC have only content it takes all free space
        /// </summary>
        /// <returns></returns>
        public int CalculateSpace()
        {
            int usedSpace = 0;

            switch (this.Level)
            {
            case VirtualContainerLevel.VC12:
                usedSpace = 1;
                break;

            case VirtualContainerLevel.VC21:
                usedSpace = 3;
                break;

            case VirtualContainerLevel.VC32:
                usedSpace = 21;
                break;

            case VirtualContainerLevel.VC4:
                foreach (var item in this.Content)
                {
                    if (VirtualContainer.isVirtualContainer(item))     //VC4 have other VC
                    {
                        usedSpace += ((VirtualContainer)item).CalculateSpace();
                    }
                    else if (Container.isContainer(item))     //VC4 is full of data
                    {
                        usedSpace = 63;
                        break;
                    }
                }
                break;

            case VirtualContainerLevel.UNDEF:
                break;

            default:
                break;
            }
            return(usedSpace);
        }