/// <summary> /// Gets a list of all entries /// </summary> private List <LogicalEntry> GetEntries() { if (m_allentries == null) { List <LogicalEntry> entries = new List <LogicalEntry>(); { long location = 0; long length = m_datatablefilestructure.LastByte; using (var view = m_datatablemapper.CreateView(FileStructure.StructureLength, length)) { while ((location + LogicalEntry.StructureLength) < length) { LogicalEntry entry = new LogicalEntry(); view.Read(location, out entry); location += LogicalEntry.StructureLength; entries.Add(entry); } } } m_allentries = entries; m_allentriesDictionary = m_allentries.ToDictionary(i => i.Id); } return(m_allentries); }
/// <summary> /// Saves an entry to data and data table /// </summary> /// <param name="Id">id of entry</param> /// <param name="obj">object to be saved</param> public void PushEntry(Guid Id, object obj) { //stream the object via serializer var ms = Serialize(obj); ms.Seek(0, SeekOrigin.Begin); long lastbyte = 0; var lastexpectedbyte = ms.Length; { lastbyte = m_datafilestructure.LastByte; using (var mmfstream = m_datamapper.CreateStream(lastbyte, lastexpectedbyte)) { ms.CopyTo(mmfstream); mmfstream.Close(); m_datafilestructure.LastByte += lastexpectedbyte; } } { //create a logical entry with start/end of serialized object LogicalEntry le = new LogicalEntry(); le.Id = Id; le.Length = ms.Length; le.Offset = lastbyte; //save entry using (var view = m_datatablemapper.CreateView(m_datatablefilestructure.LastByte, LogicalEntry.StructureLength)) { view.Write(0, ref le); m_datatablefilestructure.LastByte += LogicalEntry.StructureLength; } m_allentries.Add(le); m_allentriesDictionary[le.Id] = le; } MaintainHeaders(); }