private void Partition(CISymbolDictionary aDictionary)
 {
     foreach (CISymbol crashItemSymbol in aDictionary)
     {
         bool serializable = CXmlSymbol.IsSerializable(crashItemSymbol);
         if (serializable)
         {
             Symbol           symbol           = crashItemSymbol.Symbol;
             SymbolCollection symbolCollection = symbol.Collection;
             //
             string        collectionName = symbolCollection.FileName.FileNameInHost.ToUpper();
             CXmlSymbolSet set            = null;
             //
             if (!iSets.ContainsKey(collectionName))
             {
                 set = new CXmlSymbolSet(symbolCollection);
                 iSets.Add(collectionName, set);
             }
             else
             {
                 set = iSets[collectionName];
             }
             //
             set.Add(crashItemSymbol);
         }
     }
 }
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            // First partition the symbols into sets
            CISymbolDictionary globalSymbols = aParameters.Container.Symbols;

            Partition(globalSymbols);

            // Also get the dictionaries from the individual processes
            CIElementList <CIProcess> processes = aParameters.Container.ChildrenByType <CIProcess>();

            foreach (CIProcess process in processes)
            {
                CISymbolDictionary processSymbols = process.Symbols;
                Partition(processSymbols);
            }

            // Then serialize the sets
            foreach (KeyValuePair <string, CXmlSymbolSet> kvp in iSets)
            {
                CXmlSymbolSet set = kvp.Value;
                set.XmlSerialize(aParameters);
            }
        }