Permalink
Browse files

Initial import from CVS repository.

  • Loading branch information...
mremec
mremec committed May 2, 2012
0 parents commit e374d392405d7a062372852dccf2433380589301
Showing with 41,991 additions and 0 deletions.
  1. +663 −0 ChangeLog
  2. +204 −0 GpStreamWrapper.pas
  3. +1,045 −0 GpTextStream.pas
  4. BIN MSXML2_TLB.dcr
  5. +9,705 −0 MSXML2_TLB.pas
  6. +24 −0 OmniXML.inc
  7. +4,055 −0 OmniXML.pas
  8. +391 −0 OmniXMLConf.pas
  9. +572 −0 OmniXMLDatabase.pas
  10. +768 −0 OmniXMLPersistent.pas
  11. +1,308 −0 OmniXMLProperties.pas
  12. +2,796 −0 OmniXMLUtils.pas
  13. +471 −0 OmniXMLXPath.pas
  14. +162 −0 OmniXML_Dictionary.pas
  15. +1,003 −0 OmniXML_JEDI.inc
  16. +674 −0 OmniXML_LookupTables.pas
  17. +71 −0 OmniXML_MSXML.pas
  18. +37 −0 OmniXML_Types.pas
  19. +173 −0 demo/BioLife/BioLife.bdsproj
  20. +37 −0 demo/BioLife/BioLife.dpr
  21. BIN demo/BioLife/BioLife.res
  22. +165 −0 demo/BioLife/blMain.dfm
  23. +105 −0 demo/BioLife/blMain.pas
  24. +173 −0 demo/ErrorInfo/ErrorInfo.bdsproj
  25. +14 −0 demo/ErrorInfo/ErrorInfo.dpr
  26. BIN demo/ErrorInfo/ErrorInfo.res
  27. +112 −0 demo/ErrorInfo/main.dfm
  28. +212 −0 demo/ErrorInfo/main.pas
  29. +173 −0 demo/FileList/FileList.bdsproj
  30. +14 −0 demo/FileList/FileList.dpr
  31. BIN demo/FileList/FileList.res
  32. +191 −0 demo/FileList/main.dfm
  33. +213 −0 demo/FileList/main.pas
  34. +173 −0 demo/MemTest/MemTest.bdsproj
  35. +14 −0 demo/MemTest/MemTest.dpr
  36. BIN demo/MemTest/MemTest.res
  37. +156 −0 demo/MemTest/main.dfm
  38. +169 −0 demo/MemTest/main.pas
  39. +165 −0 demo/MemTest/main.xfm
  40. +173 −0 demo/Properties/RSSReader.bdsproj
  41. +14 −0 demo/Properties/RSSReader.dpr
  42. BIN demo/Properties/RSSReader.res
  43. +74 −0 demo/Properties/rrMain.dfm
  44. +104 −0 demo/Properties/rrMain.pas
  45. +213 −0 demo/Properties/rrRSS.pas
  46. +81 −0 demo/Properties/summary.xml
  47. +180 −0 demo/Storage/Storage.bdsproj
  48. +13 −0 demo/Storage/Storage.dpr
  49. +111 −0 demo/Storage/Storage.dproj
  50. BIN demo/Storage/Storage.res
  51. +139 −0 demo/Storage/main.dfm
  52. +284 −0 demo/Storage/main.pas
  53. +173 −0 demo/XPath/XPathDemo.bdsproj
  54. +14 −0 demo/XPath/XPathDemo.dpr
  55. BIN demo/XPath/XPathDemo.res
  56. +147 −0 demo/XPath/XPathDemo1.dfm
  57. +319 −0 demo/XPath/XPathDemo1.pas
  58. +173 −0 demo/Xtreme/Xtreme.bdsproj
  59. +14 −0 demo/Xtreme/Xtreme.dpr
  60. BIN demo/Xtreme/Xtreme.res
  61. +110 −0 demo/Xtreme/main.dfm
  62. +160 −0 demo/Xtreme/main.pas
  63. BIN demo/doc/animals.xml
  64. +173 −0 demo/xmlFormatter/xmlFormatter.bdsproj
  65. +19 −0 demo/xmlFormatter/xmlFormatter.dpr
  66. BIN demo/xmlFormatter/xmlFormatter.res
  67. +51 −0 dpk/OmniXMLCore.dpk
  68. BIN dpk/OmniXMLCore.res
  69. +173 −0 dpk/OmniXML_d2005.bdsproj
  70. +48 −0 dpk/OmniXML_d2005.dpk
  71. BIN dpk/OmniXML_d2005.res
  72. +44 −0 dpk/OmniXML_d5.dpk
  73. BIN dpk/OmniXML_d5.res
  74. +44 −0 dpk/OmniXML_d6.dpk
  75. BIN dpk/OmniXML_d6.res
  76. +44 −0 dpk/OmniXML_d7.dpk
  77. BIN dpk/OmniXML_d7.res
  78. +12 −0 dpk/define_libsuffix.inc
  79. +5,631 −0 extras/DSiWin32.pas
  80. +271 −0 extras/GpSecurity.pas
  81. +4,256 −0 extras/GpSharedMemory.pas
  82. +2,352 −0 extras/GpSync.pas
  83. +168 −0 extras/OmniXMLShared.pas
  84. +1 −0 extras/readme.txt
663 ChangeLog

Large diffs are not rendered by default.

Oops, something went wrong.
@@ -0,0 +1,204 @@
{ $OmniXML: OmniXML/GpStreamWrapper.pas,v 1.5 2008/06/29 16:50:18 mremec Exp $ }
{$B-,H+,J+,Q-,T-,X+}
(*:Some useful stream wrappers.
@author Primoz Gabrijelcic
@desc <pre>
(c) 2006 Primoz Gabrijelcic
Free for personal and commercial use. No rights reserved.
Author : Primoz Gabrijelcic
Creation date : 2001-07-17
Last modification: 2006-09-21
Version : 1.04
</pre>
*)(*
History:
1.04: 2006-09-21
- TGpStreamWindow class moved to the GpStreams unit.
1.03: 2006-08-31
- Enable int64-based interface for Delphi 6.
1.02: 2006-04-14
- Added TGpStreamWindow class.
1.01: 2003-05-16
- Made Delphi 7 compatible.
1.0: 2001-07-17
- Released.
*)
unit GpStreamWrapper;
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF (RTLVersion >= 14)} // Delphi 6.0 or newer
{$DEFINE D6PLUS}
{$IFEND}
{$ENDIF}
interface
uses
Classes;
type
{:Base stream wrapper class implementing the delayed Seek.
}
TGpStreamWrapper = class(TStream)
private
swDelayedSeek : boolean;
swSeekMode : word;
swSeekOffset : longint;
swStoredPosition: longint;
swStream : TStream;
protected
function GetPosition: {$IFDEF D6PLUS}int64;{$ELSE}longint;{$ENDIF D6PLUS} virtual;
function GetSize: {$IFDEF D6PLUS}int64; override;{$ELSE}longint; virtual;{$ENDIF D6PLUS}
procedure SetPosition(newPosition: {$IFDEF D6PLUS}int64{$ELSE}longint{$ENDIF D6PLUS}); virtual;
procedure SetSize({$IFDEF D6PLUS}const{$ENDIF D6PLUS}newSize: {$IFDEF D6PLUS}int64{$ELSE}longint{$ENDIF D6PLUS}); override;
function WrappedSeek(offset: integer; mode: word): longint; {$IFDEF D6PLUS}overload;{$ENDIF D6PLUS}virtual;
{$IFDEF D6PLUS}
function WrappedSeek(offset: int64; origin: TSeekOrigin): int64; overload; virtual;
{$ENDIF D6PLUS}
public
constructor Create(wrappedStream: TStream);
procedure DelayedSeek; virtual;
function Seek(offset: integer; mode: word): longint; {$IFDEF D6PLUS}overload;{$ENDIF D6PLUS} override;
{:Wrapped (underlying) stream.}
property WrappedStream: TStream read swStream;
end; { TGpStreamWrapper }
implementation
{ TGpStreamWrapper }
constructor TGpStreamWrapper.Create(wrappedStream: TStream);
begin
inherited Create;
swStream := wrappedStream;
end; { TGpStreamWrapper.Create }
{:Repositions stream pointer in the wrapped stream (if required). Call this
method as a first thing in the descendant Read and Write methods.
}
procedure TGpStreamWrapper.DelayedSeek;
begin
if swDelayedSeek then begin
if (swSeekOffset <> 0) or (swSeekMode <> soFromCurrent) then
WrappedSeek(swSeekOffset,swSeekMode);
swDelayedSeek := false;
end;
end; { TGpStreamWrapper.DelayedSeek }
{:Returns the position in the wrapping (virtual) stream. Trivial implementation
from this class returns position of the wrapped (underlying) stream.
If descendant overrides this method, it must never call TGpStreamWrapper.Seek
(directly or indirectly).
}
function TGpStreamWrapper.GetPosition: {$IFDEF D6PLUS}int64;{$ELSE}longint;{$ENDIF D6PLUS}
begin
Result := WrappedStream.Position;
end; { TGpStreamWrapper.GetPosition }
{:Returns the size of the wrapping (virtual) stream. Trivial implementation
from this class returns size of the wrapped (underlying) stream.
If descendant overrides this method, it must never call TGpStreamWrapper.Seek
(directly or indirectly).
}
function TGpStreamWrapper.GetSize: {$IFDEF D6PLUS}int64;{$ELSE}longint;{$ENDIF D6PLUS}
begin
Result := WrappedStream.Size;
end; { TGpStreamWrapper.GetSize }
{:Repositions stream pointer. Actually only stores this information for later
use (when stream pointer position is really used).
@param offset Offset from start, current position, or end of stream (as set
by the 'mode' parameter) in bytes.
@param mode Specifies starting point for offset calculation
(soFromBeginning, soFromCurrent, soFromEnd).
@returns New position of stream pointer.
}
function TGpStreamWrapper.Seek(offset: longint; mode: word): longint;
begin
// TStream is using following code to get Size of the stream:
// Pos := Seek(0, soFromCurrent);
// Result := Seek(0, soFromEnd);
// Seek(Pos, soFromBeginning);
// This code tries to hack around this stupid behaviour.
if not swDelayedSeek then begin
if (mode = soFromCurrent) and (offset = 0) then begin
// possible GetSize call
swDelayedSeek := true;
swSeekOffset := offset;
swSeekMode := mode;
swStoredPosition := GetPosition;
Result := swStoredPosition;
end
else // not a GetSize call, forward it
Result := WrappedSeek(offset,mode);
end
else begin
if mode = soFromCurrent then
// not a GetSize call; saved Seek can only be (0,fromCurrent) - it is not
// necessary to call DelayedSeek
Result := WrappedSeek(offset,mode)
else if mode = soFromEnd then begin
if swSeekMode = soFromCurrent then begin
// possible GetSize call
swSeekOffset := offset;
swSeekMode := mode;
Result := GetSize;
end
else // not a GetSize call
Result := WrappedSeek(offset,mode);
end
else {if mode = soFromBeginning} begin
if (swSeekMode = soFromEnd) and (swStoredPosition = offset) then begin
// definitely GetSize call
swDelayedSeek := false;
Result := swStoredPosition;
end
else // not a GetSize call
Result := WrappedSeek(offset,mode);
end;
end;
end; { TGpStreamWrapper.Seek }
{:Sets the position in the wrapping (virtual) stream. Trivial implementation
from this class sets position of the wrapped (underlying) stream.
If descendant overrides this method, it must never call TGpStreamWrapper.Seek
(directly or indirectly).
}
procedure TGpStreamWrapper.SetPosition(newPosition: {$IFDEF D6PLUS}int64{$ELSE}longint{$ENDIF D6PLUS});
begin
WrappedStream.Position := newPosition;
end; { TGpStreamWrapper.SetPosition }
{:Sets the size of the wrapping (virtual) stream. Trivial implementation
from this class sets position of the wrapped (underlying) stream.
If descendant overrides this method, it must never call TGpStreamWrapper.Seek
(directly or indirectly).
}
procedure TGpStreamWrapper.SetSize({$IFDEF D6PLUS}const{$ENDIF D6PLUS}newSize: {$IFDEF D6PLUS}int64{$ELSE}longint{$ENDIF D6PLUS});
begin
WrappedStream.Size := newSize;
end; { TGpStreamWrapper.SetSize }
{:Implementation of the 'true' Seek. Called only when Seek is really needed.
Trivial implementation from this class calls Seek on the wrapped (underlying) stream.
WrappedSeek must never call TGpStreamWrapper.Seek (directly or indirectly) but use
directly WrappedStream.Seek.
}
function TGpStreamWrapper.WrappedSeek(offset: integer;
mode: word): longint;
begin
Result := WrappedStream.Seek(offset, mode);
end; { TGpStreamWrapper.WrappedSeek }
{$IFDEF D6PLUS}
function TGpStreamWrapper.WrappedSeek(offset: int64; origin: TSeekOrigin): int64;
begin
Result := WrappedStream.Seek(offset, origin);
end;
{$ENDIF D6PLUS}
end.
Oops, something went wrong.

0 comments on commit e374d39

Please sign in to comment.