public XbelIdentifiedItemHashtable(XbelIdentifiedItemHashtable original)
 {
     innerHash = new Hashtable(original.innerHash);
 }
 internal XbelIdentifiedItemHashtableEnumerator(XbelIdentifiedItemHashtable enumerable)
 {
     innerEnumerator = enumerable.InnerHash.GetEnumerator();
 }
 public XbelIdentifiedItemHashtable Clone()
 {
     XbelIdentifiedItemHashtable clone = new XbelIdentifiedItemHashtable();
     clone.innerHash = (Hashtable) innerHash.Clone();
     return clone;
 }
 public static XbelIdentifiedItemHashtable Synchronized(XbelIdentifiedItemHashtable nonSync)
 {
     XbelIdentifiedItemHashtable sync = new XbelIdentifiedItemHashtable();
     sync.innerHash = Hashtable.Synchronized(nonSync.innerHash);
     return sync;
 }
        private void BuildIdTableForFolder(XbelFolder folder,
            XbelIdentifiedItemHashtable idTable)
        {
            foreach(XbelItem item in folder) {
                if (item is XbelIdentifiedItem) {
                    XbelIdentifiedItem identItem = item as XbelIdentifiedItem;

                    if (identItem.Id != "") {
                        idTable.Add(identItem);
                    }
                }
                if (item is XbelFolder) {
                    BuildIdTableForFolder((item as XbelFolder), idTable);
                }
            }
        }
 /// <summary>
 /// Tell the engine that the next call to IdTable should re-generate the table.
 /// </summary>
 /// <remarks>
 /// Called from <see cref="XbelFolder"/> Add, Insert, Remove, ... and other methods.
 /// </remarks>
 /// <returns>
 /// True if the cache was valid (and so this call was usefull), false otherwise.
 /// </returns>
 public bool InvalidateIdTableCache()
 {
     bool oldValue = idTableCacheIsValid;
     if (idTableCacheIsValid) {
         idTableCacheIsValid = false;
         idTableCache = null;
     }
     return oldValue;
 }