Exemplo n.º 1
0
        void OnDatumReplaced(int xsDatum, IDatum datum)
        {
            bool wasIncluded = m_mapper.Accepted(xsDatum);

            if (wasIncluded)
            {
                int xdItem = m_mapper.FromSourceIndex(xsDatum);
                m_mapper.OnSourceItemReplaced(xsDatum, datum);

                if (m_mapper.Filter(datum))
                {
                    DatumReplaced?.Invoke(xdItem, datum);
                }
                else
                {
                    DatumDeleted?.Invoke(xdItem);
                }
            }
            else
            {
                m_mapper.OnSourceItemReplaced(xsDatum, datum);

                if (m_mapper.Filter(datum))
                {
                    int xdItem = m_mapper.FromSourceIndex(xsDatum);
                    DatumInserted?.Invoke(xdItem, datum);
                }
            }
        }
Exemplo n.º 2
0
        private void Source_DatumReplaced(int srcIndex, IDatum datum)
        {
            using (Lock())
            {
                bool wasIncluded = m_mapper.IsSelected(srcIndex);

                if (wasIncluded)
                {
                    int ndx = m_mapper.FromSourceIndex(srcIndex);
                    m_mapper.OnSourceItemReplaced(srcIndex, datum);

                    if (m_mapper.Filter(datum))
                    {
                        DatumReplaced?.Invoke(ndx, datum);
                    }
                    else
                    {
                        DatumDeleted?.Invoke(ndx);
                    }
                }
                else
                {
                    m_mapper.OnSourceItemReplaced(srcIndex, datum);

                    if (m_mapper.Filter(datum))
                    {
                        int ndx = m_mapper.FromSourceIndex(srcIndex);
                        DatumInserted?.Invoke(ndx, datum);
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void Delete(int ndx)
        {
            Assert(IsConnected);
            Assert(ndx < RowCount);
            Assert(0 <= ndx);

            lock (m_rwLock)
            {
                int ndxFrame = RowIndexToFrameIndex(ndx);

                if (m_header.FirstDeletedFrameIndex != NULL_INDEX)
                {
                    m_writer.Position = 0;
                    m_writer.Write(m_header.FirstDeletedFrameIndex);

                    long framePos = GetFramePosition(ndxFrame);
                    WriteFrame(framePos);
                }

                m_header.FirstDeletedFrameIndex = ndxFrame;
                int pos = m_recycledData.BinarySearch(ndxFrame);

                Assert(pos < 0);
                m_recycledData.Insert(~pos, ndxFrame);

                m_header.LastWriteTime = DateTime.Now;
                DatumDeleted?.Invoke(ndx);
            }
        }
Exemplo n.º 4
0
        void Source_DatumReplaced(int srcIndex, IDataRow datum)
        {
            Assert(datum != null);

            bool wasIncluded = m_mapper.Accepted(srcIndex);

            if (wasIncluded)
            {
                int ndx = m_mapper.FromSourceIndex(srcIndex);
                m_mapper.OnSourceItemReplaced(srcIndex, datum);

                if (m_mapper.Filter(datum))
                {
                    DatumReplaced?.Invoke(ndx, datum);
                }
                else
                {
                    DatumDeleted?.Invoke(ndx);
                }
            }
            else
            {
                m_mapper.OnSourceItemReplaced(srcIndex, datum);

                if (m_mapper.Filter(datum))
                {
                    int ndx = m_mapper.FromSourceIndex(srcIndex);
                    DatumInserted?.Invoke(ndx, datum);
                }
            }
        }
Exemplo n.º 5
0
        void DataProvider_DatumDeleted(int ndx)
        {
            IDatum datum = null;

            lock (m_cache)
            {
                int i = 0;

                while (i < m_cache.Count)
                {
                    int index = m_cache[i].Item1;

                    if (ndx < index)
                    {
                        IDatum d = m_cache[i].Item2;
                        m_cache[i] = Tuple.Create(index - 1, d);
                        ++i;
                    }
                    else if (index == ndx)
                    {
                        datum = m_cache[i].Item2;
                        m_cache.RemoveAt(i);
                    }
                }
            }


            Debug.Assert(datum != null);

            T key = m_selector(datum);


            lock (m_ndxTable)
            {
                m_ndxTable[key].Remove(ndx);

                //adjust indices
                foreach (List <int> lst in m_ndxTable.Values)
                {
                    for (int i = 0; i < lst.Count; i++)
                    {
                        if (ndx < lst[i])
                        {
                            --lst[i];
                        }
                    }
                }
            }

            DatumDeleted?.Invoke(datum);
        }
Exemplo n.º 6
0
        void OnDatumDeleted(int xsDatum)
        {
            if (m_mapper.Accepted(xsDatum))
            {
                int xdItem = m_mapper.FromSourceIndex(xsDatum);
                m_mapper.OnSourceItemDeleted(xsDatum);

                DatumDeleted?.Invoke(xdItem);
            }
            else
            {
                m_mapper.OnSourceItemDeleted(xsDatum);
            }
        }
Exemplo n.º 7
0
        private void DataProvider_DatumDeleted(int ndx)
        {
            using (Lock())
            {
                IDatum datum = null;

                int i = 0;

                while (i < m_cache.Count)
                {
                    int index = m_cache[i].Item1;

                    if (ndx < index)
                    {
                        IDatum d = m_cache[i].Item2;
                        m_cache[i] = Tuple.Create(index - 1, d);
                        ++i;
                    }
                    else if (index == ndx)
                    {
                        datum = m_cache[i].Item2;
                        m_cache.RemoveAt(i);
                    }
                }


                Assert(datum != null);

                T key = m_selector(datum);
                m_dataIndices[key].Remove(ndx);

                //adjust indices
                foreach (List <int> lst in m_dataIndices.Values)
                {
                    for (int k = 0; k < lst.Count; ++k)
                    {
                        if (ndx < lst[k])
                        {
                            --lst[k];
                        }
                    }
                }

                DatumDeleted?.Invoke(datum);
            }
        }
Exemplo n.º 8
0
            public void Delete(int ndxItem)
            {
                Assert(IsConnected);
                Assert(ndxItem < Count);

                DatumDeleting?.Invoke(ndxItem);

                if (ndxItem < m_dpCountries.Count)
                {
                    m_dpCountries.Delete(ndxItem);
                }
                else
                {
                    m_impCountries.RemoveAt(ndxItem - m_dpCountries.Count);
                }

                DatumDeleted?.Invoke(ndxItem);
            }
Exemplo n.º 9
0
            public void Delete(int ndx)
            {
                Assert(IsConnected);
                Assert(ndx >= 0 && ndx < Count);

                lock (m_table)
                {
                    DatumDeleting?.Invoke(ndx);

                    m_table.Delete(ndx);

                    if (AutoFlush)
                    {
                        m_table.Flush();
                    }

                    DatumDeleted?.Invoke(ndx);
                }
            }
Exemplo n.º 10
0
        private void Source_DatumDeleted(int ndx)
        {
            Assert(m_cache.ContainsKey(ndx));

            Monitor.Enter(m_lock);

            IDatum datum = m_cache[ndx];

            m_cache.Remove(ndx);
            m_ndxTable.Remove(datum.ID);

            var keys = from kv in m_ndxTable
                       where kv.Value > ndx
                       select kv.Key;

            keys.ToList().ForEach(k => -- m_ndxTable[k]);

            Monitor.Exit(m_lock);

            DatumDeleted?.Invoke(datum);
        }
Exemplo n.º 11
0
        void DataProvider_DatumDeleted(int ndxDatum)
        {
            Debug.Assert(m_cache != null && m_cache.ContainsKey(ndxDatum));

            IDataRow row;

            lock (m_ndxTable)
            {
                row = m_cache[ndxDatum];
                m_cache.Remove(ndxDatum);
                m_ndxTable.Remove(row.ID);

                var keys = from kv in m_ndxTable
                           where kv.Value > ndxDatum
                           select kv.Key;

                keys.ToList().ForEach(k => -- m_ndxTable[k]);
            }

            DatumDeleted?.Invoke(row);
        }
Exemplo n.º 12
0
 void OnRowDeleted(int ndx)
 {
     DatumDeleted?.Invoke(ndx);
 }
Exemplo n.º 13
0
 void Table_DatumDeleted(int ndx) => DatumDeleted?.Invoke(ndx);