コード例 #1
0
ファイル: MemoryMappedFileStorage.cs プロジェクト: ipbi/sones
        public override Byte[] ReadExtents(ObjectExtentsList myObjectExtentsList)
        {
            try
            {
                Byte[] byteArray = null;
                var _OutputStream = new MemoryStream();

                foreach (var _ObjectExtent in myObjectExtentsList)
                {
                    byteArray = ReadPosition(_ObjectExtent.PhysicalPosition, _ObjectExtent.Length);

                    _OutputStream.Seek((Int64)_ObjectExtent.LogicalPosition, SeekOrigin.Begin);
                    _OutputStream.Write(byteArray, 0, (Int32)_ObjectExtent.Length);
                }
                return _OutputStream.ToArray();
            }
            catch
            {
                return new Byte[0];
            }
        }
コード例 #2
0
ファイル: MemoryMappedFileStorage.cs プロジェクト: ipbi/sones
        public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList)
        {
            try
            {
                UInt64 copyLength;
                Byte[] byteArray = null;
                UInt64 myByteArrayLength = myByteArray.ULongLength();

                foreach (var _ObjectExtent in myObjectExtentsList)
                {
                    byteArray = new Byte[_ObjectExtent.Length];

                    copyLength = _ObjectExtent.Length;
                    if (_ObjectExtent.LogicalPosition + copyLength > myByteArrayLength)
                    {
                        copyLength = (myByteArrayLength - _ObjectExtent.LogicalPosition);
                    }

                    Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, byteArray, 0, (Int32)copyLength);

                    //do the writing
                    WritePosition(byteArray, _ObjectExtent.PhysicalPosition);

                }
                return true;
            }
            catch
            {
                return false;
            }
        }
コード例 #3
0
ファイル: QueueEntry.cs プロジェクト: TheByte/sones
        /// <summary>
        /// Creates an QueueEntry for storing all kinds of filesystem structures and objects.
        /// </summary>
        /// <param name="myObjectLocator">The object locator</param>
        /// <param name="myObjectStream">The ObjectStream (stream ID and Type) of the object (will be used to find the right streams)</param>
        /// <param name="myObjectEdition">the Name of the object edition</param>
        /// <param name="myObjectRevision">the requested metatdata object revision timestamp</param>
        /// <param name="mySerializedObject">the serialized data of the object</param>
        public QueueEntry(Byte[] mySerializedObject, ObjectExtentsList myExtentsList)
        {
            _DataLength       = mySerializedObject.ULongLength();
            _Data             = mySerializedObject;
            _RWQueueStreams   = new List<ObjectExtent>();
            _FlushAfterWrite  = false;

            if (_DataLength > myExtentsList.StreamLength)
                throw new Exception("[QueueEntry] The ObjectSize given in the ObjectStream is smaller than the size of the given data!");

            // Add this ObjectStream to the list of streams
            foreach (var _ObjectExtents in myExtentsList)
                _RWQueueStreams.Add(_ObjectExtents);
        }
コード例 #4
0
ファイル: AStorageEngine.cs プロジェクト: TheByte/sones
 public abstract Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList);
コード例 #5
0
ファイル: AStorageEngine.cs プロジェクト: TheByte/sones
 public abstract Byte[] ReadExtents(ObjectExtentsList myObjectExtentsList);
コード例 #6
0
ファイル: FileStorage.cs プロジェクト: TheByte/sones
        public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList)
        {
            try
            {

                UInt64 _CopyLength;
                Byte[] _ByteArray = null;
                UInt64 _myByteArrayLength = myByteArray.ULongLength();

                foreach (var _ObjectExtent in myObjectExtentsList)
                {

                    _ByteArray = new Byte[_ObjectExtent.Length];

                    _CopyLength = _ObjectExtent.Length;
                    if (_ObjectExtent.LogicalPosition + _CopyLength > _myByteArrayLength)
                        _CopyLength = (_myByteArrayLength - _ObjectExtent.LogicalPosition);

                    Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, _ByteArray, 0, (Int32)_CopyLength);

                    _ByteCache.Cache(_ObjectExtent.PhysicalPosition, _ByteArray);
                    _WriteQueue.Write(new QueueEntry(myByteArray, myObjectExtentsList));

                }

                return true;

            }

            catch (Exception e)
            {
                throw new FileStorageException("Error writing " + myByteArray.ULongLength() + " bytes using extents " + myObjectExtentsList.ToString() + "! " + e.Message);
            }
        }
コード例 #7
0
ファイル: MemoryStorage.cs プロジェクト: TheByte/sones
        public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList)
        {
            try
            {

                UInt64 _CopyLength;
                Byte[] _ByteArray = null;
                UInt64 _myByteArrayLength = myByteArray.ULongLength();

                foreach (var _ObjectExtent in myObjectExtentsList)
                {

                    _ByteArray = new Byte[_ObjectExtent.Length];

                    _CopyLength = _ObjectExtent.Length;
                    if (_ObjectExtent.LogicalPosition + _CopyLength > _myByteArrayLength)
                        _CopyLength = (_myByteArrayLength - _ObjectExtent.LogicalPosition);

                    Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, _ByteArray, 0, (Int32)_CopyLength);

                    _MemoryStream.Seek((Int64)_ObjectExtent.PhysicalPosition, SeekOrigin.Begin);
                    _MemoryStream.Write(_ByteArray, 0, (Int32) _ObjectExtent.Length);

                }

                return true;

            }

            catch
            {
                return false;
            }
        }