Exemple #1
0
 internal VirtualView(VirtualViewContainer accessor, long view_offset, long offset, long capacity)
 {
     m_viewoffset   = view_offset;
     m_viewaccessor = accessor;
     m_offset       = offset;
     m_capacity     = capacity;
 }
Exemple #2
0
        /// <summary>
        /// Create a VirtualView
        /// </summary>
        /// <param name="offset">absolute offset</param>
        /// <param name="length">length of virtual view</param>
        /// <returns>VirtualView instance</returns>
        public VirtualView CreateView(long offset, long length)
        {
            var range = new Range <Int64> {
                Minimum = offset, Maximum = offset + length
            };
            //look for views in that size
            var view = GetViewByRange(range);

            if (view != null)
            {
                Statistics.NumberOfViewReuse++;

                //if found, create MappedViewContainer
                var mappedViewContainer = new VirtualViewContainer {
                    Container = view, Range = range
                };
                mappedViewContainer.MappedView = new VirtualView(mappedViewContainer, view.Range.Minimum, offset, length);
                view.MappedViews.Add(mappedViewContainer);

                //ClearUnusedMappings();

                return(mappedViewContainer.MappedView);
            }

            //if not found, create view, create MappedViewContainer
            var maximized = GetMaximizedRange(offset, length);
            var container = new MemoryMappedViewContainer();

            container.Range        = maximized;
            container.MemoryMapper = this;
            //container.View = m_mmf.CreateViewAccessor(maximized.Minimum, maximized.Maximum - maximized.Minimum, MemoryMappedFileAccess.ReadWrite);
            m_views.Add(container);

            Statistics.NumberOfViewCreates++;

            //recursively get view (no reason to implement logic twice, only for optimizations)
            return(CreateView(offset, length));
        }
Exemple #3
0
 public void Dispose()
 {
     //m_viewaccessor.Container.View.Flush();
     m_viewaccessor.Container.MappedViews.Remove(m_viewaccessor);
     m_viewaccessor = null;
 }