public byte[] Persist(IKdbTree tree, byte[] hashOfHeader) { var metaElement = tree.Document.Descendants("Meta").FirstOrDefault(); if (metaElement == null) { metaElement = new XElement("Meta", new XElement("Generator", "MetroPass")); tree.Document.Add(metaElement); } var headerHashElement = metaElement.Elements("HeaderHash").FirstOrDefault(); if (headerHashElement == null) { headerHashElement = new XElement("HeaderHash"); metaElement.Add(headerHashElement); } headerHashElement.Value = Convert.ToBase64String(hashOfHeader); var root = tree.Document.Descendants("Root").First(); EncodeXml(root); MemoryStream ms = new MemoryStream(); using (XmlWriter xw = XmlWriter.Create(ms)) { tree.Document.WriteTo(xw); } return ms.ToArray() ; }
public IKdbWriter CreateWriter(IKdbTree tree) { if (tree is Kdb4Tree) { return new Kdb4Writer(new Kdb4HeaderWriter(), _databaseEncryptor, _keyTransformer, _hasher, _gzipFactory); } else { throw new NotSupportedException(); } }