示例#1
0
        internal static void SortEntireFile(Dictionary <string, Dictionary <string, HashSet <string> > > sortableProperties, XmlWriter writer, string pathname)
        {
            var readerSettings = new XmlReaderSettings {
                IgnoreWhitespace = true
            };

            // Step 2: Sort and rewrite file.
            using (var fastSplitter = new FastXmlElementSplitter(pathname))
            {
                var  sorter = new BigDataSorter();
                bool foundOptionalFirstElement;
                foreach (var record in fastSplitter.GetSecondLevelElementStrings(OptionalFirstElementTag, StartTag, out foundOptionalFirstElement))
                {
                    if (foundOptionalFirstElement)
                    {
                        // Step 2A: Write out custom property declaration(s).
                        WriteElement(writer, SortCustomPropertiesRecord(record));
                        foundOptionalFirstElement = false;
                    }
                    else
                    {
                        // Step 2B: Sort main CmObject record.
                        var sortedMainObject = SortMainElement(sortableProperties, record);
                        sorter.Add(sortedMainObject.Attribute("guid").Value, Utf8.GetBytes(sortedMainObject.ToString()));
                    }
                }
                sorter.WriteResults(val => WriteElement(writer, readerSettings, val));
            }
        }
示例#2
0
        public void EmptyList()
        {
            var output = new List <byte[]>();
            var sorter = new BigDataSorter();

            sorter.WriteResults(val => output.Add(val));
            Assert.That(output, Has.Count.EqualTo(0));
        }
示例#3
0
        public void TenItems()
        {
            var output = new List <byte[]>();
            var sorter = new BigDataSorter();
            var input  = MakeInput(10);

            ShuffleInputs(sorter, input);
            sorter.WriteResults(val => output.Add(val));
            VerifyOutput(output, input);
        }
示例#4
0
        public void OneItem()
        {
            var output = new List <byte[]>();
            var sorter = new BigDataSorter();

            sorter.Add("a", new byte[] { 1 });
            sorter.WriteResults(val => output.Add(val));
            Assert.That(output, Has.Count.EqualTo(1));
            VerifyByteArray(output[0], new byte[] { 1 });
        }
示例#5
0
        public void MultiFileSort()
        {
            var output      = new List <byte[]>();
            var sorter      = new BigDataSorter();
            var input       = MakeInput(100);
            var totalLength = input.Sum(kvp => kvp.Value.Length);

            sorter.MaxBytes = totalLength / 5;             // force it to use about 5 files.
            ShuffleInputs(sorter, input);
            sorter.WriteResults(val => output.Add(val));
            VerifyOutput(output, input);
        }
示例#6
0
 /// <summary>
 /// Insert the items in the input into the sorter in a mixed-up order.
 /// </summary>
 /// <param name="sorter"></param>
 /// <param name="input"></param>
 private void ShuffleInputs(BigDataSorter sorter, SortedDictionary <string, byte[]> input)
 {
     // Insert all the even items in oder.
     for (int i = 0; i < input.Count / 2; i++)
     {
         sorter.Add(input.ElementAt(i * 2).Key, input.ElementAt(i * 2).Value);
     }
     // And all the odd items in reverse order.
     for (int i = input.Count - 1; i > 0; i--)
     {
         if (i % 2 == 1)
         {
             sorter.Add(input.ElementAt(i).Key, input.ElementAt(i).Value);
         }
     }
 }