/// <summary>
        ///     Initializes the Historical data package
        /// </summary>
        /// <param name="filePath">The path to the file to load</param>
        /// <param name="factory">THe factory used to create instances of the loaded file</param>
        public static History Load(string filePath, Generated.Factory factory)
        {
            History retVal = null;

            acceptor.setFactory(factory);
            if (File.Exists(filePath))
            {
                // Do not rely on XmlBFileContext since it does not care about encoding.
                // File encoding is UTF-8
                XmlBStringContext ctxt;
                using (StreamReader file = new StreamReader(filePath))
                {
                    ctxt = new XmlBStringContext(file.ReadToEnd());
                    file.Close();
                }

                try
                {
                    retVal = acceptor.accept(ctxt) as History;
                }
                catch (XmlBException excp)
                {
                    Log.Error(ctxt.errorMessage());
                }
            }

            return retVal;
        }
        private void performTest(XmlBBaseAcceptor acceptor,
                                 String fname,
                                 int count,
                                 int inMem)
        {
            XmlBStringContext ctxt = new XmlBStringContext();
            String            b;

            long start = 0; //System.currentTimeMillis();

            if (!ctxt.readFile(fname))
            {
                System.Console.WriteLine("Could not open file : " +
                                         fname);
                return;
            }
            IXmlBBase[] el = new IXmlBBase[inMem];
            try
            {
                int ptr = 0;
                for (int i = 0; i < count; i++)
                {
                    if (i % 1000 == 0)
                    {
                        System.Console.WriteLine("" + (i) + "/" + count);
                    }
                    el[ptr] = acceptor.genericAccept(ctxt);
                    ctxt.setPtr(0);
                    ptr++;
                    if (ptr >= el.Length)
                    {
                        ptr = 0;
                    }
                }
                long stop = 0;//System.currentTimeMillis();
                System.Console.WriteLine("Done parsing.    Total time: " +
                                         (stop - start) + " millisecs   Time/instance: " +
                                         (stop - start) / count);
                // System.Console.WriteLine (el[0].toString());
                start = 0;//System.currentTimeMillis();
                for (int i = 0; i < count; i++)
                {
                    if (i % 1000 == 0)
                    {
                        System.Console.WriteLine("" + (i) + "/" + count);
                    }
                    b = el[0].ToString();
                }
                stop = 0;//System.currentTimeMillis();
                System.Console.WriteLine("Done unparsing.  Total time: " +
                                         (stop - start) + " millisecs   Time/instance: " +
                                         (stop - start) / count);
            }
            catch (Exception)
            {
                ctxt.dumpError();
            }
        }
        private void performTest(XmlBBaseAcceptor acceptor,
            String fname,
            int count,
            int inMem)
        {
            XmlBStringContext ctxt = new XmlBStringContext();
            String b;

            long start = 0; //System.currentTimeMillis();

            if (!ctxt.readFile(fname))
            {
                System.Console.WriteLine("Could not open file : " +
                           fname);
                return;
            }
            IXmlBBase[] el = new IXmlBBase[inMem];
            try
            {
                int ptr = 0;
                for (int i = 0; i < count; i++)
                {
                    if (i % 1000 == 0)
                        System.Console.WriteLine("" + (i) + "/" + count);
                    el[ptr] = acceptor.genericAccept(ctxt);
                    ctxt.setPtr(0);
                    ptr++;
                    if (ptr >= el.Length)
                        ptr = 0;
                }
                long stop = 0;//System.currentTimeMillis();
                System.Console.WriteLine("Done parsing.    Total time: " +
                           (stop - start) + " millisecs   Time/instance: " +
                           (stop - start) / count);
                // System.Console.WriteLine (el[0].toString());
                start = 0;//System.currentTimeMillis();
                for (int i = 0; i < count; i++)
                {
                    if (i % 1000 == 0)
                        System.Console.WriteLine("" + (i) + "/" + count);
                    b = el[0].ToString();
                }
                stop = 0;//System.currentTimeMillis();
                System.Console.WriteLine("Done unparsing.  Total time: " +
                           (stop - start) + " millisecs   Time/instance: " +
                           (stop - start) / count);
            }
            catch (Exception)
            {
                ctxt.dumpError();
            }
        }