Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День памяти погибших в радиационных авариях и катастрофах


TFileStreamEx от ТиХАРиК'а


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеВт, 08-Ноя-2005 4:19    Заголовок сообщения: TFileStreamEx от ТиХАРиК'а
Цитата

Воот написал такой модуль для хранение информации.
Думаю вам понравится Заодно хотел-бы услышать ваше мнение и идей насчёт чего тут не хватает.
Код:
////////////////////////////////////////////////////////////////////////////////
// TFileStreamEx by Cugreev Eugene a.k.a. TuXAPuK
//  for Borland Delphi 7
//  spamto:tuxapuk@walla.com
Unit StreamUtils;

Interface

Uses
  SysUtils, Classes, Windows,
  Graphics, JPEG, ZLib;

Type
  TFileStreamEx = Class(TFileStream)
    Public
      Procedure _WrBoolean(Value: Boolean);
      Function _ReBoolean: Boolean;
      Procedure _WrColor(Value: TColor);
      Function _ReColor: TColor;
      Procedure _WrShortint(Value: Shortint);
      Function _ReShortint: Shortint;         // Shortint       -128..127                 signed 8-bit    1
      Procedure _WrSmallint(Value: Smallint);
      Function _ReSmallint: Smallint;         // Smallint       -32768..32767             signed 16-bit   2
      Procedure _WrLongint(Value: Longint);
      Function _ReLongint: Longint;           // Longint         -2147483648..2147483647   signed 32-bit   4
      Procedure _WrInteger(Value: Integer);
      Function _ReInteger: Integer;           // Integer         -2147483648..2147483647     signed 32-bit   4
      Procedure _WrInt64(Value: Int64);
      Function _ReInt64: Int64;               // Int64          -2^63..2^63-1             signed 64-bit   8
      Procedure _WrByte(Value: Byte);
      Function _ReByte: Byte;                 // Byte           0..255                    unsigned 8-bit  1
      Procedure _WrWord(Value: Word);
      Function _ReWord: Word;                 // Word           0..65535                   unsigned 16-bit 2
      Procedure _WrLongword(Value: Longword);
      Function _ReLongword: Longword;         // Longword       0..4294967295             unsigned 32-bit 4
      Procedure _WrCardinal(Value: Cardinal);
      Function _ReCardinal: Cardinal;         //Cardinal         0..4294967295               unsigned 32-bit 4
      Procedure _WrReal48(Value: Real48);
      Function _ReReal48: Real48;
      Procedure _WrSingle(Value: Single);
      Function _ReSingle: Single;
      Procedure _WrDouble(Value: Double);
      Function _ReDouble: Double;
      Procedure _WrExtended(Value: Extended);
      Function _ReExtended: Extended;
      Procedure _WrComp(Value: Comp);
      Function _ReComp: Comp;
      Procedure _WrCurrency(Value: Currency);
      Function _ReCurrency: Currency;
      Procedure _WrReal(Value: Real);
      Function _ReReal: Real;
      Procedure _WrString(Value: String);
      Function _ReString: String;
      Procedure _WrStrings(Value: TStrings);
      Procedure _ReStrings(Output: TStrings);
      Procedure _WrImageBitmap(Value: TBitmap);
      Procedure _ReImageBitmap(Output: TBitmap);
      Procedure _WrStream(Value: TStream; Count: Int64 = -1);
      Procedure _ReStream(Output: TStream);
  End;

Const
  Version: Array[0..3] Of Byte = (1, 0, 0, 0);

Implementation

  Procedure TFileStreamEx._WrBoolean(Value: Boolean);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReBoolean: Boolean;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrColor(Value: TColor);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReColor: TColor;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrShortint(Value: Shortint);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReShortint: Shortint;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrSmallint(Value: Smallint);
  Begin
    Self.Write(Value, $0002);
  End;

  Function TFileStreamEx._ReSmallint: Smallint;
  Begin
    Self.Read(Result, $0002);
  End;

  Procedure TFileStreamEx._WrLongint(Value: Longint);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReLongint: Longint;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrInteger(Value: Integer);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReInteger: Integer;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrInt64(Value: Int64);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReInt64: Int64;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrByte(Value: Byte);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReByte: Byte;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrWord(Value: Word);
  Begin
    Self.Write(Value, $0002);
  End;

  Function TFileStreamEx._ReWord: Word;
  Begin
    Self.Read(Result, $0002);
  End;

  Procedure TFileStreamEx._WrLongword(Value: Longword);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReLongword: Longword;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrCardinal(Value: Cardinal);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReCardinal: Cardinal;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrReal48(Value: Real48);
  Begin
    Self.Write(Value, $0006);
  End;

  Function TFileStreamEx._ReReal48: Real48;
  Begin
    Self.Read(Result, $0006);
  End;

  Procedure TFileStreamEx._WrSingle(Value: Single);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReSingle: Single;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrDouble(Value: Double);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReDouble: Double;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrExtended(Value: Extended);
  Begin
    Self.Write(Value, $00A0);
  End;

  Function TFileStreamEx._ReExtended: Extended;
  Begin
    Self.Read(Result, $00A0);
  End;

  Procedure TFileStreamEx._WrComp(Value: Comp);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReComp: Comp;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrCurrency(Value: Currency);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReCurrency: Currency;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrReal(Value: Real);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReReal: Real;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrString(Value: String);
  Var
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
    ValueSize := Length(Value);
    StrPCopy(ValueBuffer, Value);
    Self.Write(ValueSize, $0004);
    Self.Write(ValueBuffer, ValueSize);
  End;

  Function TFileStreamEx._ReString: String;
  Var
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
    Self.Read(ValueSize, $0004);
    Self.Read(ValueBuffer, ValueSize);
    Result := StrPas(ValueBuffer);
  End;

  Procedure TFileStreamEx._WrStrings(Value: TStrings);
  Var
    CurrValue,
    ValuesCount,
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    ValuesCount := Value.Count;
    Self.Write(ValuesCount, $0004);
    For CurrValue := 0 To (ValuesCount - 1) Do
    Begin
      FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
      ValueSize := Length(Value.Strings[CurrValue]);
      StrPCopy(ValueBuffer, Value.Strings[CurrValue]);
      Self.Write(ValueSize, $0004);
      Self.Write(ValueBuffer, ValueSize);
    End;
  End;

  Procedure TFileStreamEx._ReStrings(Output: TStrings);
  Var
    CurrValue,
    ValuesCount,
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    OutPut.Clear;
    Self.Read(ValuesCount, $0004);
    For CurrValue := 0 To (ValuesCount - 1) Do
    Begin
      FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
      Self.Read(ValueSize, $0004);
      Self.Read(ValueBuffer, ValueSize);
      Output.Add(StrPas(ValueBuffer));
    End;
  End;

  Procedure TFileStreamEx._WrImageBitmap(Value: TBitmap);
  var
    ValueSize: Int64;
    ValueBuffer: TStream;
  Begin
    ValueBuffer := TMemoryStream.Create;
    Value.SaveToStream(ValueBuffer);
    ValueSize := ValueBuffer.Size;
    ValueBuffer.Seek($0000, soFromBeginning);
    Self.Write(ValueSize, $0008);
    Self.CopyFrom(ValueBuffer, ValueSize);
    ValueBuffer.Free;
  End;

  Procedure TFileStreamEx._ReImageBitmap(Output: TBitmap);
  var
    ValueSize: Int64;
    ValueBuffer: TStream;
  Begin
    Self.Read(ValueSize, $0008);
    ValueBuffer := TMemoryStream.Create;
    ValueBuffer.CopyFrom(Self, ValueSize);
    ValueBuffer.Seek($0000, soFromBeginning);
    Output.LoadFromStream(ValueBuffer);
    ValueBuffer.Free;
  End;

  Procedure TFileStreamEx._WrStream(Value: TStream; Count: Int64 = -1);
  Begin
    If (Count < 0) Or (Count > (Value.Size - Value.Position)) Then
      Count := Value.Size - Value.Position;
    Self.Write(Count, $0008);
    Self.CopyFrom(Value, Count);
  End;

  Procedure TFileStreamEx._ReStream(Output: TStream);
  Var
    Count: Int64;
  Begin
    Self.Read(Count, $0008);
    Output.CopyFrom(Self, Count);
  End;

End.



И Ещё... У меня был пример как через Pointer, TJpegImage загружать... Я его потерял а теперь дико обламываюсь... Может у кого остался подобный примерчик??? ...

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж Ktf
Администратор


Возраст: 34
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеВт, 08-Ноя-2005 6:55 
Цитата

Я бы убрал везде Self. Без него будет тот же эффект.
_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеВт, 08-Ноя-2005 8:32 
Цитата

Ktf писал(а):
Я бы убрал везде Self. Без него будет тот же эффект.
За счёт Self оптимизируется круг поиска, и в конечном итоге модуль работает быстрее...
_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж Ktf
Администратор


Возраст: 34
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеВт, 08-Ноя-2005 14:23 
Цитата

чтобы опровергнуть твое высказывание, приведу тебе небольшой примерчик. ;)

пусть имеется следующий код в дельфи:
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
  Self.Caption:='Self.Caption';
  Caption:='Caption';
end;

хочешь увидеть как выглядит этот же самый код на ассемблере? ;)
смотри скриншот.

ну, разве есть разница?



dbg_view.gif
 Описание:
View CPU window
 Размер:  15.73 KB
 Просмотрено:  6037 раз(а)

dbg_view.gif



_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 28
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеВт, 08-Ноя-2005 22:23 
Цитата

хм а нафиг этот модуль? ничего нового то нет. картинки писать что-ли?

имхо _WrStrings надо через _WrString делать, а то потом проблемы будут, избыточность кажется зовётся.

да и картинки хранить неэкономно в плане места. если уж дорабатывать то свой формат хранения для них, ну хоть заголовок почистить у bmp. можно и сжатие простенькое, чтоб скорость была добавить, хоть rle
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеПт, 11-Ноя-2005 9:55 
Цитата

to NikotiN
TuXAPuK писал(а):
И Ещё... У меня был пример как через Pointer, TJpegImage загружать... Я его потерял а теперь дико обламываюсь... Может у кого остался подобный примерчик??? ...
Не зря я это писал... А другие форматы e.g. PNG, GIF, TIF, RLE, и.т.п. я не хочу добовлять изза того что не у всех они есть. И уж точно не у всех одинаковые, так-как например TGIFImage я 6 разновидностей нашол.. Так-же я и думал над компрессией см. Uses ..., ZLib; через ZLib BMP компресируется до размеров JPG но и в этом случее я не знаю как привезать TCompressonStream к TFileStreamEx... Насчёт
NikotiN писал(а):
_WrStrings надо через _WrString делать
Спасибо учту...
NikotiN писал(а):
хм а нафиг этот модуль? ничего нового то нет. картинки писать что-ли?

Для упрощщения работы программиста...
Код:
 --- С TFileStream
Procedure LoadSettings;
var
  fs: TStream;
  port: Integer;
Begin
  fs := TFileStream.Create('c:\myconfig.dmp', fmOpenRead);
  fs.Read(port, $0002);
  self.IdIrc1.Port := port;
  fs.Free;
End;
--- С TFileStreamEx
Procedure LoadSettings;
var
  fs: TStream;
Begin
  fs := TFileStreamEx.Create('c:\myconfig.dmp', fmOpenRead);
  self.IdIrc1.Port := fs._ReWord;
  fs.Free;
End;


to Ktf
Хмм... Мдаа... С дебагером не поспориш

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж NikotiN
Розовый мамонт


Возраст: 28
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПт, 11-Ноя-2005 19:26 
Цитата

я имел ввиду самому написать и добавитьь код, а не модули подключать.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеПт, 26-Май-2006 6:18 
Цитата

Доступна новая версия.

TFileStreamEx ver = x.1.0.1.3

Код:
////////////////////////////////////////////////////////////////////////////////
// TFileStreamEx by Cugreev Eugene a.k.a. TuXAPuK
//  for Borland Delphi 7
//  new version avilible x1.0.1.3
//  spamto:tuxapuk@walla.com
Unit StreamUtils;

Interface

Uses
  SysUtils, Classes, Windows,
  Graphics, JPEG{, ZLib};

Type
  TFileStreamEx = Class(TFileStream)
    Public
      Procedure _WrBoolean(Value: Boolean);
      Function _ReBoolean: Boolean;
      Procedure _WrColor(Value: TColor);
      Function _ReColor: TColor;
      Procedure _WrShortint(Value: Shortint);
      Function _ReShortint: Shortint;         // Shortint       -128..127                 signed 8-bit    1
      Procedure _WrSmallint(Value: Smallint);
      Function _ReSmallint: Smallint;         // Smallint       -32768..32767             signed 16-bit   2
      Procedure _WrLongint(Value: Longint);
      Function _ReLongint: Longint;           // Longint         -2147483648..2147483647   signed 32-bit   4
      Procedure _WrInteger(Value: Integer);
      Function _ReInteger: Integer;           // Integer         -2147483648..2147483647     signed 32-bit   4
      Procedure _WrInt64(Value: Int64);
      Function _ReInt64: Int64;               // Int64          -2^63..2^63-1             signed 64-bit   8
      Procedure _WrByte(Value: Byte);
      Function _ReByte: Byte;                 // Byte           0..255                    unsigned 8-bit  1
      Procedure _WrWord(Value: Word);
      Function _ReWord: Word;                 // Word           0..65535                   unsigned 16-bit 2
      Procedure _WrLongword(Value: Longword);
      Function _ReLongword: Longword;         // Longword       0..4294967295             unsigned 32-bit 4
      Procedure _WrCardinal(Value: Cardinal);
      Function _ReCardinal: Cardinal;         //Cardinal         0..4294967295               unsigned 32-bit 4
      Procedure _WrReal48(Value: Real48);
      Function _ReReal48: Real48;
      Procedure _WrSingle(Value: Single);
      Function _ReSingle: Single;
      Procedure _WrDouble(Value: Double);
      Function _ReDouble: Double;
      Procedure _WrExtended(Value: Extended);
      Function _ReExtended: Extended;
      Procedure _WrComp(Value: Comp);
      Function _ReComp: Comp;
      Procedure _WrCurrency(Value: Currency);
      Function _ReCurrency: Currency;
      Procedure _WrReal(Value: Real);
      Function _ReReal: Real;
      Procedure _WrString(Value: String);
      Function _ReString: String;
      Procedure _WrStrings(Value: TStrings);
      Procedure _ReStrings(Output: TStrings);
      Procedure _WrImageBitmap(Value: TBitmap);
      Procedure _ReImageBitmap(Output: TBitmap);
      Procedure _WrStream(Value: TStream; Count: Int64 = -1);
      Procedure _ReStream(Output: TStream);
      Procedure _SkipBoolean;
      Procedure _SkipColor;
      Procedure _SkipShortint;
      Procedure _SkipSmallint;
      Procedure _SkipLongint;
      Procedure _SkipInteger;
      Procedure _SkipInt64;
      Procedure _SkipByte;
      Procedure _SkipWord;
      Procedure _SkipLongword;
      Procedure _SkipCardinal;
      Procedure _SkipReal48;
      Procedure _SkipSingle;
      Procedure _SkipDouble;
      Procedure _SkipExtended;
      Procedure _SkipComp;
      Procedure _SkipCurrency;
      Procedure _SkipReal;
      Procedure _SkipString;
      Procedure _SkipStrings;
      Procedure _SkipImageBitmap;
      Procedure _SkipStream;
  End;

Const
  Version: Array[0..3] Of Byte = (1, 0, 1, 3); // Устаревший вариант..
  c_FileStreamExVer: Array[0..3] Of Byte = (1, 0, 1, 3);

Implementation

  Procedure TFileStreamEx._WrBoolean(Value: Boolean);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReBoolean: Boolean;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrColor(Value: TColor);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReColor: TColor;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrShortint(Value: Shortint);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReShortint: Shortint;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrSmallint(Value: Smallint);
  Begin
    Self.Write(Value, $0002);
  End;

  Function TFileStreamEx._ReSmallint: Smallint;
  Begin
    Self.Read(Result, $0002);
  End;

  Procedure TFileStreamEx._WrLongint(Value: Longint);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReLongint: Longint;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrInteger(Value: Integer);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReInteger: Integer;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrInt64(Value: Int64);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReInt64: Int64;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrByte(Value: Byte);
  Begin
    Self.Write(Value, $0001);
  End;

  Function TFileStreamEx._ReByte: Byte;
  Begin
    Self.Read(Result, $0001);
  End;

  Procedure TFileStreamEx._WrWord(Value: Word);
  Begin
    Self.Write(Value, $0002);
  End;

  Function TFileStreamEx._ReWord: Word;
  Begin
    Self.Read(Result, $0002);
  End;

  Procedure TFileStreamEx._WrLongword(Value: Longword);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReLongword: Longword;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrCardinal(Value: Cardinal);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReCardinal: Cardinal;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrReal48(Value: Real48);
  Begin
    Self.Write(Value, $0006);
  End;

  Function TFileStreamEx._ReReal48: Real48;
  Begin
    Self.Read(Result, $0006);
  End;

  Procedure TFileStreamEx._WrSingle(Value: Single);
  Begin
    Self.Write(Value, $0004);
  End;

  Function TFileStreamEx._ReSingle: Single;
  Begin
    Self.Read(Result, $0004);
  End;

  Procedure TFileStreamEx._WrDouble(Value: Double);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReDouble: Double;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrExtended(Value: Extended);
  Begin
    Self.Write(Value, $00A0);
  End;

  Function TFileStreamEx._ReExtended: Extended;
  Begin
    Self.Read(Result, $00A0);
  End;

  Procedure TFileStreamEx._WrComp(Value: Comp);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReComp: Comp;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrCurrency(Value: Currency);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReCurrency: Currency;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrReal(Value: Real);
  Begin
    Self.Write(Value, $0008);
  End;

  Function TFileStreamEx._ReReal: Real;
  Begin
    Self.Read(Result, $0008);
  End;

  Procedure TFileStreamEx._WrString(Value: String);
  Var
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
    ValueSize := Length(Value);
    StrPCopy(ValueBuffer, Value);
    Self.Write(ValueSize, $0004);
    Self.Write(ValueBuffer, ValueSize);
  End;

  Function TFileStreamEx._ReString: String;
  Var
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
    Self.Read(ValueSize, $0004);
    Self.Read(ValueBuffer, ValueSize);
    Result := StrPas(ValueBuffer);
  End;

  Procedure TFileStreamEx._WrStrings(Value: TStrings);
  Var
    CurrValue,
    ValuesCount,
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    ValuesCount := Value.Count;
    Self.Write(ValuesCount, $0004);
    For CurrValue := 0 To (ValuesCount - 1) Do
    Begin
      FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
      ValueSize := Length(Value.Strings[CurrValue]);
      StrPCopy(ValueBuffer, Value.Strings[CurrValue]);
      Self.Write(ValueSize, $0004);
      Self.Write(ValueBuffer, ValueSize);
    End;
  End;

  Procedure TFileStreamEx._ReStrings(Output: TStrings);
  Var
    CurrValue,
    ValuesCount,
    ValueSize: Word;
    ValueBuffer: Array[Word] Of Char;
  Begin
    OutPut.Clear;
    Self.Read(ValuesCount, $0004);
    For CurrValue := 0 To (ValuesCount - 1) Do
    Begin
      FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
      Self.Read(ValueSize, $0004);
      Self.Read(ValueBuffer, ValueSize);
      Output.Add(StrPas(ValueBuffer));
    End;
  End;

  Procedure TFileStreamEx._WrImageBitmap(Value: TBitmap);
  var
    ValueSize: Int64;
    ValueBuffer: TStream;
  Begin
    ValueBuffer := TMemoryStream.Create;
    Value.SaveToStream(ValueBuffer);
    ValueSize := ValueBuffer.Size;
    ValueBuffer.Seek($0000, soFromBeginning);
    Self.Write(ValueSize, $0008);
    Self.CopyFrom(ValueBuffer, ValueSize);
    ValueBuffer.Free;
  End;

  Procedure TFileStreamEx._ReImageBitmap(Output: TBitmap);
  var
    ValueSize: Int64;
    ValueBuffer: TStream;
  Begin
    Self.Read(ValueSize, $0008);
    ValueBuffer := TMemoryStream.Create;
    ValueBuffer.CopyFrom(Self, ValueSize);
    ValueBuffer.Seek($0000, soFromBeginning);
    Output.LoadFromStream(ValueBuffer);
    ValueBuffer.Free;
  End;

  Procedure TFileStreamEx._WrStream(Value: TStream; Count: Int64 = -1);
  Begin
    If (Count < 0) Or (Count > (Value.Size - Value.Position)) Then
      Count := Value.Size - Value.Position;
    Self.Write(Count, $0008);
    Self.CopyFrom(Value, Count);
  End;

  Procedure TFileStreamEx._ReStream(Output: TStream);
  Var
    Count: Int64;
  Begin
    Self.Read(Count, $0008);
    Output.CopyFrom(Self, Count);
  End;

  Procedure TFileStreamEx._SkipBoolean;
  Begin
    Self.Seek($0001, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipColor;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipShortint;
  Begin
    Self.Seek($0001, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipSmallint;
  Begin
    Self.Seek($0002, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipLongint;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipInteger;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipInt64;
  Begin
    Self.Seek($0008, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipByte;
  Begin
    Self.Seek($0001, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipWord;
  Begin
    Self.Seek($0002, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipLongword;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipCardinal;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipReal48;
  Begin
    Self.Seek($0006, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipSingle;
  Begin
    Self.Seek($0004, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipDouble;
  Begin
    Self.Seek($0008, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipExtended;
  Begin
    Self.Seek($00A0, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipComp;
  Begin
    Self.Seek($0008, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipCurrency;
  Begin
    Self.Seek($0008, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipReal;
  Begin
    Self.Seek($0008, soFromCurrent);
  End;

  Procedure TFileStreamEx._SkipString;
  Var
    ValueSize: Word;
  Begin
    Self.Read(ValueSize, $0004);
    Self.Seek(ValueSize, soFromCurrent);
  End;

  End;

  Procedure TFileStreamEx._SkipStrings;
  Var
    CurrValue,
    ValuesCount,
    ValueSize: Word;
  Begin
    Self.Read(ValuesCount, $0004);
    For CurrValue := 0 To (ValuesCount - 1) Do
    Begin
      Self.Read(ValueSize, $0004);
      Self.Seek(ValueSize, soFromCurrent);
    End;
  End;

  Procedure TFileStreamEx._SkipImageBitmap;
  Var
    ValueSize: Int64;
  Begin
    Self.Read(ValueSize, $0008);
    Self.Seek(ValueSize, soFromCurrent)
  End;

  Procedure TFileStreamEx._SkipStream;
  Var
    ValueSize: Int64;
  Begin
    Self.Read(ValueSize, $0008);
    Self.Seek(ValueSize, soFromCurrent)
  End;

End.

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж Ktf
Администратор


Возраст: 34
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеПт, 26-Май-2006 7:22 
Цитата

 ! Ktf:
Не, я не понял - я для кого подсветку синтаксиса мастрячил?!
А ну-ка все живенько стали использовать подсветку!

[syntаx="delphi"]
begin
end;
[/syntаx]

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеСб, 27-Май-2006 16:53 
Цитата

[off] to Ktf
Нафиг подсветку... =Ъ Мне она как правило только мешает... У меня и в делфях подсветка на один цвет настроена..
[/off]


Дальше попрошу только по теме... ;)

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 33
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5708
Откуда: Донецк
СообщениеСб, 27-Май-2006 17:32 
Цитата

Цитата:
хочешь увидеть как выглядит этот же самый код на ассемблере?

Еще в оффтопик: вот интересная фича оптимизатора - вместо того, чтобы напрямую использовать Self, который де-факто передается в метод первым параметром черех eax, он почему-то гоняет его туда-сюда через ebx

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 28
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеСб, 27-Май-2006 17:59 
Цитата

на то он и оптимимзатор, задел на будещее, чтоб было что оптимизировать!
_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
Alekc
Частый гость




Зарегистрирован: 01.04.2007
Сообщения: 28

СообщениеПт, 11-Май-2007 12:25 
Цитата

Цитата:
Procedure TFileStreamEx._WrString(Value: String);
Var
ValueSize: Word;
ValueBuffer: Array[Word] Of Char;
Begin
FillChar(ValueBuffer, SizeOf(ValueBuffer), #$00);
ValueSize := Length(Value);
StrPCopy(ValueBuffer, Value);
Self.Write(ValueSize, $0004);
Self.Write(ValueBuffer, ValueSize);
End;



delphi:
  1. Procedure TFileStreamEx._WrString(const Value: String)// const чтобы избежать ненужных нам копий
  2. var
  3.   ValueSize: Cardinal; // sizeof(Word) = 2!
  4. begin
  5.   ValueSize := Length(Value);
  6.   WriteBuffer(ValueSize, 4)// WriteBuffer - с контролем ошибок
  7.   WriteBuffer(Value[1], ValueSize);
  8. end;
  9.  


huh ? ;)

ЗЫ: Гыы, на месяц посмотрел, на год - нет :)))
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 28
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеПт, 01-Июн-2007 8:02 
Цитата

to Alekc :
Неважно... Тема всеравно активной остаётся... Я досихпор этим модулем пользуюсь очень удобно данные хранить... :)

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100