private MapiFolderPath(MapiFolderPath parentFolderPath, string subFolderName, bool autoDetectRoot)
 {
     if (null == parentFolderPath)
     {
         throw new ArgumentNullException("parentFolderPath");
     }
     if (string.IsNullOrEmpty(subFolderName))
     {
         throw new ArgumentNullException("subFolderName");
     }
     if (autoDetectRoot && parentFolderPath.IsSubtreeRoot)
     {
         if (string.Equals("IPM_SUBTREE", subFolderName))
         {
             this.isNonIpmPath   = false;
             this.levelHierarchy = parentFolderPath.levelHierarchy;
             return;
         }
         if (string.Equals("NON_IPM_SUBTREE", subFolderName))
         {
             this.isNonIpmPath   = true;
             this.levelHierarchy = parentFolderPath.levelHierarchy;
             return;
         }
     }
     this.isNonIpmPath   = parentFolderPath.isNonIpmPath;
     this.levelHierarchy = new string[1 + parentFolderPath.levelHierarchy.Length];
     Array.Copy(parentFolderPath.levelHierarchy, this.levelHierarchy, parentFolderPath.levelHierarchy.Length);
     this.levelHierarchy[this.levelHierarchy.Length - 1] = subFolderName;
 }
        public static MapiFolderPath GenerateFolderPath(string parentFolderName, MapiFolderPath subFolderPath, bool autoDetectRoot)
        {
            MapiFolderPath mapiFolderPath = subFolderPath ?? MapiFolderPath.IpmSubtreeRoot;

            if (!string.IsNullOrEmpty(parentFolderName))
            {
                return(new MapiFolderPath(parentFolderName, mapiFolderPath, autoDetectRoot));
            }
            return(mapiFolderPath);
        }
        private MapiFolderPath(string parentFolderName, MapiFolderPath subFolderPath, bool autoDetectRoot)
        {
            if (string.IsNullOrEmpty(parentFolderName))
            {
                throw new ArgumentNullException("parentFolderName");
            }
            if (null == subFolderPath)
            {
                throw new ArgumentNullException("subFolderPath");
            }
            this.isNonIpmPath = subFolderPath.isNonIpmPath;
            string text = parentFolderName;

            if (autoDetectRoot)
            {
                if ("IPM_SUBTREE".Equals(parentFolderName, StringComparison.OrdinalIgnoreCase))
                {
                    this.isNonIpmPath = false;
                    if (!subFolderPath.isNonIpmPath)
                    {
                        this.levelHierarchy = subFolderPath.levelHierarchy;
                        return;
                    }
                    text = "NON_IPM_SUBTREE";
                }
                else if ("NON_IPM_SUBTREE".Equals(parentFolderName, StringComparison.OrdinalIgnoreCase))
                {
                    this.isNonIpmPath = true;
                    if (!subFolderPath.isNonIpmPath)
                    {
                        this.levelHierarchy = subFolderPath.levelHierarchy;
                        return;
                    }
                    text = "NON_IPM_SUBTREE";
                }
            }
            this.levelHierarchy = new string[1 + subFolderPath.levelHierarchy.Length];
            Array.Copy(subFolderPath.levelHierarchy, 0, this.levelHierarchy, 1, subFolderPath.levelHierarchy.Length);
            this.levelHierarchy[0] = text;
        }
        public bool Equals(MapiFolderPath other)
        {
            if (object.ReferenceEquals(null, other) || (this.isNonIpmPath ^ other.isNonIpmPath) || this.levelHierarchy.Length != other.levelHierarchy.Length)
            {
                return(false);
            }
            if (this.levelHierarchy == other.levelHierarchy)
            {
                return(true);
            }
            int num = 0;

            while (this.levelHierarchy.Length > num)
            {
                if (!this.levelHierarchy[num].Equals(other.levelHierarchy[num], StringComparison.OrdinalIgnoreCase))
                {
                    return(false);
                }
                num++;
            }
            return(true);
        }
 private MapiFolderPath(MapiFolderPath source, int ascendedLevel, bool stopAscendingIfRoot)
 {
     if (0 > ascendedLevel)
     {
         throw new ArgumentException("ascendedLevel");
     }
     if (source.levelHierarchy.Length < ascendedLevel)
     {
         if (!stopAscendingIfRoot)
         {
             throw new ArgumentOutOfRangeException("ascendedLevel");
         }
         ascendedLevel = source.levelHierarchy.Length;
     }
     if (source.IsSubtreeRoot)
     {
         this.isNonIpmPath   = source.isNonIpmPath;
         this.levelHierarchy = source.levelHierarchy;
         return;
     }
     this.isNonIpmPath   = source.isNonIpmPath;
     this.levelHierarchy = new string[source.levelHierarchy.Length - ascendedLevel];
     Array.Copy(source.levelHierarchy, this.levelHierarchy, this.levelHierarchy.Length);
 }
 public LevelHierarchyEnumerator(MapiFolderPath folderPath)
 {
     this.currentIndex   = -1;
     this.levelHierarchy = folderPath.levelHierarchy;
     this.count          = folderPath.levelHierarchy.Length;
 }
 public static MapiFolderPath GenerateFolderPath(string parentFolderName, MapiFolderPath subFolderPath)
 {
     return(MapiFolderPath.GenerateFolderPath(parentFolderName, subFolderPath, true));
 }
 public static MapiFolderPath GenerateFolderPath(MapiFolderPath parentFolerPath, string subFolderName)
 {
     return(MapiFolderPath.GenerateFolderPath(parentFolerPath, subFolderName, true));
 }