Exemple #1
0
        private MGRB LoadBitmap(long offset)
        {
            MGRB bc = new MGRB();

            if (offset == -1)
            {
                return(bc);
            }
            FileStream bmp = _bitmapFileRead;

            bmp.Seek(offset, SeekOrigin.Begin);
            var hdr = new byte[_hdrlen];

            bmp.Read(hdr, 0, hdr.Length);
            if (hdr[0] == (byte)'b' && hdr[1] == (byte)'m')
            {
                int c = Helper.ToInt32(hdr, 3);
                var b = new byte[c];
                bmp.Read(b, 0, c);
                if (hdr[2] == 1)
                {
                    b = MiniLZO.Decompress(b);
                }
                bc.Deserialize(fastBinaryJSON.BJSON.ToObject <MGRBData>(b));
            }
            else
            {
                log.Error("bitmap not recognized");
            }

            return(bc);
        }
Exemple #2
0
        private void ReadFile()
        {
            byte[] b = File.ReadAllBytes(_path + _filename);
            var    o = fastBinaryJSON.BJSON.ToObject <MGRBData>(b);

            _bits = new MGRB();
            _bits.Deserialize(o);
        }
Exemple #3
0
 private void InitializeFreeList()
 {
     if (_lastBlockNumber < 0)
     {
         // write master block
         _datawrite.Write(new byte[_BLOCKSIZE], 0, _BLOCKSIZE);
         _lastBlockNumber = 1;
         //_masterblock.Add("freelist", -1);
     }
     else
     {
         _freeList = new MGRB();
         // read master block data
         var b = ReadBlock(0);
         if (b[0] == (byte)'F' && b[1] == (byte)'L')
         {
             // get free block num and size
             int block     = Helper.ToInt32(b, 2);
             int len       = Helper.ToInt32(b, 2 + 4);
             int freeblock = block;
             b = new byte[len];
             var  offset = 0;
             bool failed = false;
             // read blocks upto size from block num
             SeekBlock(block);
             while (len > 0)
             {
                 // check header
                 var bb = ReadBlock(block++);
                 if (bb[0] != (byte)'F' || bb[1] != (byte)'L')
                 {
                     // throw exception??
                     _log.Error("Free list header does not match : " + _filename);
                     failed = true;
                     break;
                 }
                 int c = len > _BLOCKSIZE ? _BLOCKSIZE - 2 : len;
                 Buffer.BlockCopy(bb, 2, b, offset, c);
                 len    -= c;
                 offset += c;
             }
             if (failed == false)
             {
                 // read freelist from master block from end of file
                 var o = fastBinaryJSON.BJSON.ToObject <MGRBData>(b);
                 _freeList.Deserialize(o);
                 // truncate end of file freelist blocks if lastblock < file size
                 if (_datawrite.Length > _lastBlockNumber * _BLOCKSIZE)
                 {
                     _datawrite.SetLength(_lastBlockNumber * _BLOCKSIZE);
                 }
             }
             _lastBlockNumber = freeblock;
         }
     }
 }
Exemple #4
0
 public MGRB Copy()
 {
     if (_containers.Count() > 0)
     {
         var o = Serialize();
         var m = new MGRB();
         m.Deserialize(o);
         return(m);
     }
     return(new MGRB());
 }