Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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();
        }