Record support :

- Field may be hidden by calling SetFieldSerializationVisibility()
  - Field may be mapped to XML Attribute by calling RegisterAttributeProperty()

Some methods and routines have been marked "inline". By default the "inline" modifier is not enable. To enable it
uncomment the "//{$DEFINE USE_INLINE}" line in wst_global.inc.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@244 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-08-19 21:04:16 +00:00
parent 11a897fc26
commit 1069954eba
16 changed files with 720 additions and 380 deletions

View File

@ -16,7 +16,7 @@ interface
uses uses
Classes, SysUtils, Contnrs, TypInfo, Classes, SysUtils, Contnrs, TypInfo,
base_service_intf, binary_streamer; base_service_intf, binary_streamer, wst_types;
{$DEFINE wst_binary_header} {$DEFINE wst_binary_header}
@ -30,7 +30,10 @@ const
type type
EBinaryFormatterException = class(EServiceException) EBinaryFormatterException = class(EServiceException)
End; end;
EBinaryException = class(EBaseRemoteException)
end;
TDataName = AnsiString; TDataName = AnsiString;
TDataType = ( TDataType = (
@ -178,94 +181,94 @@ type
protected protected
function HasScope():Boolean; function HasScope():Boolean;
procedure CheckScope(); procedure CheckScope();
procedure ClearStack(); procedure ClearStack();{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PushStack(AScopeObject : PDataBuffer;Const AScopeType : TScopeType = stObject); procedure PushStack(AScopeObject : PDataBuffer;Const AScopeType : TScopeType = stObject);{$IFDEF USE_INLINE}inline;{$ENDIF}
function StackTop():TStackItem; function StackTop():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PopStack():TStackItem; function PopStack():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetRootData() : PDataBuffer; function GetRootData() : PDataBuffer;{$IFDEF USE_INLINE}inline;{$ENDIF}
protected protected
procedure PutFloat( procedure PutFloat(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TFloat_Extended_10 Const AData : TFloat_Extended_10
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutInt( procedure PutInt(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TInt64S Const AData : TInt64S
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutStr( procedure PutStr(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : String Const AData : String
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutEnum( procedure PutEnum(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TEnumData Const AData : TEnumData
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutBool( procedure PutBool(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Boolean Const AData : Boolean
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutInt64( procedure PutInt64(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Int64 Const AData : Int64
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutObj( procedure PutObj(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TObject Const AData : TObject
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutRecord( procedure PutRecord(
const AName : string; const AName : string;
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
const AData : Pointer const AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetDataBuffer(var AName : String):PDataBuffer; function GetDataBuffer(var AName : String):PDataBuffer;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetEnum( procedure GetEnum(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TEnumData Var AData : TEnumData
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetBool( procedure GetBool(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Boolean Var AData : Boolean
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetFloat( procedure GetFloat(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TFloat_Extended_10 Var AData : TFloat_Extended_10
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetInt( procedure GetInt(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TInt64S Var AData : TInt64S
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetInt64( procedure GetInt64(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Int64 Var AData : Int64
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetStr( procedure GetStr(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : String Var AData : String
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj( procedure GetObj(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TObject Var AData : TObject
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetRecord( procedure GetRecord(
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
var AName : String; var AName : String;
var AData : Pointer var AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
public public
constructor Create();override; constructor Create();override;
destructor Destroy();override; destructor Destroy();override;

View File

@ -1097,7 +1097,7 @@ type
FPool : TIntfPool; FPool : TIntfPool;
FTimeOut: PtrUInt; FTimeOut: PtrUInt;
private private
procedure PreparePool(); procedure PreparePool();{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure SetPooled(const AValue: Boolean); procedure SetPooled(const AValue: Boolean);
procedure SetPoolMax(const AValue: PtrInt); procedure SetPoolMax(const AValue: PtrInt);
procedure SetPoolMin(const AValue: PtrInt); procedure SetPoolMin(const AValue: PtrInt);
@ -1138,7 +1138,7 @@ type
FExternalNames : TStrings; FExternalNames : TStrings;
FInternalNames : TStrings; FInternalNames : TStrings;
private private
procedure CreateInternalObjects(); procedure CreateInternalObjects();{$IFDEF USE_INLINE}inline;{$ENDIF}
public public
constructor Create( constructor Create(
ANameSpace : string; ANameSpace : string;
@ -1146,12 +1146,12 @@ type
Const ADeclaredName : string = '' Const ADeclaredName : string = ''
); );
destructor Destroy();override; destructor Destroy();override;
function AddPascalSynonym(const ASynonym : string):TTypeRegistryItem;//inline; function AddPascalSynonym(const ASynonym : string):TTypeRegistryItem;
function IsSynonym(const APascalTypeName : string):Boolean;//inline; function IsSynonym(const APascalTypeName : string):Boolean;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure RegisterExternalPropertyName(const APropName, AExtPropName : string); procedure RegisterExternalPropertyName(const APropName, AExtPropName : string);
function GetExternalPropertyName(const APropName : string) : string; function GetExternalPropertyName(const APropName : string) : string;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetInternalPropertyName(const AExtPropName : string) : string; function GetInternalPropertyName(const AExtPropName : string) : string;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure RegisterObject(const APropName : string; const AObject : TObject); procedure RegisterObject(const APropName : string; const AObject : TObject);
function GetObject(const APropName : string) : TObject; function GetObject(const APropName : string) : TObject;
@ -1167,8 +1167,8 @@ type
TTypeRegistry = class TTypeRegistry = class
Private Private
FList : TObjectList; FList : TObjectList;
function GetCount: Integer; function GetCount: Integer;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetItemByIndex(Index: Integer): TTypeRegistryItem; function GetItemByIndex(Index: Integer): TTypeRegistryItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetItemByTypeInfo(Index: PTypeInfo): TTypeRegistryItem; function GetItemByTypeInfo(Index: PTypeInfo): TTypeRegistryItem;
Public Public
constructor Create(); constructor Create();
@ -1222,8 +1222,18 @@ const
PROP_LIST_DELIMITER = ';'; PROP_LIST_DELIMITER = ';';
FIELDS_STRING = '__FIELDS__'; FIELDS_STRING = '__FIELDS__';
function GetTypeRegistry():TTypeRegistry; function GetTypeRegistry():TTypeRegistry;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure RegisterStdTypes(); procedure RegisterStdTypes();
procedure RegisterAttributeProperty(
const ATypeInfo : PTypeInfo; // must be tkClass or tkRecord
const AProperty : shortstring
);
procedure SetFieldSerializationVisibility(
const ATypeInfo : PTypeInfo; // must be tkRecord
const AField : shortstring;
const AVisibility : Boolean
);
function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType; function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType;
@ -1336,6 +1346,62 @@ begin
r.Register(sXSD_NS,TypeInfo(TComplexBooleanContentRemotable),'boolean').AddPascalSynonym('TComplexBooleanContentRemotable'); r.Register(sXSD_NS,TypeInfo(TComplexBooleanContentRemotable),'boolean').AddPascalSynonym('TComplexBooleanContentRemotable');
end; end;
procedure SetFieldSerializationVisibility(
const ATypeInfo : PTypeInfo; // must be tkRecord
const AField : shortstring;
const AVisibility : Boolean
);
var
recordData : TRecordRttiDataObject;
begin
if Assigned(ATypeInfo) and ( ATypeInfo^.Kind = tkRecord ) and
( not IsStrEmpty(AField) )
then begin
recordData := GetTypeRegistry().ItemByTypeInfo[ATypeInfo].GetObject(FIELDS_STRING) as TRecordRttiDataObject;
if Assigned(recordData) then begin
recordData.GetField(AField)^.Visible := AVisibility;
end else begin
raise EServiceConfigException.CreateFmt('Record extended RTTI informations not found in type registry : "%s".',[ATypeInfo^.Name]);
end;
end else begin
raise EServiceConfigException.Create('Invalid parameters.');
end;
end;
procedure RegisterAttributeProperty(
const ATypeInfo : PTypeInfo;
const AProperty : shortstring
);
var
ok : Boolean;
recordData : TRecordRttiDataObject;
begin
ok := False;
if Assigned(ATypeInfo) and
( not IsStrEmpty(AProperty) )
then begin
case ATypeInfo^.Kind of
tkClass :
begin
if GetTypeData(ATypeInfo)^.ClassType.InheritsFrom(TAbstractComplexRemotable) then begin
TAbstractComplexRemotableClass(GetTypeData(ATypeInfo)^.ClassType).RegisterAttributeProperty(AProperty);
ok := True;
end;
end;
tkRecord :
begin
recordData := GetTypeRegistry().ItemByTypeInfo[ATypeInfo].GetObject(FIELDS_STRING) as TRecordRttiDataObject;
if Assigned(recordData) then begin
recordData.GetField(AProperty)^.IsAttribute := True;
ok := True;
end;
end;
end;
end;
if not ok then
raise EServiceConfigException.Create('Invalid parameters.');
end;
{$IFDEF FPC} {$IFDEF FPC}
function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType; function IsStoredPropClass(AClass : TClass;PropInfo : PPropInfo) : TPropStoreType;
begin begin
@ -2392,7 +2458,7 @@ begin
inherited Destroy(); inherited Destroy();
end; end;
function TTypeRegistryItem.AddPascalSynonym(const ASynonym: string):TTypeRegistryItem; //inline; function TTypeRegistryItem.AddPascalSynonym(const ASynonym: string):TTypeRegistryItem;
begin begin
Result := Self; Result := Self;
if AnsiSameText(ASynonym,DataType^.Name) then if AnsiSameText(ASynonym,DataType^.Name) then
@ -2405,7 +2471,7 @@ begin
FSynonymTable.Add(AnsiLowerCase(ASynonym)); FSynonymTable.Add(AnsiLowerCase(ASynonym));
end; end;
function TTypeRegistryItem.IsSynonym(const APascalTypeName: string): Boolean;//inline; function TTypeRegistryItem.IsSynonym(const APascalTypeName: string): Boolean;
begin begin
Result := AnsiSameText(APascalTypeName,DataType^.Name); Result := AnsiSameText(APascalTypeName,DataType^.Name);
if ( not Result ) and Assigned(FSynonymTable) then if ( not Result ) and Assigned(FSynonymTable) then
@ -4614,8 +4680,9 @@ begin
ss := AStore.GetSerializationStyle(); ss := AStore.GetSerializationStyle();
for i := 0 to Pred(typData^.FieldCount) do begin for i := 0 to Pred(typData^.FieldCount) do begin
p := @(typData^.Fields[i]); p := @(typData^.Fields[i]);
pt := p^.TypeInfo^;//{$IFNDEF FPC}^{$ENDIF}; if p^.Visible then begin
{if IsAttributeProperty(p^.Name) then begin pt := p^.TypeInfo^;
if p^.IsAttribute then begin
if ( ss <> ssAttibuteSerialization ) then if ( ss <> ssAttibuteSerialization ) then
ss := ssAttibuteSerialization; ss := ssAttibuteSerialization;
end else begin end else begin
@ -4623,8 +4690,8 @@ begin
ss := ssNodeSerialization; ss := ssNodeSerialization;
end; end;
if ( ss <> AStore.GetSerializationStyle() ) then if ( ss <> AStore.GetSerializationStyle() ) then
AStore.SetSerializationStyle(ss);} AStore.SetSerializationStyle(ss);
AStore.SetSerializationStyle(ssNodeSerialization); AStore.SetSerializationStyle(ss);
prpName := typRegItem.GetExternalPropertyName(p^.Name); prpName := typRegItem.GetExternalPropertyName(p^.Name);
recFieldAddress := recStart; recFieldAddress := recStart;
Inc(recFieldAddress,p^.Offset); Inc(recFieldAddress,p^.Offset);
@ -4675,6 +4742,7 @@ begin
end; end;
end; end;
end; end;
end;
finally finally
AStore.EndScope(); AStore.EndScope();
AStore.SetSerializationStyle(oldSS); AStore.SetSerializationStyle(oldSS);
@ -4694,7 +4762,6 @@ var
pt : PTypeInfo; pt : PTypeInfo;
propName : String; propName : String;
p : PRecordFieldInfo; p : PRecordFieldInfo;
persistType : TPropStoreType;
oldSS,ss : TSerializationStyle; oldSS,ss : TSerializationStyle;
typRegItem : TTypeRegistryItem; typRegItem : TTypeRegistryItem;
typDataObj : TObject; typDataObj : TObject;
@ -4718,20 +4785,20 @@ begin
recStart := PByte(ARecord); recStart := PByte(ARecord);
for i := 0 to Pred(typData^.FieldCount) do begin for i := 0 to Pred(typData^.FieldCount) do begin
p := @(typData^.Fields[i]); p := @(typData^.Fields[i]);
persistType := pstOptional;// IsStoredPropClass(objTypeData^.ClassType,p); if p^.Visible then begin
pt := p^.TypeInfo^;//{$IFNDEF FPC}^{$ENDIF}; pt := p^.TypeInfo^;
propName := typRegItem.GetExternalPropertyName(p^.Name); propName := typRegItem.GetExternalPropertyName(p^.Name);
{if IsAttributeProperty(p^.Name) then begin if p^.IsAttribute then begin
ss := ssAttibuteSerialization; ss := ssAttibuteSerialization;
end else begin end else begin
ss := ssNodeSerialization; ss := ssNodeSerialization;
end; end;
if ( ss <> AStore.GetSerializationStyle() ) then if ( ss <> AStore.GetSerializationStyle() ) then
AStore.SetSerializationStyle(ss);} AStore.SetSerializationStyle(ss);
AStore.SetSerializationStyle(ssNodeSerialization); AStore.SetSerializationStyle(ss);
recFieldAddress := recStart; recFieldAddress := recStart;
Inc(recFieldAddress,p^.Offset); Inc(recFieldAddress,p^.Offset);
try //try
Case pt^.Kind Of Case pt^.Kind Of
tkInt64 : AStore.Get(pt,propName,PInt64(recFieldAddress)^); tkInt64 : AStore.Get(pt,propName,PInt64(recFieldAddress)^);
{$IFDEF HAS_QWORD} {$IFDEF HAS_QWORD}
@ -4777,11 +4844,12 @@ begin
end; end;
end; end;
End; End;
except {except
on E : EServiceException do begin on E : EServiceException do begin
if ( persistType = pstAlways ) then if ( persistType = pstAlways ) then
raise; raise;
end; end;
end;}
end; end;
end; end;
end; end;

View File

@ -139,12 +139,12 @@ type
FKeepedEncoding : TSOAPEncodingStyle; FKeepedEncoding : TSOAPEncodingStyle;
FSerializationStyle : TSerializationStyle; FSerializationStyle : TSerializationStyle;
procedure InternalClear(const ACreateDoc : Boolean); procedure InternalClear(const ACreateDoc : Boolean);{$IFDEF USE_INLINE}inline;{$ENDIF}
function NextNameSpaceCounter():Integer;//inline; function NextNameSpaceCounter():Integer;{$IFDEF USE_INLINE}inline;{$ENDIF}
function HasScope():Boolean;//inline; function HasScope():Boolean;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure CheckScope();//inline; procedure CheckScope();{$IFDEF USE_INLINE}inline;{$ENDIF}
function InternalPutData( function InternalPutData(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
@ -154,89 +154,89 @@ type
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TEnumIntType Const AData : TEnumIntType
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutBool( function PutBool(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Boolean Const AData : Boolean
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutInt64( function PutInt64(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Int64 Const AData : Int64
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutStr( function PutStr(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : String Const AData : String
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutFloat( function PutFloat(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Extended Const AData : Extended
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutObj( procedure PutObj(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TObject Const AData : TObject
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutRecord( procedure PutRecord(
const AName : string; const AName : string;
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
const AData : Pointer const AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetNodeValue(var AName : String):DOMString; function GetNodeValue(var AName : String):DOMString;
procedure GetEnum( procedure GetEnum(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TEnumIntType Var AData : TEnumIntType
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetBool( procedure GetBool(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Boolean Var AData : Boolean
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF FPC} {$IFDEF FPC}
procedure GetInt( procedure GetInt(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Integer Var AData : Integer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF} {$ENDIF}
procedure GetInt64( procedure GetInt64(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Int64 Var AData : Int64
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetFloat( procedure GetFloat(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Extended Var AData : Extended
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetStr( procedure GetStr(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : String Var AData : String
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj( procedure GetObj(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TObject Var AData : TObject
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetRecord( procedure GetRecord(
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
var AName : String; var AName : String;
var AData : Pointer var AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
protected protected
function GetXmlDoc():TwstXMLDocument; function GetXmlDoc():TwstXMLDocument;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PushStack(AScopeObject : TDOMNode):TStackItem;overload; function PushStack(AScopeObject : TDOMNode):TStackItem;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PushStack( function PushStack(
AScopeObject : TDOMNode; AScopeObject : TDOMNode;
const AStyle : TArrayStyle; const AStyle : TArrayStyle;
const AItemName : string const AItemName : string
):TStackItem;overload; ):TStackItem;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
function FindAttributeByValueInNode( function FindAttributeByValueInNode(
Const AAttValue : String; Const AAttValue : String;
Const ANode : TDOMNode; Const ANode : TDOMNode;
@ -252,13 +252,13 @@ type
function GetNameSpaceShortName( function GetNameSpaceShortName(
const ANameSpace : string; const ANameSpace : string;
const ACreateIfNotFound : Boolean const ACreateIfNotFound : Boolean
):shortstring; ):shortstring;{$IFDEF USE_INLINE}inline;{$ENDIF}
protected protected
function GetCurrentScope():String; function GetCurrentScope():String;
function GetCurrentScopeObject():TDOMElement; function GetCurrentScopeObject():TDOMElement;
function StackTop():TStackItem; function StackTop():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PopStack():TStackItem; function PopStack():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure ClearStack(); procedure ClearStack();{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure BeginScope( procedure BeginScope(
Const AScopeName,ANameSpace : string; Const AScopeName,ANameSpace : string;
Const ANameSpaceShortName : string ; Const ANameSpaceShortName : string ;

View File

@ -150,66 +150,66 @@ type
FStack : TObjectStack; FStack : TObjectStack;
FSerializationStyle: TSerializationStyle; FSerializationStyle: TSerializationStyle;
private private
procedure InternalClear(const ACreateDoc : Boolean); procedure InternalClear(const ACreateDoc : Boolean);{$IFDEF USE_INLINE}inline;{$ENDIF}
function HasScope():Boolean;//inline; function HasScope():Boolean;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure CheckScope();//inline; procedure CheckScope();{$IFDEF USE_INLINE}inline;{$ENDIF}
function InternalPutData( function InternalPutData(
const AName : string; const AName : string;
const AType : TXmlRpcDataType; const AType : TXmlRpcDataType;
const AData : string const AData : string
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutEnum( function PutEnum(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TEnumIntType Const AData : TEnumIntType
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF FPC} {$IFDEF FPC}
function PutBool( function PutBool(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Boolean Const AData : Boolean
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
{$ENDIF} {$ENDIF}
function PutInt64( function PutInt64(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Int64 Const AData : Int64
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutStr( function PutStr(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : String Const AData : String
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PutFloat( function PutFloat(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : Extended Const AData : Extended
):TDOMNode; ):TDOMNode;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutObj( procedure PutObj(
Const AName : String; Const AName : String;
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Const AData : TObject Const AData : TObject
); ); {$IFDEF USE_INLINE}inline;{$ENDIF}
procedure PutRecord( procedure PutRecord(
const AName : string; const AName : string;
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
const AData : Pointer const AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetNodeValue(var AName : String):DOMString; function GetNodeValue(var AName : String):DOMString;
procedure GetEnum( procedure GetEnum(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TEnumIntType Var AData : TEnumIntType
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
{$IFDEF FPC} {$IFDEF FPC}
procedure GetBool( procedure GetBool(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Boolean Var AData : Boolean
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetInt( procedure GetInt(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
@ -220,36 +220,36 @@ type
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Int64 Var AData : Int64
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetFloat( procedure GetFloat(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : Extended Var AData : Extended
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetStr( procedure GetStr(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : String Var AData : String
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetObj( procedure GetObj(
Const ATypeInfo : PTypeInfo; Const ATypeInfo : PTypeInfo;
Var AName : String; Var AName : String;
Var AData : TObject Var AData : TObject
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure GetRecord( procedure GetRecord(
const ATypeInfo : PTypeInfo; const ATypeInfo : PTypeInfo;
var AName : String; var AName : String;
var AData : Pointer var AData : Pointer
); );{$IFDEF USE_INLINE}inline;{$ENDIF}
protected protected
function GetXmlDoc():TXMLDocument; function GetXmlDoc():TXMLDocument;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PushStack(AScopeObject : TDOMNode):TStackItem;overload; function PushStack(AScopeObject : TDOMNode):TStackItem;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PushStack( function PushStack(
AScopeObject : TDOMNode; AScopeObject : TDOMNode;
const AStyle : TArrayStyle; const AStyle : TArrayStyle;
const AItemName : string const AItemName : string
):TStackItem;overload; ):TStackItem;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PushStackParams(AScopeObject : TDOMNode) : TStackItem; function PushStackParams(AScopeObject : TDOMNode) : TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function FindAttributeByValueInNode( function FindAttributeByValueInNode(
Const AAttValue : String; Const AAttValue : String;
Const ANode : TDOMNode; Const ANode : TDOMNode;
@ -264,10 +264,10 @@ type
function FindAttributeByNameInScope(Const AAttName : String):String; function FindAttributeByNameInScope(Const AAttName : String):String;
protected protected
function GetCurrentScope():String; function GetCurrentScope():String;
function GetCurrentScopeObject():TDOMElement; function GetCurrentScopeObject():TDOMElement;{$IFDEF USE_INLINE}inline;{$ENDIF}
function StackTop():TStackItem; function StackTop():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
function PopStack():TStackItem; function PopStack():TStackItem;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure ClearStack(); procedure ClearStack();{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure BeginScope( procedure BeginScope(
Const AScopeName,ANameSpace : string; Const AScopeName,ANameSpace : string;
Const ANameSpaceShortName : string ; Const ANameSpaceShortName : string ;

View File

@ -100,7 +100,7 @@ end;
procedure TBinaryFormatter.BeginCallRead(ACallContext : ICallContext); procedure TBinaryFormatter.BeginCallRead(ACallContext : ICallContext);
Var Var
s,nme : string; s,nme : string;
e : EBaseRemoteException; e : EBinaryException;
begin begin
ClearStack(); ClearStack();
PushStack(GetRootData(),stObject); PushStack(GetRootData(),stObject);
@ -109,7 +109,7 @@ begin
s := StackTop().GetByIndex(0)^.Name; s := StackTop().GetByIndex(0)^.Name;
If AnsiSameText(s,'Fault') Then Begin If AnsiSameText(s,'Fault') Then Begin
BeginObjectRead(s,nil); BeginObjectRead(s,nil);
e := EBaseRemoteException.Create(''); e := EBinaryException.Create('');
Try Try
nme := 'faultcode'; nme := 'faultcode';
Get(TypeInfo(string),nme,s); Get(TypeInfo(string),nme,s);

View File

@ -17,10 +17,7 @@ unit binary_streamer;
interface interface
uses uses
Classes, SysUtils, Types; Classes, SysUtils, Types, wst_types;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
Const Const
MAX_ARRAY_LENGTH = 1024*1024; MAX_ARRAY_LENGTH = 1024*1024;
@ -89,8 +86,8 @@ Type
function ReadCurrency():TFloat_Currency_8; function ReadCurrency():TFloat_Currency_8;
End; End;
function CreateBinaryReader(AStream : TStream):IDataStoreReader; function CreateBinaryReader(AStream : TStream):IDataStoreReader;{$IFDEF USE_INLINE}inline;{$ENDIF}
function CreateBinaryWriter(AStream : TStream):IDataStore; function CreateBinaryWriter(AStream : TStream):IDataStore;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure ReverseBytes(var AData; const ALength : Integer);{$IFDEF USE_INLINE}{$IFDEF ENDIAN_BIG}inline;{$ENDIF}{$ENDIF} procedure ReverseBytes(var AData; const ALength : Integer);{$IFDEF USE_INLINE}{$IFDEF ENDIAN_BIG}inline;{$ENDIF}{$ENDIF}
function Reverse_16(const AValue:Word):Word;{$IFDEF USE_INLINE}inline;{$ENDIF} function Reverse_16(const AValue:Word):Word;{$IFDEF USE_INLINE}inline;{$ENDIF}

View File

@ -29,8 +29,8 @@ Type
TPublishedPropertyManager = class(TInterfacedObject,IPropertyManager) TPublishedPropertyManager = class(TInterfacedObject,IPropertyManager)
Private Private
FParent : TObject; FParent : TObject;
procedure Error(Const AMsg:string);overload; procedure Error(Const AMsg:string);overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure Error(Const AMsg:string; Const AArgs : array of const);overload; procedure Error(Const AMsg:string; Const AArgs : array of const);overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
Protected Protected
procedure SetProperty(Const AName,AValue:string); procedure SetProperty(Const AName,AValue:string);
procedure SetProperties(Const APropsStr:string); procedure SetProperties(Const APropsStr:string);
@ -42,7 +42,7 @@ Type
constructor Create(AParent : TObject); constructor Create(AParent : TObject);
End; End;
function IsStrEmpty(Const AStr:String):Boolean; function IsStrEmpty(Const AStr:String):Boolean;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetToken(var ABuffer : string; const ADelimiter : string): string; function GetToken(var ABuffer : string; const ADelimiter : string): string;
function ExtractOptionName(const ACompleteName : string):string; function ExtractOptionName(const ACompleteName : string):string;

View File

@ -27,6 +27,8 @@ type
Name : shortstring; Name : shortstring;
TypeInfo : PPTypeInfo; TypeInfo : PPTypeInfo;
Offset : PtrUInt; Offset : PtrUInt;
IsAttribute : Boolean;
Visible : Boolean;
end; end;
PRecordTypeData = ^TRecordTypeData; PRecordTypeData = ^TRecordTypeData;
@ -44,6 +46,8 @@ type
constructor Create(const AData : PRecordTypeData; const AFieldList : string); constructor Create(const AData : PRecordTypeData; const AFieldList : string);
destructor Destroy();override; destructor Destroy();override;
function GetRecordTypeData() : PRecordTypeData; function GetRecordTypeData() : PRecordTypeData;
function FindField(const AFieldName : shortstring) : PRecordFieldInfo;
function GetField(const AFieldName : shortstring) : PRecordFieldInfo;
end; end;
function MakeRecordTypeInfo(ARawTypeInfo : PTypeInfo) : PRecordTypeData; function MakeRecordTypeInfo(ARawTypeInfo : PTypeInfo) : PRecordTypeData;
@ -182,6 +186,7 @@ begin
fieldInfo := @(resBuffer^.Fields[(i - 1)]); fieldInfo := @(resBuffer^.Fields[(i - 1)]);
fieldInfo^.TypeInfo := fld^.TypeInfo; fieldInfo^.TypeInfo := fld^.TypeInfo;
fieldInfo^.Offset := fld^.Offset; fieldInfo^.Offset := fld^.Offset;
fieldInfo^.Visible := True;
end; end;
Result := resBuffer; Result := resBuffer;
end; end;
@ -258,6 +263,7 @@ begin
Inc(Temp,sizeof(Info)); Inc(Temp,sizeof(Info));
Offset := PLongint(Temp)^; Offset := PLongint(Temp)^;
fieldInfo^.Offset := Offset; fieldInfo^.Offset := Offset;
fieldInfo^.Visible := True;
Inc(Temp,sizeof(Offset)); Inc(Temp,sizeof(Offset));
end; end;
Result := resBuffer; Result := resBuffer;
@ -306,6 +312,30 @@ begin
Result := PRecordTypeData(Data); Result := PRecordTypeData(Data);
end; end;
function TRecordRttiDataObject.FindField(const AFieldName : shortstring) : PRecordFieldInfo;
var
i : PtrInt;
locData : PRecordTypeData;
locField : shortstring;
begin
Result := nil;
locData := PRecordTypeData(Data);
locField := UpperCase(AFieldName);
for i := 0 to Pred(locData^.FieldCount) do begin
if ( locField = UpperCase(locData^.Fields[i].Name) ) then begin
Result := @(locData^.Fields[i]);
Break;
end;
end;
end;
function TRecordRttiDataObject.GetField(const AFieldName : shortstring) : PRecordFieldInfo;
begin
Result := FindField(AFieldName);
if ( Result = nil ) then
raise Exception.CreateFmt('"%s" is not a field of "%s".',[AFieldName,GetRecordTypeData()^.Name]);
end;
initialization initialization
{$IFDEF WST_RECORD_RTTI} {$IFDEF WST_RECORD_RTTI}
RawTypeInfoList := TList.Create(); RawTypeInfoList := TList.Create();

View File

@ -12,7 +12,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value=".\"/> <IconPath Value=".\"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="1"/> <ActiveEditorIndexAtStart Value="2"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@ -35,7 +35,7 @@
<PackageName Value="indylaz"/> <PackageName Value="indylaz"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="72"> <Units Count="73">
<Unit0> <Unit0>
<Filename Value="http_server.pas"/> <Filename Value="http_server.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -421,8 +421,8 @@
<Unit53> <Unit53>
<Filename Value="..\..\config_objects.pas"/> <Filename Value="..\..\config_objects.pas"/>
<UnitName Value="config_objects"/> <UnitName Value="config_objects"/>
<CursorPos X="74" Y="99"/> <CursorPos X="19" Y="14"/>
<TopLine Value="85"/> <TopLine Value="1"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="27"/> <UsageCount Value="27"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@ -555,8 +555,19 @@
<TopLine Value="176"/> <TopLine Value="176"/>
<UsageCount Value="13"/> <UsageCount Value="13"/>
</Unit71> </Unit71>
<Unit72>
<Filename Value="..\..\wst_global.inc"/>
<CursorPos X="35" Y="3"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit72>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/> <JumpHistory Count="1" HistoryIndex="0">
<Position1>
<Filename Value="..\..\config_objects.pas"/>
<Caret Line="14" Column="19" TopLine="1"/>
</Position1>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>

View File

@ -355,16 +355,7 @@
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit42> </Unit42>
</Units> </Units>
<JumpHistory Count="2" HistoryIndex="1"> <JumpHistory Count="0" HistoryIndex="-1"/>
<Position1>
<Filename Value="user_client_console.pas"/>
<Caret Line="252" Column="5" TopLine="250"/>
</Position1>
<Position2>
<Filename Value="user_client_console.pas"/>
<Caret Line="8" Column="111" TopLine="1"/>
</Position2>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>

View File

@ -20,18 +20,12 @@ uses
base_service_intf, server_service_intf, base_service_intf, server_service_intf,
base_binary_formatter; base_binary_formatter;
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
const const
sBINARY_CONTENT_TYPE = 'binary'; sBINARY_CONTENT_TYPE = 'binary';
sPROTOCOL_NAME = sBINARY_CONTENT_TYPE; sPROTOCOL_NAME = sBINARY_CONTENT_TYPE;
procedure Server_service_RegisterBinaryFormat(); type
implementation
Type
{ TBinaryFormatter } { TBinaryFormatter }
@ -52,6 +46,12 @@ Type
procedure EndExceptionList(); procedure EndExceptionList();
End; End;
procedure Server_service_RegisterBinaryFormat();
implementation
Type
{ TBinaryFormatterFactory } { TBinaryFormatterFactory }
TBinaryFormatterFactory = class(TInterfacedObject,IItemFactory) TBinaryFormatterFactory = class(TInterfacedObject,IItemFactory)

View File

@ -85,10 +85,10 @@ Type
private private
procedure LoadProperties(); procedure LoadProperties();
protected protected
function GetTarget():String; function GetTarget():String;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetSerializer() : IFormatterClient; function GetSerializer() : IFormatterClient;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetCallHandler() : ICallMaker; function GetCallHandler() : ICallMaker;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetTransport() : ITransport; function GetTransport() : ITransport;{$IFDEF USE_INLINE}inline;{$ENDIF}
procedure MakeCall(); procedure MakeCall();
class function GetServiceType() : PTypeInfo;virtual;abstract; class function GetServiceType() : PTypeInfo;virtual;abstract;
@ -147,8 +147,8 @@ Type
); );
End; End;
function GetFormaterRegistry():IFormaterQueryRegistry; function GetFormaterRegistry():IFormaterQueryRegistry;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetTransportRegistry():ITransportRegistry; function GetTransportRegistry():ITransportRegistry;{$IFDEF USE_INLINE}inline;{$ENDIF}
implementation implementation
uses imp_utils, metadata_repository; uses imp_utils, metadata_repository;

View File

@ -1,3 +1,14 @@
{ This file is part of the Web Service Toolkit
Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
{$INCLUDE wst_global.inc} {$INCLUDE wst_global.inc}
unit test_utilities; unit test_utilities;

View File

@ -1,6 +1,6 @@
{ {
This file is part of the Web Service Toolkit This file is part of the Web Service Toolkit
Copyright (c) 2006 by Inoussa OUEDRAOGO Copyright (c) 2006, 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL). ( the files COPYING.modifiedLGPL and COPYING.LGPL).
@ -504,6 +504,17 @@ type
procedure ExceptBlock_client(); procedure ExceptBlock_client();
end; end;
{ TTest_BinaryFormatterExceptionBlock }
TTest_BinaryFormatterExceptionBlock = class(TTestCase)
protected
function CreateFormatter():IFormatterResponse;
function CreateFormatterClient():IFormatterClient;
published
procedure ExceptBlock_server();
procedure ExceptBlock_client();
end;
implementation implementation
uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_rtti, uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_rtti,
Math, imp_utils Math, imp_utils
@ -514,7 +525,8 @@ uses base_binary_formatter, base_soap_formatter, base_xmlrpc_formatter, record_r
, DOM, XMLRead, wst_fpc_xml , DOM, XMLRead, wst_fpc_xml
{$ENDIF} {$ENDIF}
, server_service_soap, soap_formatter, , server_service_soap, soap_formatter,
server_service_xmlrpc, xmlrpc_formatter; server_service_xmlrpc, xmlrpc_formatter,
binary_streamer, server_binary_formatter, binary_formatter;
function TTestFormatterSimpleType.Support_ComplextType_with_SimpleContent( ): Boolean; function TTestFormatterSimpleType.Support_ComplextType_with_SimpleContent( ): Boolean;
begin begin
@ -3725,6 +3737,130 @@ begin
end; end;
end; end;
{ TTest_BinaryFormatterExceptionBlock }
function TTest_BinaryFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
begin
Result := server_binary_formatter.TBinaryFormatter.Create() as IFormatterResponse;
end;
function TTest_BinaryFormatterExceptionBlock.CreateFormatterClient() : IFormatterClient;
begin
Result := binary_formatter.TBinaryFormatter.Create() as IFormatterClient;
end;
function loc_FindObj(const AOwner: PDataBuffer; const AName : TDataName) : PDataBuffer;
Var
p : PObjectBufferItem;
Begin
Assert(AOwner^.DataType >= dtObject);
Result := Nil;
p:= AOwner^.ObjectData^.Head;
While Assigned(p) Do Begin
If AnsiSameText(AName,p^.Data^.Name) Then Begin
Result := p^.Data;
Exit;
End;
p := p^.Next;
End;
End;
procedure TTest_BinaryFormatterExceptionBlock.ExceptBlock_server();
const VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
var
f : IFormatterResponse;
strm : TMemoryStream;
root, bodyNode, faultNode, tmpNode : PDataBuffer;
excpt_code, excpt_msg : string;
begin
root := nil;
f := CreateFormatter();
f.BeginExceptionList(VAL_CODE,VAL_MSG);
f.EndExceptionList();
strm := TMemoryStream.Create();
try
f.SaveToStream(strm);
strm.Position := 0;
root := LoadObjectFromStream(CreateBinaryReader(strm));
Check(Assigned(root));
CheckEquals(Ord(dtObject), Ord(root^.DataType),'root^.DataType');
Check(Assigned(root^.ObjectData),'root^.ObjectData');
CheckEquals(False,root^.ObjectData^.NilObject,'root^.NilObject');
Check(root^.ObjectData^.Count > 0, 'root^.Count');
bodyNode := root^.ObjectData^.Head^.Data;
Check(Assigned(bodyNode),'body');
CheckEquals(Ord(dtObject), Ord(bodyNode^.DataType),'body.DataType');
CheckEquals(False,bodyNode^.ObjectData^.NilObject,'body.NilObject');
Check(bodyNode^.ObjectData^.Count > 0, 'body.Count');
faultNode := bodyNode^.ObjectData^.Head^.Data;
Check(Assigned(faultNode),'fault');
CheckEquals(Ord(dtObject), Ord(faultNode^.DataType),'fault.DataType');
CheckEquals(False,faultNode^.ObjectData^.NilObject,'fault.NilObject');
Check(faultNode^.ObjectData^.Count > 0, 'fault.Count');
tmpNode := loc_FindObj(faultNode,'faultcode');
Check(Assigned(tmpNode),'faultcode');
CheckEquals(Ord(dtString), Ord(tmpNode^.DataType),'faultcode.DataType');
excpt_code := tmpNode^.StrData^.Data;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
tmpNode := loc_FindObj(faultNode,'faultstring');
Check(Assigned(tmpNode),'faultstring');
CheckEquals(Ord(dtString), Ord(tmpNode^.DataType),'faultstring.DataType');
excpt_msg := tmpNode^.StrData^.Data;
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
FreeAndNil(strm);
ClearObj(root);
end;
end;
procedure TTest_BinaryFormatterExceptionBlock.ExceptBlock_client();
const
VAL_CODE = '1210'; VAL_MSG = 'This is a sample exception message.';
var
f : IFormatterClient;
strm : TMemoryStream;
root, bodyNode, faultNode, tmpNode : PDataBuffer;
excpt_code, excpt_msg : string;
locStore : IDataStore;
begin
excpt_code := '';
excpt_msg := '';
root := CreateObjBuffer(dtObject,'ROOT');
try
bodyNode := CreateObjBuffer(dtObject,'Body',root);
faultNode := CreateObjBuffer(dtObject,'Fault',bodyNode);
CreateObjBuffer(dtString,'faultCode',faultNode)^.StrData^.Data := VAL_CODE;
CreateObjBuffer(dtString,'faultString',faultNode)^.StrData^.Data := VAL_MSG;
f := CreateFormatterClient();
strm := TMemoryStream.Create();
try
locStore := CreateBinaryWriter(strm);
SaveObjectToStream(root,locStore);
locStore := nil;
strm.Position := 0;
f.LoadFromStream(strm);
try
f.BeginCallRead(nil);
Check(False,'BeginCallRead() should raise an exception.');
except
on e : EBinaryException do begin
excpt_code := e.FaultCode;
excpt_msg := e.FaultString;
end;
end;
CheckEquals(VAL_CODE,excpt_code,'faultCode');
CheckEquals(VAL_MSG,excpt_msg,'faultString');
finally
FreeAndNil(strm);
end;
finally
ClearObj(root);
end;
end;
initialization initialization
RegisterStdTypes(); RegisterStdTypes();
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1'); GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1');
@ -3766,6 +3902,8 @@ initialization
{$IFDEF WST_RECORD_RTTI} {$IFDEF WST_RECORD_RTTI}
GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__TTestRecord_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].GetExternalPropertyName('__FIELDS__'))); GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__TTestRecord_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(TTestRecord)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI} {$ENDIF WST_RECORD_RTTI}
RegisterAttributeProperty(TypeInfo(TTestSmallRecord),'fieldWord');
RegisterAttributeProperty(TypeInfo(TTestRecord),'fieldWord');
{$IFDEF FPC} {$IFDEF FPC}
RegisterTest(TTestArray); RegisterTest(TTestArray);
@ -3782,6 +3920,7 @@ initialization
RegisterTest(TTestXmlRpcFormatter); RegisterTest(TTestXmlRpcFormatter);
RegisterTest(TTest_SoapFormatterExceptionBlock); RegisterTest(TTest_SoapFormatterExceptionBlock);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock); RegisterTest(TTest_XmlRpcFormatterExceptionBlock);
RegisterTest(TTest_BinaryFormatterExceptionBlock);
{$ELSE} {$ELSE}
RegisterTest(TTestArray.Suite); RegisterTest(TTestArray.Suite);
RegisterTest(TTestSOAPFormatter.Suite); RegisterTest(TTestSOAPFormatter.Suite);
@ -3797,6 +3936,7 @@ initialization
RegisterTest(TTestXmlRpcFormatter.Suite); RegisterTest(TTestXmlRpcFormatter.Suite);
RegisterTest(TTest_SoapFormatterExceptionBlock.Suite); RegisterTest(TTest_SoapFormatterExceptionBlock.Suite);
RegisterTest(TTest_XmlRpcFormatterExceptionBlock.Suite); RegisterTest(TTest_XmlRpcFormatterExceptionBlock.Suite);
RegisterTest(TTest_BinaryFormatterExceptionBlock.Suite);
{$ENDIF} {$ENDIF}

View File

@ -27,7 +27,7 @@
<PackageName Value="FPCUnitTestRunner"/> <PackageName Value="FPCUnitTestRunner"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="74"> <Units Count="75">
<Unit0> <Unit0>
<Filename Value="wst_test_suite.lpr"/> <Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -40,12 +40,12 @@
<Filename Value="testformatter_unit.pas"/> <Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/> <UnitName Value="testformatter_unit"/>
<CursorPos X="3" Y="901"/> <CursorPos X="27" Y="3935"/>
<TopLine Value="890"/> <TopLine Value="3914"/>
<EditorIndex Value="11"/> <EditorIndex Value="5"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="17" Y="1046" ID="3"/> <Item0 X="17" Y="1058" ID="3"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit1> </Unit1>
@ -55,27 +55,23 @@
<UnitName Value="server_service_soap"/> <UnitName Value="server_service_soap"/>
<CursorPos X="8" Y="182"/> <CursorPos X="8" Y="182"/>
<TopLine Value="161"/> <TopLine Value="161"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\..\soap_formatter.pas"/> <Filename Value="..\..\soap_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="soap_formatter"/> <UnitName Value="soap_formatter"/>
<CursorPos X="31" Y="148"/> <CursorPos X="33" Y="31"/>
<TopLine Value="148"/> <TopLine Value="22"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="..\..\base_binary_formatter.pas"/> <Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/> <UnitName Value="base_binary_formatter"/>
<CursorPos X="31" Y="19"/> <CursorPos X="28" Y="223"/>
<TopLine Value="13"/> <TopLine Value="211"/>
<EditorIndex Value="14"/> <EditorIndex Value="8"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
@ -83,8 +79,8 @@
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/> <UnitName Value="base_service_intf"/>
<CursorPos X="19" Y="10"/> <CursorPos X="26" Y="1232"/>
<TopLine Value="10"/> <TopLine Value="1220"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="2"> <Bookmarks Count="2">
@ -97,42 +93,36 @@
<Filename Value="..\..\base_soap_formatter.pas"/> <Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/> <UnitName Value="base_soap_formatter"/>
<CursorPos X="3" Y="1127"/> <CursorPos X="29" Y="225"/>
<TopLine Value="1116"/> <TopLine Value="209"/>
<EditorIndex Value="4"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="..\..\binary_formatter.pas"/> <Filename Value="..\..\binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="binary_formatter"/> <UnitName Value="binary_formatter"/>
<CursorPos X="12" Y="108"/> <CursorPos X="28" Y="112"/>
<TopLine Value="103"/> <TopLine Value="48"/>
<EditorIndex Value="15"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="..\..\binary_streamer.pas"/> <Filename Value="..\..\binary_streamer.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="binary_streamer"/> <UnitName Value="binary_streamer"/>
<CursorPos X="1" Y="14"/> <CursorPos X="95" Y="90"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Bookmarks Count="1"> <Bookmarks Count="1">
<Item0 X="38" Y="490" ID="2"/> <Item0 X="38" Y="487" ID="2"/>
</Bookmarks> </Bookmarks>
<Loaded Value="True"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="..\..\server_binary_formatter.pas"/> <Filename Value="..\..\server_binary_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_binary_formatter"/> <UnitName Value="server_binary_formatter"/>
<CursorPos X="22" Y="21"/> <CursorPos X="9" Y="123"/>
<TopLine Value="1"/> <TopLine Value="27"/>
<EditorIndex Value="9"/> <EditorIndex Value="4"/>
<UsageCount Value="200"/> <UsageCount Value="200"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit9> </Unit9>
@ -175,9 +165,9 @@
<Filename Value="..\..\metadata_wsdl.pas"/> <Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/> <UnitName Value="metadata_wsdl"/>
<CursorPos X="1" Y="22"/> <CursorPos X="43" Y="869"/>
<TopLine Value="1"/> <TopLine Value="834"/>
<EditorIndex Value="16"/> <EditorIndex Value="9"/>
<UsageCount Value="206"/> <UsageCount Value="206"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit14> </Unit14>
@ -186,63 +176,63 @@
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/> <CursorPos X="15" Y="429"/>
<TopLine Value="413"/> <TopLine Value="413"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/> <CursorPos X="13" Y="235"/>
<TopLine Value="215"/> <TopLine Value="215"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
<Filename Value="..\..\server_service_intf.pas"/> <Filename Value="..\..\server_service_intf.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_service_intf"/> <UnitName Value="server_service_intf"/>
<CursorPos X="25" Y="14"/> <CursorPos X="25" Y="14"/>
<TopLine Value="1"/> <TopLine Value="97"/>
<EditorIndex Value="6"/> <EditorIndex Value="3"/>
<UsageCount Value="203"/> <UsageCount Value="203"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit17> </Unit17>
<Unit18> <Unit18>
<Filename Value="..\..\service_intf.pas"/> <Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/> <UnitName Value="service_intf"/>
<CursorPos X="15" Y="15"/> <CursorPos X="15" Y="22"/>
<TopLine Value="1"/> <TopLine Value="10"/>
<EditorIndex Value="13"/> <EditorIndex Value="6"/>
<UsageCount Value="16"/> <UsageCount Value="23"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit18> </Unit18>
<Unit19> <Unit19>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/> <CursorPos X="3" Y="316"/>
<TopLine Value="304"/> <TopLine Value="304"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit19> </Unit19>
<Unit20> <Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/> <CursorPos X="3" Y="407"/>
<TopLine Value="404"/> <TopLine Value="404"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit20> </Unit20>
<Unit21> <Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/> <CursorPos X="3" Y="474"/>
<TopLine Value="471"/> <TopLine Value="471"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit21> </Unit21>
<Unit22> <Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/> <CursorPos X="27" Y="121"/>
<TopLine Value="104"/> <TopLine Value="104"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/> <Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/> <CursorPos X="9" Y="166"/>
<TopLine Value="142"/> <TopLine Value="142"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit23> </Unit23>
<Unit24> <Unit24>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/> <Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
@ -251,22 +241,22 @@
<UnitName Value="GuiTestRunner"/> <UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/> <CursorPos X="34" Y="32"/>
<TopLine Value="25"/> <TopLine Value="25"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit24> </Unit24>
<Unit25> <Unit25>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/> <CursorPos X="21" Y="94"/>
<TopLine Value="83"/> <TopLine Value="83"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit25> </Unit25>
<Unit26> <Unit26>
<Filename Value="..\..\imp_utils.pas"/> <Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/> <UnitName Value="imp_utils"/>
<CursorPos X="15" Y="50"/> <CursorPos X="12" Y="47"/>
<TopLine Value="8"/> <TopLine Value="182"/>
<EditorIndex Value="3"/> <EditorIndex Value="7"/>
<UsageCount Value="10"/> <UsageCount Value="15"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit26> </Unit26>
<Unit27> <Unit27>
@ -274,7 +264,7 @@
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/> <CursorPos X="43" Y="13"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="3"/> <UsageCount Value="2"/>
</Unit27> </Unit27>
<Unit28> <Unit28>
<Filename Value="test_parserdef.pas"/> <Filename Value="test_parserdef.pas"/>
@ -282,168 +272,166 @@
<UnitName Value="test_parserdef"/> <UnitName Value="test_parserdef"/>
<CursorPos X="93" Y="76"/> <CursorPos X="93" Y="76"/>
<TopLine Value="11"/> <TopLine Value="11"/>
<UsageCount Value="198"/> <UsageCount Value="200"/>
</Unit28> </Unit28>
<Unit29> <Unit29>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="190"/> <CursorPos X="8" Y="190"/>
<TopLine Value="133"/> <TopLine Value="133"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit29> </Unit29>
<Unit30> <Unit30>
<Filename Value="..\..\wst.inc"/> <Filename Value="..\..\wst.inc"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit30> </Unit30>
<Unit31> <Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\heaph.inc"/> <Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\heaph.inc"/>
<CursorPos X="43" Y="100"/> <CursorPos X="43" Y="100"/>
<TopLine Value="83"/> <TopLine Value="83"/>
<UsageCount Value="2"/> <UsageCount Value="1"/>
</Unit31> </Unit31>
<Unit32> <Unit32>
<Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/> <Filename Value="..\test_fpc\interface_problem\interface_problem.pas"/>
<UnitName Value="interface_problem"/> <UnitName Value="interface_problem"/>
<CursorPos X="1" Y="10"/> <CursorPos X="1" Y="10"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit32> </Unit32>
<Unit33> <Unit33>
<Filename Value="..\..\base_xmlrpc_formatter.pas"/> <Filename Value="..\..\base_xmlrpc_formatter.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="base_xmlrpc_formatter"/> <UnitName Value="base_xmlrpc_formatter"/>
<CursorPos X="32" Y="64"/> <CursorPos X="35" Y="355"/>
<TopLine Value="49"/> <TopLine Value="330"/>
<EditorIndex Value="5"/> <UsageCount Value="151"/>
<UsageCount Value="136"/>
<Loaded Value="True"/>
</Unit33> </Unit33>
<Unit34> <Unit34>
<Filename Value="..\..\ws_helper\pscanner.pp"/> <Filename Value="..\..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/> <UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/> <CursorPos X="19" Y="505"/>
<TopLine Value="491"/> <TopLine Value="491"/>
<UsageCount Value="17"/> <UsageCount Value="16"/>
</Unit34> </Unit34>
<Unit35> <Unit35>
<Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/> <Filename Value="..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/> <UnitName Value="pascal_parser_intf"/>
<CursorPos X="62" Y="296"/> <CursorPos X="62" Y="296"/>
<TopLine Value="296"/> <TopLine Value="296"/>
<UsageCount Value="27"/> <UsageCount Value="26"/>
</Unit35> </Unit35>
<Unit36> <Unit36>
<Filename Value="..\..\ws_helper\pastree.pp"/> <Filename Value="..\..\ws_helper\pastree.pp"/>
<UnitName Value="PasTree"/> <UnitName Value="PasTree"/>
<CursorPos X="18" Y="254"/> <CursorPos X="18" Y="254"/>
<TopLine Value="243"/> <TopLine Value="243"/>
<UsageCount Value="17"/> <UsageCount Value="16"/>
</Unit36> </Unit36>
<Unit37> <Unit37>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="38" Y="225"/> <CursorPos X="38" Y="225"/>
<TopLine Value="203"/> <TopLine Value="203"/>
<UsageCount Value="16"/> <UsageCount Value="15"/>
</Unit37> </Unit37>
<Unit38> <Unit38>
<Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/> <Filename Value="..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/> <UnitName Value="cursor_intf"/>
<CursorPos X="3" Y="75"/> <CursorPos X="3" Y="75"/>
<TopLine Value="70"/> <TopLine Value="70"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit38> </Unit38>
<Unit39> <Unit39>
<Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/> <Filename Value="..\..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/> <UnitName Value="dom_cursors"/>
<CursorPos X="3" Y="182"/> <CursorPos X="3" Y="182"/>
<TopLine Value="180"/> <TopLine Value="180"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit39> </Unit39>
<Unit40> <Unit40>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-fpcunit\src\fpcunit.pp"/>
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="1" Y="446"/> <CursorPos X="1" Y="446"/>
<TopLine Value="434"/> <TopLine Value="434"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit40> </Unit40>
<Unit41> <Unit41>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\i386\i386.inc"/>
<CursorPos X="1" Y="1284"/> <CursorPos X="1" Y="1284"/>
<TopLine Value="1268"/> <TopLine Value="1268"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit41> </Unit41>
<Unit42> <Unit42>
<Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="1" Y="107"/> <CursorPos X="1" Y="107"/>
<TopLine Value="95"/> <TopLine Value="95"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit42> </Unit42>
<Unit43> <Unit43>
<Filename Value="..\..\semaphore.pas"/> <Filename Value="..\..\semaphore.pas"/>
<UnitName Value="semaphore"/> <UnitName Value="semaphore"/>
<CursorPos X="3" Y="30"/> <CursorPos X="3" Y="30"/>
<TopLine Value="23"/> <TopLine Value="23"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit43> </Unit43>
<Unit44> <Unit44>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="14" Y="351"/> <CursorPos X="14" Y="351"/>
<TopLine Value="336"/> <TopLine Value="336"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit44> </Unit44>
<Unit45> <Unit45>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win32\system.pp"/>
<UnitName Value="System"/> <UnitName Value="System"/>
<CursorPos X="22" Y="33"/> <CursorPos X="22" Y="33"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit45> </Unit45>
<Unit46> <Unit46>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/> <UnitName Value="contnrs"/>
<CursorPos X="3" Y="964"/> <CursorPos X="3" Y="964"/>
<TopLine Value="962"/> <TopLine Value="962"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit46> </Unit46>
<Unit47> <Unit47>
<Filename Value="..\..\wst_delphi.inc"/> <Filename Value="..\..\wst_delphi.inc"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit47> </Unit47>
<Unit48> <Unit48>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/> <UnitName Value="strutils"/>
<CursorPos X="10" Y="29"/> <CursorPos X="10" Y="29"/>
<TopLine Value="14"/> <TopLine Value="14"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit48> </Unit48>
<Unit49> <Unit49>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="20" Y="168"/> <CursorPos X="26" Y="173"/>
<TopLine Value="166"/> <TopLine Value="156"/>
<UsageCount Value="5"/> <UsageCount Value="9"/>
</Unit49> </Unit49>
<Unit50> <Unit50>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="442"/> <CursorPos X="11" Y="333"/>
<TopLine Value="556"/> <TopLine Value="375"/>
<UsageCount Value="5"/> <UsageCount Value="9"/>
</Unit50> </Unit50>
<Unit51> <Unit51>
<Filename Value="..\..\wst_fpc_xml.pas"/> <Filename Value="..\..\wst_fpc_xml.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wst_fpc_xml"/> <UnitName Value="wst_fpc_xml"/>
<CursorPos X="3" Y="53"/> <CursorPos X="65" Y="85"/>
<TopLine Value="51"/> <TopLine Value="56"/>
<UsageCount Value="82"/> <UsageCount Value="97"/>
</Unit51> </Unit51>
<Unit52> <Unit52>
<Filename Value="..\..\wst_global.inc"/> <Filename Value="..\..\wst_global.inc"/>
<CursorPos X="20" Y="11"/> <CursorPos X="3" Y="4"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit52> </Unit52>
@ -452,16 +440,16 @@
<UnitName Value="CustApp"/> <UnitName Value="CustApp"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="5"/> <UsageCount Value="4"/>
</Unit53> </Unit53>
<Unit54> <Unit54>
<Filename Value="test_utilities.pas"/> <Filename Value="test_utilities.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_utilities"/> <UnitName Value="test_utilities"/>
<CursorPos X="71" Y="3"/> <CursorPos X="1" Y="1"/>
<TopLine Value="3"/> <TopLine Value="1"/>
<EditorIndex Value="17"/> <EditorIndex Value="10"/>
<UsageCount Value="73"/> <UsageCount Value="88"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit54> </Unit54>
<Unit55> <Unit55>
@ -469,60 +457,60 @@
<UnitName Value="fpcunit"/> <UnitName Value="fpcunit"/>
<CursorPos X="66" Y="231"/> <CursorPos X="66" Y="231"/>
<TopLine Value="231"/> <TopLine Value="231"/>
<UsageCount Value="13"/> <UsageCount Value="12"/>
</Unit55> </Unit55>
<Unit56> <Unit56>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testregistry.pp"/>
<UnitName Value="testregistry"/> <UnitName Value="testregistry"/>
<CursorPos X="11" Y="32"/> <CursorPos X="11" Y="32"/>
<TopLine Value="17"/> <TopLine Value="17"/>
<UsageCount Value="15"/> <UsageCount Value="14"/>
</Unit56> </Unit56>
<Unit57> <Unit57>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\testdecorator.pp"/>
<UnitName Value="testdecorator"/> <UnitName Value="testdecorator"/>
<CursorPos X="3" Y="30"/> <CursorPos X="3" Y="30"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit57> </Unit57>
<Unit58> <Unit58>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-fpcunit\src\DUnitCompatibleInterface.inc"/>
<CursorPos X="21" Y="9"/> <CursorPos X="21" Y="9"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="12"/> <UsageCount Value="11"/>
</Unit58> </Unit58>
<Unit59> <Unit59>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/> <UnitName Value="typinfo"/>
<CursorPos X="79" Y="218"/> <CursorPos X="53" Y="41"/>
<TopLine Value="203"/> <TopLine Value="37"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit59> </Unit59>
<Unit60> <Unit60>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="89" Y="122"/> <CursorPos X="89" Y="122"/>
<TopLine Value="106"/> <TopLine Value="106"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit60> </Unit60>
<Unit61> <Unit61>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysinth.inc"/>
<CursorPos X="24" Y="63"/> <CursorPos X="24" Y="63"/>
<TopLine Value="46"/> <TopLine Value="46"/>
<UsageCount Value="9"/> <UsageCount Value="8"/>
</Unit61> </Unit61>
<Unit62> <Unit62>
<Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/> <Filename Value="..\..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/> <UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit62> </Unit62>
<Unit63> <Unit63>
<Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/> <Filename Value="..\..\..\..\..\..\lazarus2204\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/> <UnitName Value="DOM"/>
<CursorPos X="3" Y="196"/> <CursorPos X="3" Y="196"/>
<TopLine Value="191"/> <TopLine Value="191"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit63> </Unit63>
<Unit64> <Unit64>
<Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/> <Filename Value="..\..\type_lib_edtr\umoduleedit.pas"/>
@ -532,7 +520,7 @@
<UnitName Value="umoduleedit"/> <UnitName Value="umoduleedit"/>
<CursorPos X="47" Y="21"/> <CursorPos X="47" Y="21"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit64> </Unit64>
<Unit65> <Unit65>
<Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/> <Filename Value="..\..\type_lib_edtr\ubindingedit.pas"/>
@ -542,7 +530,7 @@
<UnitName Value="ubindingedit"/> <UnitName Value="ubindingedit"/>
<CursorPos X="41" Y="21"/> <CursorPos X="41" Y="21"/>
<TopLine Value="18"/> <TopLine Value="18"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit65> </Unit65>
<Unit66> <Unit66>
<Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/> <Filename Value="..\..\type_lib_edtr\ufarrayedit.pas"/>
@ -552,7 +540,7 @@
<UnitName Value="ufarrayedit"/> <UnitName Value="ufarrayedit"/>
<CursorPos X="41" Y="9"/> <CursorPos X="41" Y="9"/>
<TopLine Value="5"/> <TopLine Value="5"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit66> </Unit66>
<Unit67> <Unit67>
<Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/> <Filename Value="..\..\type_lib_edtr\uftypealiasedit.pas"/>
@ -562,7 +550,7 @@
<UnitName Value="uftypealiasedit"/> <UnitName Value="uftypealiasedit"/>
<CursorPos X="22" Y="9"/> <CursorPos X="22" Y="9"/>
<TopLine Value="7"/> <TopLine Value="7"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit67> </Unit67>
<Unit68> <Unit68>
<Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/> <Filename Value="..\..\type_lib_edtr\ufrmsaveoption.pas"/>
@ -572,22 +560,22 @@
<UnitName Value="ufrmsaveoption"/> <UnitName Value="ufrmsaveoption"/>
<CursorPos X="22" Y="9"/> <CursorPos X="22" Y="9"/>
<TopLine Value="6"/> <TopLine Value="6"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit68> </Unit68>
<Unit69> <Unit69>
<Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/> <Filename Value="..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="4" Y="64"/> <CursorPos X="4" Y="64"/>
<TopLine Value="64"/> <TopLine Value="64"/>
<UsageCount Value="8"/> <UsageCount Value="7"/>
</Unit69> </Unit69>
<Unit70> <Unit70>
<Filename Value="..\..\server_service_xmlrpc.pas"/> <Filename Value="..\..\server_service_xmlrpc.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="server_service_xmlrpc"/> <UnitName Value="server_service_xmlrpc"/>
<CursorPos X="14" Y="144"/> <CursorPos X="10" Y="131"/>
<TopLine Value="136"/> <TopLine Value="116"/>
<EditorIndex Value="10"/> <EditorIndex Value="1"/>
<UsageCount Value="27"/> <UsageCount Value="42"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit70> </Unit70>
<Unit71> <Unit71>
@ -595,52 +583,152 @@
<UnitName Value="XMLRead"/> <UnitName Value="XMLRead"/>
<CursorPos X="6" Y="37"/> <CursorPos X="6" Y="37"/>
<TopLine Value="31"/> <TopLine Value="31"/>
<UsageCount Value="10"/> <UsageCount Value="9"/>
</Unit71> </Unit71>
<Unit72> <Unit72>
<Filename Value="..\..\xmlrpc_formatter.pas"/> <Filename Value="..\..\xmlrpc_formatter.pas"/>
<UnitName Value="xmlrpc_formatter"/> <UnitName Value="xmlrpc_formatter"/>
<CursorPos X="31" Y="131"/> <CursorPos X="31" Y="131"/>
<TopLine Value="116"/> <TopLine Value="116"/>
<EditorIndex Value="12"/> <UsageCount Value="11"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit72> </Unit72>
<Unit73> <Unit73>
<Filename Value="..\..\record_rtti.pas"/> <Filename Value="..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/> <UnitName Value="record_rtti"/>
<CursorPos X="3" Y="248"/> <CursorPos X="1" Y="1"/>
<TopLine Value="13"/> <TopLine Value="265"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="10"/> <UsageCount Value="17"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit73> </Unit73>
<Unit74>
<Filename Value="..\..\wst_rtl_imp.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit74>
</Units> </Units>
<JumpHistory Count="6" HistoryIndex="5"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1211" Column="10" TopLine="1211"/> <Caret Line="4784" Column="33" TopLine="4769"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/> <Caret Line="1356" Column="38" TopLine="1346"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="..\..\base_service_intf.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4614" Column="1" TopLine="4572"/> <Caret Line="1403" Column="82" TopLine="1388"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="..\..\server_binary_formatter.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="121" Column="11" TopLine="111"/> <Caret Line="1422" Column="82" TopLine="1406"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="..\..\server_binary_formatter.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="21" Column="22" TopLine="1"/> <Caret Line="1816" Column="31" TopLine="1795"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="..\..\base_binary_formatter.pas"/> <Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="19" Column="31" TopLine="13"/> <Caret Line="3848" Column="31" TopLine="3827"/>
</Position6> </Position6>
<Position7>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4784" Column="55" TopLine="4778"/>
</Position7>
<Position8>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position8>
<Position9>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1191" Column="17" TopLine="1176"/>
</Position9>
<Position10>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1231" Column="32" TopLine="1216"/>
</Position10>
<Position11>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1228" Column="13" TopLine="1213"/>
</Position11>
<Position12>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position12>
<Position13>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1191" Column="32" TopLine="1176"/>
</Position13>
<Position14>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1235" Column="84" TopLine="1220"/>
</Position14>
<Position15>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1403" Column="82" TopLine="1388"/>
</Position15>
<Position16>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1421" Column="82" TopLine="1406"/>
</Position16>
<Position17>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1816" Column="31" TopLine="1789"/>
</Position17>
<Position18>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3848" Column="31" TopLine="3827"/>
</Position18>
<Position19>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4786" Column="25" TopLine="4777"/>
</Position19>
<Position20>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1359" Column="50" TopLine="1337"/>
</Position20>
<Position21>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4783" Column="27" TopLine="4761"/>
</Position21>
<Position22>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1359" Column="47" TopLine="1337"/>
</Position22>
<Position23>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4740" Column="9" TopLine="4668"/>
</Position23>
<Position24>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="4808" Column="35" TopLine="4794"/>
</Position24>
<Position25>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="180" Column="15" TopLine="177"/>
</Position25>
<Position26>
<Filename Value="..\..\server_service_xmlrpc.pas"/>
<Caret Line="144" Column="14" TopLine="130"/>
</Position26>
<Position27>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="3890" Column="49" TopLine="3890"/>
</Position27>
<Position28>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="1483" Column="30" TopLine="1465"/>
</Position28>
<Position29>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="3538" Column="39" TopLine="3538"/>
</Position29>
<Position30>
<Filename Value="..\..\record_rtti.pas"/>
<Caret Line="265" Column="32" TopLine="232"/>
</Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -7,6 +7,7 @@
{$UNDEF USE_INLINE} {$UNDEF USE_INLINE}
{$DEFINE WST_RECORD_RTTI} {$DEFINE WST_RECORD_RTTI}
{$ENDIF} {$ENDIF}
{$IFDEF CPU86} {$IFDEF CPU86}
{$DEFINE HAS_COMP} {$DEFINE HAS_COMP}
{$ENDIF} {$ENDIF}