예제 #1
0
        public void Remove(JsonObject obj)
        {
            ReadOnlySpan <byte> values = obj._jsonData;
            Span <byte>         db     = obj._database;

            DbRow objRecord = MemoryMarshal.Read <DbRow>(db);
            int   reduce    = objRecord.Length;

            int idx = _database.IndexOf(db);

            int sliceVal = idx + db.Length;

            if (idx >= DbRow.Size)
            {
                reduce++;
                reduce++;
                idx -= DbRow.Size;
            }

            Span <byte> temp = _database.Slice(0, idx);

            for (int i = 0; i < temp.Length; i += DbRow.Size)
            {
                DbRow record = MemoryMarshal.Read <DbRow>(temp.Slice(i));
                if (!record.IsSimpleValue)
                {
                    DbRow myObj = MemoryMarshal.Read <DbRow>(_database.Slice(i + record.Length * DbRow.Size));
                    if (myObj.Location > objRecord.Location)
                    {
                        DbRow fixup = new DbRow(record.Type, record.Location, record.Length - reduce);
                        MemoryMarshal.Write(temp.Slice(i), ref fixup);
                    }
                }
            }

            _database.Slice(sliceVal).CopyTo(_database.Slice(idx));
            _database = _database.Slice(0, _database.Length - db.Length - DbRow.Size);
        }