You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2014/10/03 20:13:26 UTC

[05/10] THRIFT-2768: Whitespace Fixup Client: C#, Delphi Patch: Jens Geyer

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/delphi/src/Thrift.Protocol.pas
----------------------------------------------------------------------
diff --git a/lib/delphi/src/Thrift.Protocol.pas b/lib/delphi/src/Thrift.Protocol.pas
index 4d92cb1..6cff09c 100644
--- a/lib/delphi/src/Thrift.Protocol.pas
+++ b/lib/delphi/src/Thrift.Protocol.pas
@@ -1,505 +1,505 @@
-(*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *)
-
-{$SCOPEDENUMS ON}
-
-unit Thrift.Protocol;
-
-interface
-
-uses
-  Classes,
-  SysUtils,
-  Contnrs,
-  Thrift.Stream,
-  Thrift.Collections,
-  Thrift.Transport;
-
-type
-
-  TType = (
-    Stop = 0,
-    Void = 1,
-    Bool_ = 2,
-    Byte_ = 3,
-    Double_ = 4,
-    I16 = 6,
-    I32 = 8,
-    I64 = 10,
-    String_ = 11,
-    Struct = 12,
-    Map = 13,
-    Set_ = 14,
-    List = 15
-  );
-
-  TMessageType = (
-    Call = 1,
-    Reply = 2,
-    Exception = 3,
-    Oneway = 4
-  );
-
-  IProtocol = interface;
-  IStruct = interface;
-
-  IProtocolFactory = interface
-    ['{7CD64A10-4E9F-4E99-93BF-708A31F4A67B}']
-    function GetProtocol( const trans: ITransport): IProtocol;
-  end;
-
-  TThriftStringBuilder = class( TStringBuilder)
-  public
-    function Append(const Value: TBytes): TStringBuilder; overload;
-    function Append(const Value: IThriftContainer): TStringBuilder; overload;
-  end;
-
-  TProtocolException = class( Exception )
-  public
-    const // TODO(jensg): change into enum
-      UNKNOWN : Integer = 0;
-      INVALID_DATA : Integer = 1;
-      NEGATIVE_SIZE : Integer = 2;
-      SIZE_LIMIT : Integer = 3;
-      BAD_VERSION : Integer = 4;
-      NOT_IMPLEMENTED : Integer = 5;
-      DEPTH_LIMIT : Integer = 6;
-  protected
-    FType : Integer;
-  public
-    constructor Create; overload;
-    constructor Create( type_: Integer ); overload;
-    constructor Create( type_: Integer; const msg: string); overload;
-  end;
-
-  IMap = interface
-    ['{30531D97-7E06-4233-B800-C3F53CCD23E7}']
-    function GetKeyType: TType;
-    procedure SetKeyType( Value: TType);
-    function GetValueType: TType;
-    procedure SetValueType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-    property KeyType: TType read GetKeyType write SetKeyType;
-    property ValueType: TType read GetValueType write SetValueType;
-    property Count: Integer read GetCount write SetCount;
-  end;
-
-  TMapImpl = class( TInterfacedObject, IMap)
-  private
-    FValueType: TType;
-    FKeyType: TType;
-    FCount: Integer;
-  protected
-    function GetKeyType: TType;
-    procedure SetKeyType( Value: TType);
-    function GetValueType: TType;
-    procedure SetValueType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-  public
-    constructor Create( AValueType: TType; AKeyType: TType; ACount: Integer); overload;
-    constructor Create; overload;
-  end;
-
-  IList = interface
-    ['{6763E1EA-A934-4472-904F-0083980B9B87}']
-    function GetElementType: TType;
-    procedure SetElementType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-    property ElementType: TType read GetElementType write SetElementType;
-    property Count: Integer read GetCount write SetCount;
-  end;
-
-  TListImpl = class( TInterfacedObject, IList)
-  private
-    FElementType: TType;
-    FCount : Integer;
-  protected
-    function GetElementType: TType;
-    procedure SetElementType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-  public
-    constructor Create( AElementType: TType; ACount: Integer); overload;
-    constructor Create; overload;
-  end;
-
-  ISet = interface
-    ['{A8671700-7514-4C1E-8A05-62786872005F}']
-    function GetElementType: TType;
-    procedure SetElementType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-    property ElementType: TType read GetElementType write SetElementType;
-    property Count: Integer read GetCount write SetCount;
-  end;
-
-  TSetImpl = class( TInterfacedObject, ISet)
-  private
-    FCount: Integer;
-    FElementType: TType;
-  protected
-    function GetElementType: TType;
-    procedure SetElementType( Value: TType);
-    function GetCount: Integer;
-    procedure SetCount( Value: Integer);
-  public
-    constructor Create( AElementType: TType; ACount: Integer); overload;
-    constructor Create; overload;
-  end;
-
-  IMessage = interface
-    ['{9E368B4A-B1FA-43E7-8CF5-56C66D256CA7}']
-    function GetName: string;
-    procedure SetName( const Value: string);
-    function GetType: TMessageType;
-    procedure SetType( Value: TMessageType);
-    function GetSeqID: Integer;
-    procedure SetSeqID( Value: Integer);
-    property Name: string read GetName write SetName;
-    property Type_: TMessageType read GetType write SetType;
-    property SeqID: Integer read GetSeqID write SetSeqID;
-  end;
-
-  TMessageImpl = class( TInterfacedObject, IMessage )
-  private
-    FName: string;
-    FMessageType: TMessageType;
-    FSeqID: Integer;
-  protected
-    function GetName: string;
-    procedure SetName( const Value: string);
-    function GetType: TMessageType;
-    procedure SetType( Value: TMessageType);
-    function GetSeqID: Integer;
-    procedure SetSeqID( Value: Integer);
-  public
-    property Name: string read FName write FName;
-    property Type_: TMessageType read FMessageType write FMessageType;
-    property SeqID: Integer read FSeqID write FSeqID;
-    constructor Create( AName: string; AMessageType: TMessageType; ASeqID: Integer); overload;
-    constructor Create; overload;
-  end;
-
-  IField = interface
-    ['{F0D43BE5-7883-442E-83FF-0580CC632B72}']
-    function GetName: string;
-    procedure SetName( const Value: string);
-    function GetType: TType;
-    procedure SetType( Value: TType);
-    function GetId: SmallInt;
-    procedure SetId( Value: SmallInt);
-    property Name: string read GetName write SetName;
-    property Type_: TType read GetType write SetType;
-    property Id: SmallInt read GetId write SetId;
-  end;
-
-  TFieldImpl = class( TInterfacedObject, IField)
-  private
-    FName : string;
-    FType : TType;
-    FId   : SmallInt;
-  protected
-    function GetName: string;
-    procedure SetName( const Value: string);
-    function GetType: TType;
-    procedure SetType( Value: TType);
-    function GetId: SmallInt;
-    procedure SetId( Value: SmallInt);
-  public
-    constructor Create( const AName: string; const AType: TType; AId: SmallInt); overload;
-    constructor Create; overload;
-  end;
-
-  TProtocolUtil = class
-  public
-    class procedure Skip( prot: IProtocol; type_: TType);
-  end;
-
-  IProtocol = interface
-    ['{FD95C151-1527-4C96-8134-B902BFC4B4FC}']
-    function GetTransport: ITransport;
-    procedure WriteMessageBegin( const msg: IMessage);
-    procedure WriteMessageEnd;
-    procedure WriteStructBegin( const struc: IStruct);
-    procedure WriteStructEnd;
-    procedure WriteFieldBegin( const field: IField);
-    procedure WriteFieldEnd;
-    procedure WriteFieldStop;
-    procedure WriteMapBegin( const map: IMap);
-    procedure WriteMapEnd;
-    procedure WriteListBegin( const list: IList);
-    procedure WriteListEnd();
-    procedure WriteSetBegin( const set_: ISet );
-    procedure WriteSetEnd();
-    procedure WriteBool( b: Boolean);
-    procedure WriteByte( b: ShortInt);
-    procedure WriteI16( i16: SmallInt);
-    procedure WriteI32( i32: Integer);
-    procedure WriteI64( const i64: Int64);
-    procedure WriteDouble( const d: Double);
-    procedure WriteString( const s: string );
-    procedure WriteAnsiString( const s: AnsiString);
-    procedure WriteBinary( const b: TBytes);
-
-    function ReadMessageBegin: IMessage;
-    procedure ReadMessageEnd();
-    function ReadStructBegin: IStruct;
-    procedure ReadStructEnd;
-    function ReadFieldBegin: IField;
-    procedure ReadFieldEnd();
-    function ReadMapBegin: IMap;
-    procedure ReadMapEnd();
-    function ReadListBegin: IList;
-    procedure ReadListEnd();
-    function ReadSetBegin: ISet;
-    procedure ReadSetEnd();
-    function ReadBool: Boolean;
-    function ReadByte: ShortInt;
-    function ReadI16: SmallInt;
-    function ReadI32: Integer;
-    function ReadI64: Int64;
-    function ReadDouble:Double;
-    function ReadBinary: TBytes;
-    function ReadString: string;
-    function ReadAnsiString: AnsiString;
-    property Transport: ITransport read GetTransport;
-  end;
-
-  TProtocolImpl = class abstract( TInterfacedObject, IProtocol)
-  protected
-    FTrans : ITransport;
-    function GetTransport: ITransport;
-  public
-    procedure WriteMessageBegin( const msg: IMessage); virtual; abstract;
-    procedure WriteMessageEnd; virtual; abstract;
-    procedure WriteStructBegin( const struc: IStruct); virtual; abstract;
-    procedure WriteStructEnd; virtual; abstract;
-    procedure WriteFieldBegin( const field: IField); virtual; abstract;
-    procedure WriteFieldEnd; virtual; abstract;
-    procedure WriteFieldStop; virtual; abstract;
-    procedure WriteMapBegin( const map: IMap); virtual; abstract;
-    procedure WriteMapEnd; virtual; abstract;
-    procedure WriteListBegin( const list: IList); virtual; abstract;
-    procedure WriteListEnd(); virtual; abstract;
-    procedure WriteSetBegin( const set_: ISet ); virtual; abstract;
-    procedure WriteSetEnd(); virtual; abstract;
-    procedure WriteBool( b: Boolean); virtual; abstract;
-    procedure WriteByte( b: ShortInt); virtual; abstract;
-    procedure WriteI16( i16: SmallInt); virtual; abstract;
-    procedure WriteI32( i32: Integer); virtual; abstract;
-    procedure WriteI64( const i64: Int64); virtual; abstract;
-    procedure WriteDouble( const d: Double); virtual; abstract;
-    procedure WriteString( const s: string ); virtual;
-    procedure WriteAnsiString( const s: AnsiString); virtual;
-    procedure WriteBinary( const b: TBytes); virtual; abstract;
-
-    function ReadMessageBegin: IMessage; virtual; abstract;
-    procedure ReadMessageEnd(); virtual; abstract;
-    function ReadStructBegin: IStruct; virtual; abstract;
-    procedure ReadStructEnd; virtual; abstract;
-    function ReadFieldBegin: IField; virtual; abstract;
-    procedure ReadFieldEnd(); virtual; abstract;
-    function ReadMapBegin: IMap; virtual; abstract;
-    procedure ReadMapEnd(); virtual; abstract;
-    function ReadListBegin: IList; virtual; abstract;
-    procedure ReadListEnd(); virtual; abstract;
-    function ReadSetBegin: ISet; virtual; abstract;
-    procedure ReadSetEnd(); virtual; abstract;
-    function ReadBool: Boolean; virtual; abstract;
-    function ReadByte: ShortInt; virtual; abstract;
-    function ReadI16: SmallInt; virtual; abstract;
-    function ReadI32: Integer; virtual; abstract;
-    function ReadI64: Int64; virtual; abstract;
-    function ReadDouble:Double; virtual; abstract;
-    function ReadBinary: TBytes; virtual; abstract;
-    function ReadString: string; virtual;
-    function ReadAnsiString: AnsiString; virtual;
-
-    property Transport: ITransport read GetTransport;
-
-    constructor Create( trans: ITransport );
-  end;
-
-  IBase = interface
-    ['{08D9BAA8-5EAA-410F-B50B-AC2E6E5E4155}']
-    function ToString: string;
-    procedure Read( const iprot: IProtocol);
-    procedure Write( const iprot: IProtocol);
-  end;
-
-  IStruct = interface
-    ['{5DCE39AA-C916-4BC7-A79B-96A0C36B2220}']
-    procedure SetName(const Value: string);
-    function GetName: string;
-    property Name: string read GetName write SetName;
-  end;
-
-  TStructImpl = class( TInterfacedObject, IStruct )
-  private
-    FName: string;
-  protected
-    function GetName: string;
-    procedure SetName(const Value: string);
-  public
-    constructor Create( const AName: string);
-  end;
-
-  TBinaryProtocolImpl = class( TProtocolImpl )
-  protected
-    const
-      VERSION_MASK : Cardinal = $ffff0000;
-      VERSION_1 : Cardinal = $80010000;
-  protected
-    FStrictRead : Boolean;
-    FStrictWrite : Boolean;
-
-  private
-    function ReadAll( var buf: TBytes; off: Integer; len: Integer ): Integer;
-    function ReadStringBody( size: Integer): string;
-
-  public
-
-    type
-      TFactory = class( TInterfacedObject, IProtocolFactory)
-      protected
-        FStrictRead : Boolean;
-        FStrictWrite : Boolean;
-      public
-        function GetProtocol( const trans: ITransport): IProtocol;
-        constructor Create( AStrictRead, AStrictWrite: Boolean ); overload;
-        constructor Create; overload;
-      end;
-
-    constructor Create( const trans: ITransport); overload;
-    constructor Create( const trans: ITransport; strictRead: Boolean; strictWrite: Boolean); overload;
-
-    procedure WriteMessageBegin( const msg: IMessage); override;
-    procedure WriteMessageEnd; override;
-    procedure WriteStructBegin( const struc: IStruct); override;
-    procedure WriteStructEnd; override;
-    procedure WriteFieldBegin( const field: IField); override;
-    procedure WriteFieldEnd; override;
-    procedure WriteFieldStop; override;
-    procedure WriteMapBegin( const map: IMap); override;
-    procedure WriteMapEnd; override;
-    procedure WriteListBegin( const list: IList); override;
-    procedure WriteListEnd(); override;
-    procedure WriteSetBegin( const set_: ISet ); override;
-    procedure WriteSetEnd(); override;
-    procedure WriteBool( b: Boolean); override;
-    procedure WriteByte( b: ShortInt); override;
-    procedure WriteI16( i16: SmallInt); override;
-    procedure WriteI32( i32: Integer); override;
-    procedure WriteI64( const i64: Int64); override;
-    procedure WriteDouble( const d: Double); override;
-    procedure WriteBinary( const b: TBytes); override;
-
-    function ReadMessageBegin: IMessage; override;
-    procedure ReadMessageEnd(); override;
-    function ReadStructBegin: IStruct; override;
-    procedure ReadStructEnd; override;
-    function ReadFieldBegin: IField; override;
-    procedure ReadFieldEnd(); override;
-    function ReadMapBegin: IMap; override;
-    procedure ReadMapEnd(); override;
-    function ReadListBegin: IList; override;
-    procedure ReadListEnd(); override;
-    function ReadSetBegin: ISet; override;
-    procedure ReadSetEnd(); override;
-    function ReadBool: Boolean; override;
-    function ReadByte: ShortInt; override;
-    function ReadI16: SmallInt; override;
-    function ReadI32: Integer; override;
-    function ReadI64: Int64; override;
-    function ReadDouble:Double; override;
-    function ReadBinary: TBytes; override;
-
-  end;
-
-
-  { TProtocolDecorator forwards all requests to an enclosed TProtocol instance,
-    providing a way to author concise concrete decorator subclasses. The decorator
-    does not (and should not) modify the behaviour of the enclosed TProtocol
-
-    See p.175 of Design Patterns (by Gamma et al.)
-  }
-  TProtocolDecorator = class( TProtocolImpl)
-  private
-    FWrappedProtocol : IProtocol;
-
-  public
-    // Encloses the specified protocol.
-    // All operations will be forward to the given protocol.  Must be non-null.
-    constructor Create( const aProtocol : IProtocol);
-
-    procedure WriteMessageBegin( const msg: IMessage); override;
-    procedure WriteMessageEnd; override;
-    procedure WriteStructBegin( const struc: IStruct); override;
-    procedure WriteStructEnd; override;
-    procedure WriteFieldBegin( const field: IField); override;
-    procedure WriteFieldEnd; override;
-    procedure WriteFieldStop; override;
-    procedure WriteMapBegin( const map: IMap); override;
-    procedure WriteMapEnd; override;
-    procedure WriteListBegin( const list: IList); override;
-    procedure WriteListEnd(); override;
-    procedure WriteSetBegin( const set_: ISet ); override;
-    procedure WriteSetEnd(); override;
-    procedure WriteBool( b: Boolean); override;
-    procedure WriteByte( b: ShortInt); override;
-    procedure WriteI16( i16: SmallInt); override;
-    procedure WriteI32( i32: Integer); override;
-    procedure WriteI64( const i64: Int64); override;
-    procedure WriteDouble( const d: Double); override;
-    procedure WriteString( const s: string ); override;
-    procedure WriteAnsiString( const s: AnsiString); override;
-    procedure WriteBinary( const b: TBytes); override;
-
-    function ReadMessageBegin: IMessage; override;
-    procedure ReadMessageEnd(); override;
-    function ReadStructBegin: IStruct; override;
-    procedure ReadStructEnd; override;
-    function ReadFieldBegin: IField; override;
-    procedure ReadFieldEnd(); override;
-    function ReadMapBegin: IMap; override;
-    procedure ReadMapEnd(); override;
-    function ReadListBegin: IList; override;
-    procedure ReadListEnd(); override;
-    function ReadSetBegin: ISet; override;
-    procedure ReadSetEnd(); override;
-    function ReadBool: Boolean; override;
-    function ReadByte: ShortInt; override;
-    function ReadI16: SmallInt; override;
-    function ReadI32: Integer; override;
-    function ReadI64: Int64; override;
-    function ReadDouble:Double; override;
-    function ReadBinary: TBytes; override;
-    function ReadString: string; override;
-    function ReadAnsiString: AnsiString; override;
-  end;
-
-
-type
-  IRequestEvents = interface
+(*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *)
+
+{$SCOPEDENUMS ON}
+
+unit Thrift.Protocol;
+
+interface
+
+uses
+  Classes,
+  SysUtils,
+  Contnrs,
+  Thrift.Stream,
+  Thrift.Collections,
+  Thrift.Transport;
+
+type
+
+  TType = (
+    Stop = 0,
+    Void = 1,
+    Bool_ = 2,
+    Byte_ = 3,
+    Double_ = 4,
+    I16 = 6,
+    I32 = 8,
+    I64 = 10,
+    String_ = 11,
+    Struct = 12,
+    Map = 13,
+    Set_ = 14,
+    List = 15
+  );
+
+  TMessageType = (
+    Call = 1,
+    Reply = 2,
+    Exception = 3,
+    Oneway = 4
+  );
+
+  IProtocol = interface;
+  IStruct = interface;
+
+  IProtocolFactory = interface
+    ['{7CD64A10-4E9F-4E99-93BF-708A31F4A67B}']
+    function GetProtocol( const trans: ITransport): IProtocol;
+  end;
+
+  TThriftStringBuilder = class( TStringBuilder)
+  public
+    function Append(const Value: TBytes): TStringBuilder; overload;
+    function Append(const Value: IThriftContainer): TStringBuilder; overload;
+  end;
+
+  TProtocolException = class( Exception )
+  public
+    const // TODO(jensg): change into enum
+      UNKNOWN : Integer = 0;
+      INVALID_DATA : Integer = 1;
+      NEGATIVE_SIZE : Integer = 2;
+      SIZE_LIMIT : Integer = 3;
+      BAD_VERSION : Integer = 4;
+      NOT_IMPLEMENTED : Integer = 5;
+      DEPTH_LIMIT : Integer = 6;
+  protected
+    FType : Integer;
+  public
+    constructor Create; overload;
+    constructor Create( type_: Integer ); overload;
+    constructor Create( type_: Integer; const msg: string); overload;
+  end;
+
+  IMap = interface
+    ['{30531D97-7E06-4233-B800-C3F53CCD23E7}']
+    function GetKeyType: TType;
+    procedure SetKeyType( Value: TType);
+    function GetValueType: TType;
+    procedure SetValueType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+    property KeyType: TType read GetKeyType write SetKeyType;
+    property ValueType: TType read GetValueType write SetValueType;
+    property Count: Integer read GetCount write SetCount;
+  end;
+
+  TMapImpl = class( TInterfacedObject, IMap)
+  private
+    FValueType: TType;
+    FKeyType: TType;
+    FCount: Integer;
+  protected
+    function GetKeyType: TType;
+    procedure SetKeyType( Value: TType);
+    function GetValueType: TType;
+    procedure SetValueType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+  public
+    constructor Create( AValueType: TType; AKeyType: TType; ACount: Integer); overload;
+    constructor Create; overload;
+  end;
+
+  IList = interface
+    ['{6763E1EA-A934-4472-904F-0083980B9B87}']
+    function GetElementType: TType;
+    procedure SetElementType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+    property ElementType: TType read GetElementType write SetElementType;
+    property Count: Integer read GetCount write SetCount;
+  end;
+
+  TListImpl = class( TInterfacedObject, IList)
+  private
+    FElementType: TType;
+    FCount : Integer;
+  protected
+    function GetElementType: TType;
+    procedure SetElementType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+  public
+    constructor Create( AElementType: TType; ACount: Integer); overload;
+    constructor Create; overload;
+  end;
+
+  ISet = interface
+    ['{A8671700-7514-4C1E-8A05-62786872005F}']
+    function GetElementType: TType;
+    procedure SetElementType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+    property ElementType: TType read GetElementType write SetElementType;
+    property Count: Integer read GetCount write SetCount;
+  end;
+
+  TSetImpl = class( TInterfacedObject, ISet)
+  private
+    FCount: Integer;
+    FElementType: TType;
+  protected
+    function GetElementType: TType;
+    procedure SetElementType( Value: TType);
+    function GetCount: Integer;
+    procedure SetCount( Value: Integer);
+  public
+    constructor Create( AElementType: TType; ACount: Integer); overload;
+    constructor Create; overload;
+  end;
+
+  IMessage = interface
+    ['{9E368B4A-B1FA-43E7-8CF5-56C66D256CA7}']
+    function GetName: string;
+    procedure SetName( const Value: string);
+    function GetType: TMessageType;
+    procedure SetType( Value: TMessageType);
+    function GetSeqID: Integer;
+    procedure SetSeqID( Value: Integer);
+    property Name: string read GetName write SetName;
+    property Type_: TMessageType read GetType write SetType;
+    property SeqID: Integer read GetSeqID write SetSeqID;
+  end;
+
+  TMessageImpl = class( TInterfacedObject, IMessage )
+  private
+    FName: string;
+    FMessageType: TMessageType;
+    FSeqID: Integer;
+  protected
+    function GetName: string;
+    procedure SetName( const Value: string);
+    function GetType: TMessageType;
+    procedure SetType( Value: TMessageType);
+    function GetSeqID: Integer;
+    procedure SetSeqID( Value: Integer);
+  public
+    property Name: string read FName write FName;
+    property Type_: TMessageType read FMessageType write FMessageType;
+    property SeqID: Integer read FSeqID write FSeqID;
+    constructor Create( AName: string; AMessageType: TMessageType; ASeqID: Integer); overload;
+    constructor Create; overload;
+  end;
+
+  IField = interface
+    ['{F0D43BE5-7883-442E-83FF-0580CC632B72}']
+    function GetName: string;
+    procedure SetName( const Value: string);
+    function GetType: TType;
+    procedure SetType( Value: TType);
+    function GetId: SmallInt;
+    procedure SetId( Value: SmallInt);
+    property Name: string read GetName write SetName;
+    property Type_: TType read GetType write SetType;
+    property Id: SmallInt read GetId write SetId;
+  end;
+
+  TFieldImpl = class( TInterfacedObject, IField)
+  private
+    FName : string;
+    FType : TType;
+    FId   : SmallInt;
+  protected
+    function GetName: string;
+    procedure SetName( const Value: string);
+    function GetType: TType;
+    procedure SetType( Value: TType);
+    function GetId: SmallInt;
+    procedure SetId( Value: SmallInt);
+  public
+    constructor Create( const AName: string; const AType: TType; AId: SmallInt); overload;
+    constructor Create; overload;
+  end;
+
+  TProtocolUtil = class
+  public
+    class procedure Skip( prot: IProtocol; type_: TType);
+  end;
+
+  IProtocol = interface
+    ['{FD95C151-1527-4C96-8134-B902BFC4B4FC}']
+    function GetTransport: ITransport;
+    procedure WriteMessageBegin( const msg: IMessage);
+    procedure WriteMessageEnd;
+    procedure WriteStructBegin( const struc: IStruct);
+    procedure WriteStructEnd;
+    procedure WriteFieldBegin( const field: IField);
+    procedure WriteFieldEnd;
+    procedure WriteFieldStop;
+    procedure WriteMapBegin( const map: IMap);
+    procedure WriteMapEnd;
+    procedure WriteListBegin( const list: IList);
+    procedure WriteListEnd();
+    procedure WriteSetBegin( const set_: ISet );
+    procedure WriteSetEnd();
+    procedure WriteBool( b: Boolean);
+    procedure WriteByte( b: ShortInt);
+    procedure WriteI16( i16: SmallInt);
+    procedure WriteI32( i32: Integer);
+    procedure WriteI64( const i64: Int64);
+    procedure WriteDouble( const d: Double);
+    procedure WriteString( const s: string );
+    procedure WriteAnsiString( const s: AnsiString);
+    procedure WriteBinary( const b: TBytes);
+
+    function ReadMessageBegin: IMessage;
+    procedure ReadMessageEnd();
+    function ReadStructBegin: IStruct;
+    procedure ReadStructEnd;
+    function ReadFieldBegin: IField;
+    procedure ReadFieldEnd();
+    function ReadMapBegin: IMap;
+    procedure ReadMapEnd();
+    function ReadListBegin: IList;
+    procedure ReadListEnd();
+    function ReadSetBegin: ISet;
+    procedure ReadSetEnd();
+    function ReadBool: Boolean;
+    function ReadByte: ShortInt;
+    function ReadI16: SmallInt;
+    function ReadI32: Integer;
+    function ReadI64: Int64;
+    function ReadDouble:Double;
+    function ReadBinary: TBytes;
+    function ReadString: string;
+    function ReadAnsiString: AnsiString;
+    property Transport: ITransport read GetTransport;
+  end;
+
+  TProtocolImpl = class abstract( TInterfacedObject, IProtocol)
+  protected
+    FTrans : ITransport;
+    function GetTransport: ITransport;
+  public
+    procedure WriteMessageBegin( const msg: IMessage); virtual; abstract;
+    procedure WriteMessageEnd; virtual; abstract;
+    procedure WriteStructBegin( const struc: IStruct); virtual; abstract;
+    procedure WriteStructEnd; virtual; abstract;
+    procedure WriteFieldBegin( const field: IField); virtual; abstract;
+    procedure WriteFieldEnd; virtual; abstract;
+    procedure WriteFieldStop; virtual; abstract;
+    procedure WriteMapBegin( const map: IMap); virtual; abstract;
+    procedure WriteMapEnd; virtual; abstract;
+    procedure WriteListBegin( const list: IList); virtual; abstract;
+    procedure WriteListEnd(); virtual; abstract;
+    procedure WriteSetBegin( const set_: ISet ); virtual; abstract;
+    procedure WriteSetEnd(); virtual; abstract;
+    procedure WriteBool( b: Boolean); virtual; abstract;
+    procedure WriteByte( b: ShortInt); virtual; abstract;
+    procedure WriteI16( i16: SmallInt); virtual; abstract;
+    procedure WriteI32( i32: Integer); virtual; abstract;
+    procedure WriteI64( const i64: Int64); virtual; abstract;
+    procedure WriteDouble( const d: Double); virtual; abstract;
+    procedure WriteString( const s: string ); virtual;
+    procedure WriteAnsiString( const s: AnsiString); virtual;
+    procedure WriteBinary( const b: TBytes); virtual; abstract;
+
+    function ReadMessageBegin: IMessage; virtual; abstract;
+    procedure ReadMessageEnd(); virtual; abstract;
+    function ReadStructBegin: IStruct; virtual; abstract;
+    procedure ReadStructEnd; virtual; abstract;
+    function ReadFieldBegin: IField; virtual; abstract;
+    procedure ReadFieldEnd(); virtual; abstract;
+    function ReadMapBegin: IMap; virtual; abstract;
+    procedure ReadMapEnd(); virtual; abstract;
+    function ReadListBegin: IList; virtual; abstract;
+    procedure ReadListEnd(); virtual; abstract;
+    function ReadSetBegin: ISet; virtual; abstract;
+    procedure ReadSetEnd(); virtual; abstract;
+    function ReadBool: Boolean; virtual; abstract;
+    function ReadByte: ShortInt; virtual; abstract;
+    function ReadI16: SmallInt; virtual; abstract;
+    function ReadI32: Integer; virtual; abstract;
+    function ReadI64: Int64; virtual; abstract;
+    function ReadDouble:Double; virtual; abstract;
+    function ReadBinary: TBytes; virtual; abstract;
+    function ReadString: string; virtual;
+    function ReadAnsiString: AnsiString; virtual;
+
+    property Transport: ITransport read GetTransport;
+
+    constructor Create( trans: ITransport );
+  end;
+
+  IBase = interface
+    ['{08D9BAA8-5EAA-410F-B50B-AC2E6E5E4155}']
+    function ToString: string;
+    procedure Read( const iprot: IProtocol);
+    procedure Write( const iprot: IProtocol);
+  end;
+
+  IStruct = interface
+    ['{5DCE39AA-C916-4BC7-A79B-96A0C36B2220}']
+    procedure SetName(const Value: string);
+    function GetName: string;
+    property Name: string read GetName write SetName;
+  end;
+
+  TStructImpl = class( TInterfacedObject, IStruct )
+  private
+    FName: string;
+  protected
+    function GetName: string;
+    procedure SetName(const Value: string);
+  public
+    constructor Create( const AName: string);
+  end;
+
+  TBinaryProtocolImpl = class( TProtocolImpl )
+  protected
+    const
+      VERSION_MASK : Cardinal = $ffff0000;
+      VERSION_1 : Cardinal = $80010000;
+  protected
+    FStrictRead : Boolean;
+    FStrictWrite : Boolean;
+
+  private
+    function ReadAll( var buf: TBytes; off: Integer; len: Integer ): Integer;
+    function ReadStringBody( size: Integer): string;
+
+  public
+
+    type
+      TFactory = class( TInterfacedObject, IProtocolFactory)
+      protected
+        FStrictRead : Boolean;
+        FStrictWrite : Boolean;
+      public
+        function GetProtocol( const trans: ITransport): IProtocol;
+        constructor Create( AStrictRead, AStrictWrite: Boolean ); overload;
+        constructor Create; overload;
+      end;
+
+    constructor Create( const trans: ITransport); overload;
+    constructor Create( const trans: ITransport; strictRead: Boolean; strictWrite: Boolean); overload;
+
+    procedure WriteMessageBegin( const msg: IMessage); override;
+    procedure WriteMessageEnd; override;
+    procedure WriteStructBegin( const struc: IStruct); override;
+    procedure WriteStructEnd; override;
+    procedure WriteFieldBegin( const field: IField); override;
+    procedure WriteFieldEnd; override;
+    procedure WriteFieldStop; override;
+    procedure WriteMapBegin( const map: IMap); override;
+    procedure WriteMapEnd; override;
+    procedure WriteListBegin( const list: IList); override;
+    procedure WriteListEnd(); override;
+    procedure WriteSetBegin( const set_: ISet ); override;
+    procedure WriteSetEnd(); override;
+    procedure WriteBool( b: Boolean); override;
+    procedure WriteByte( b: ShortInt); override;
+    procedure WriteI16( i16: SmallInt); override;
+    procedure WriteI32( i32: Integer); override;
+    procedure WriteI64( const i64: Int64); override;
+    procedure WriteDouble( const d: Double); override;
+    procedure WriteBinary( const b: TBytes); override;
+
+    function ReadMessageBegin: IMessage; override;
+    procedure ReadMessageEnd(); override;
+    function ReadStructBegin: IStruct; override;
+    procedure ReadStructEnd; override;
+    function ReadFieldBegin: IField; override;
+    procedure ReadFieldEnd(); override;
+    function ReadMapBegin: IMap; override;
+    procedure ReadMapEnd(); override;
+    function ReadListBegin: IList; override;
+    procedure ReadListEnd(); override;
+    function ReadSetBegin: ISet; override;
+    procedure ReadSetEnd(); override;
+    function ReadBool: Boolean; override;
+    function ReadByte: ShortInt; override;
+    function ReadI16: SmallInt; override;
+    function ReadI32: Integer; override;
+    function ReadI64: Int64; override;
+    function ReadDouble:Double; override;
+    function ReadBinary: TBytes; override;
+
+  end;
+
+
+  { TProtocolDecorator forwards all requests to an enclosed TProtocol instance,
+    providing a way to author concise concrete decorator subclasses. The decorator
+    does not (and should not) modify the behaviour of the enclosed TProtocol
+
+    See p.175 of Design Patterns (by Gamma et al.)
+  }
+  TProtocolDecorator = class( TProtocolImpl)
+  private
+    FWrappedProtocol : IProtocol;
+
+  public
+    // Encloses the specified protocol.
+    // All operations will be forward to the given protocol.  Must be non-null.
+    constructor Create( const aProtocol : IProtocol);
+
+    procedure WriteMessageBegin( const msg: IMessage); override;
+    procedure WriteMessageEnd; override;
+    procedure WriteStructBegin( const struc: IStruct); override;
+    procedure WriteStructEnd; override;
+    procedure WriteFieldBegin( const field: IField); override;
+    procedure WriteFieldEnd; override;
+    procedure WriteFieldStop; override;
+    procedure WriteMapBegin( const map: IMap); override;
+    procedure WriteMapEnd; override;
+    procedure WriteListBegin( const list: IList); override;
+    procedure WriteListEnd(); override;
+    procedure WriteSetBegin( const set_: ISet ); override;
+    procedure WriteSetEnd(); override;
+    procedure WriteBool( b: Boolean); override;
+    procedure WriteByte( b: ShortInt); override;
+    procedure WriteI16( i16: SmallInt); override;
+    procedure WriteI32( i32: Integer); override;
+    procedure WriteI64( const i64: Int64); override;
+    procedure WriteDouble( const d: Double); override;
+    procedure WriteString( const s: string ); override;
+    procedure WriteAnsiString( const s: AnsiString); override;
+    procedure WriteBinary( const b: TBytes); override;
+
+    function ReadMessageBegin: IMessage; override;
+    procedure ReadMessageEnd(); override;
+    function ReadStructBegin: IStruct; override;
+    procedure ReadStructEnd; override;
+    function ReadFieldBegin: IField; override;
+    procedure ReadFieldEnd(); override;
+    function ReadMapBegin: IMap; override;
+    procedure ReadMapEnd(); override;
+    function ReadListBegin: IList; override;
+    procedure ReadListEnd(); override;
+    function ReadSetBegin: ISet; override;
+    procedure ReadSetEnd(); override;
+    function ReadBool: Boolean; override;
+    function ReadByte: ShortInt; override;
+    function ReadI16: SmallInt; override;
+    function ReadI32: Integer; override;
+    function ReadI64: Int64; override;
+    function ReadDouble:Double; override;
+    function ReadBinary: TBytes; override;
+    function ReadString: string; override;
+    function ReadAnsiString: AnsiString; override;
+  end;
+
+
+type
+  IRequestEvents = interface
     ['{F926A26A-5B00-4560-86FA-2CAE3BA73DAF}']
     // Called before reading arguments.
     procedure PreRead;
@@ -534,1052 +534,1052 @@ type
     function Process( const iprot :IProtocol; const oprot: IProtocol; const events : IProcessorEvents = nil): Boolean;
   end;
 
-
-
-implementation
-
-function ConvertInt64ToDouble( const n: Int64): Double;
-begin
-  ASSERT( SizeOf(n) = SizeOf(Result));
-  System.Move( n, Result, SizeOf(Result));
-end;
-
-function ConvertDoubleToInt64( const d: Double): Int64;
-begin
-  ASSERT( SizeOf(d) = SizeOf(Result));
-  System.Move( d, Result, SizeOf(Result));
-end;
-
-{ TFieldImpl }
-
-constructor TFieldImpl.Create(const AName: string; const AType: TType;
-  AId: SmallInt);
-begin
-  inherited Create;
-  FName := AName;
-  FType := AType;
-  FId := AId;
-end;
-
-constructor TFieldImpl.Create;
-begin
-  inherited Create;
-  FName := '';
-  FType := Low(TType);
-  FId   := 0;
-end;
-
-function TFieldImpl.GetId: SmallInt;
-begin
-  Result := FId;
-end;
-
-function TFieldImpl.GetName: string;
-begin
-  Result := FName;
-end;
-
-function TFieldImpl.GetType: TType;
-begin
-  Result := FType;
-end;
-
-procedure TFieldImpl.SetId(Value: SmallInt);
-begin
-  FId := Value;
-end;
-
-procedure TFieldImpl.SetName(const Value: string);
-begin
-  FName := Value;
-end;
-
-procedure TFieldImpl.SetType(Value: TType);
-begin
-  FType := Value;
-end;
-
-{ TProtocolImpl }
-
-constructor TProtocolImpl.Create(trans: ITransport);
-begin
-  inherited Create;
-  FTrans := trans;
-end;
-
-function TProtocolImpl.GetTransport: ITransport;
-begin
-  Result := FTrans;
-end;
-
-function TProtocolImpl.ReadAnsiString: AnsiString;
-var
-  b : TBytes;
-  len : Integer;
-begin
-  Result := '';
-  b := ReadBinary;
-  len := Length( b );
-  if len > 0 then
-  begin
-    SetLength( Result, len);
-    System.Move( b[0], Pointer(Result)^, len );
-  end;
-end;
-
-function TProtocolImpl.ReadString: string;
-begin
-  Result := TEncoding.UTF8.GetString( ReadBinary );
-end;
-
-procedure TProtocolImpl.WriteAnsiString(const s: AnsiString);
-var
-  b : TBytes;
-  len : Integer;
-begin
-  len := Length(s);
-  SetLength( b, len);
-  if len > 0 then
-  begin
-    System.Move( Pointer(s)^, b[0], len );
-  end;
-  WriteBinary( b );
-end;
-
-procedure TProtocolImpl.WriteString(const s: string);
-var
-  b : TBytes;
-begin
-  b := TEncoding.UTF8.GetBytes(s);
-  WriteBinary( b );
-end;
-
-{ TProtocolUtil }
-
-class procedure TProtocolUtil.Skip( prot: IProtocol; type_: TType);
-var field : IField;
-    map   : IMap;
-    set_  : ISet;
-    list  : IList;
-    i     : Integer;
-begin
-  case type_ of
-    // simple types
-    TType.Bool_   :  prot.ReadBool();
-    TType.Byte_   :  prot.ReadByte();
-    TType.I16     :  prot.ReadI16();
-    TType.I32     :  prot.ReadI32();
-    TType.I64     :  prot.ReadI64();
-    TType.Double_ :  prot.ReadDouble();
-    TType.String_ :  prot.ReadBinary();// Don't try to decode the string, just skip it.
-
-    // structured types
-    TType.Struct :  begin
-      prot.ReadStructBegin();
-      while TRUE do begin
-        field := prot.ReadFieldBegin();
-        if (field.Type_ = TType.Stop) then Break;
-        Skip(prot, field.Type_);
-        prot.ReadFieldEnd();
-      end;
-      prot.ReadStructEnd();
-    end;
-
-    TType.Map :  begin
-      map := prot.ReadMapBegin();
-      for i := 0 to map.Count-1 do begin
-        Skip(prot, map.KeyType);
-        Skip(prot, map.ValueType);
-      end;
-      prot.ReadMapEnd();
-    end;
-
-    TType.Set_ :  begin
-      set_ := prot.ReadSetBegin();
-      for i := 0 to set_.Count-1
-      do Skip( prot, set_.ElementType);
-      prot.ReadSetEnd();
-    end;
-
-    TType.List :  begin
-      list := prot.ReadListBegin();
-      for i := 0 to list.Count-1
-      do Skip( prot, list.ElementType);
-      prot.ReadListEnd();
-    end;
-
-  else
-    ASSERT( FALSE); // any new types?
-  end;
-end;
-
-{ TStructImpl }
-
-constructor TStructImpl.Create(const AName: string);
-begin
-  inherited Create;
-  FName := AName;
-end;
-
-function TStructImpl.GetName: string;
-begin
-  Result := FName;
-end;
-
-procedure TStructImpl.SetName(const Value: string);
-begin
-  FName := Value;
-end;
-
-{ TMapImpl }
-
-constructor TMapImpl.Create(AValueType, AKeyType: TType; ACount: Integer);
-begin
-  inherited Create;
-  FValueType := AValueType;
-  FKeyType := AKeyType;
-  FCount := ACount;
-end;
-
-constructor TMapImpl.Create;
-begin
-  inherited Create;
-end;
-
-function TMapImpl.GetCount: Integer;
-begin
-  Result := FCount;
-end;
-
-function TMapImpl.GetKeyType: TType;
-begin
-  Result := FKeyType;
-end;
-
-function TMapImpl.GetValueType: TType;
-begin
-  Result := FValueType;
-end;
-
-procedure TMapImpl.SetCount(Value: Integer);
-begin
-  FCount := Value;
-end;
-
-procedure TMapImpl.SetKeyType(Value: TType);
-begin
-  FKeyType := Value;
-end;
-
-procedure TMapImpl.SetValueType(Value: TType);
-begin
-  FValueType := Value;
-end;
-
-{ IMessage }
-
-constructor TMessageImpl.Create(AName: string; AMessageType: TMessageType;
-  ASeqID: Integer);
-begin
-  inherited Create;
-  FName := AName;
-  FMessageType := AMessageType;
-  FSeqID := ASeqID;
-end;
-
-constructor TMessageImpl.Create;
-begin
-  inherited;
-end;
-
-function TMessageImpl.GetName: string;
-begin
-  Result := FName;
-end;
-
-function TMessageImpl.GetSeqID: Integer;
-begin
-  Result := FSeqID;
-end;
-
-function TMessageImpl.GetType: TMessageType;
-begin
-  Result := FMessageType;
-end;
-
-procedure TMessageImpl.SetName(const Value: string);
-begin
-  FName := Value;
-end;
-
-procedure TMessageImpl.SetSeqID(Value: Integer);
-begin
-  FSeqID := Value;
-end;
-
-procedure TMessageImpl.SetType(Value: TMessageType);
-begin
-  FMessageType := Value;
-end;
-
-{ ISet }
-
-constructor TSetImpl.Create( AElementType: TType; ACount: Integer);
-begin
-  inherited Create;
-  FCount := ACount;
-  FElementType := AElementType;
-end;
-
-constructor TSetImpl.Create;
-begin
-  inherited Create;
-end;
-
-function TSetImpl.GetCount: Integer;
-begin
-  Result := FCount;
-end;
-
-function TSetImpl.GetElementType: TType;
-begin
-  Result := FElementType;
-end;
-
-procedure TSetImpl.SetCount(Value: Integer);
-begin
-  FCount := Value;
-end;
-
-procedure TSetImpl.SetElementType(Value: TType);
-begin
-  FElementType := Value;
-end;
-
-{ IList }
-
-constructor TListImpl.Create( AElementType: TType; ACount: Integer);
-begin
-  inherited Create;
-  FCount := ACount;
-  FElementType := AElementType;
-end;
-
-constructor TListImpl.Create;
-begin
-  inherited Create;
-end;
-
-function TListImpl.GetCount: Integer;
-begin
-  Result := FCount;
-end;
-
-function TListImpl.GetElementType: TType;
-begin
-  Result := FElementType;
-end;
-
-procedure TListImpl.SetCount(Value: Integer);
-begin
-  FCount := Value;
-end;
-
-procedure TListImpl.SetElementType(Value: TType);
-begin
-  FElementType := Value;
-end;
-
-{ TBinaryProtocolImpl }
-
-constructor TBinaryProtocolImpl.Create( const trans: ITransport);
-begin
-  //no inherited
-  Create( trans, False, True);
-end;
-
-constructor TBinaryProtocolImpl.Create( const trans: ITransport; strictRead,
-  strictWrite: Boolean);
-begin
-  inherited Create( trans );
-  FStrictRead := strictRead;
-  FStrictWrite := strictWrite;
-end;
-
-function TBinaryProtocolImpl.ReadAll( var buf: TBytes; off,
-  len: Integer): Integer;
-begin
-  Result := FTrans.ReadAll( buf, off, len );
-end;
-
-function TBinaryProtocolImpl.ReadBinary: TBytes;
-var
-  size : Integer;
-  buf : TBytes;
-begin
-  size := ReadI32;
-  SetLength( buf, size );
-  FTrans.ReadAll( buf, 0, size);
-  Result := buf;
-end;
-
-function TBinaryProtocolImpl.ReadBool: Boolean;
-begin
-  Result := ReadByte = 1;
-end;
-
-function TBinaryProtocolImpl.ReadByte: ShortInt;
-var
-  bin : TBytes;
-begin
-  SetLength( bin, 1);
-  ReadAll( bin, 0, 1 );
-  Result := ShortInt( bin[0]);
-end;
-
-function TBinaryProtocolImpl.ReadDouble: Double;
-begin
-  Result := ConvertInt64ToDouble( ReadI64 )
-end;
-
-function TBinaryProtocolImpl.ReadFieldBegin: IField;
-var
-  field : IField;
-begin
-  field := TFieldImpl.Create;
-  field.Type_ := TType( ReadByte);
-  if ( field.Type_ <> TType.Stop ) then
-  begin
-    field.Id := ReadI16;
-  end;
-  Result := field;
-end;
-
-procedure TBinaryProtocolImpl.ReadFieldEnd;
-begin
-
-end;
-
-function TBinaryProtocolImpl.ReadI16: SmallInt;
-var
-  i16in : TBytes;
-begin
-  SetLength( i16in, 2 );
-  ReadAll( i16in, 0, 2);
-  Result := SmallInt(((i16in[0] and $FF) shl 8) or (i16in[1] and $FF));
-end;
-
-function TBinaryProtocolImpl.ReadI32: Integer;
-var
-  i32in : TBytes;
-begin
-  SetLength( i32in, 4 );
-  ReadAll( i32in, 0, 4);
-
-  Result := Integer(
-    ((i32in[0] and $FF) shl 24) or
-    ((i32in[1] and $FF) shl 16) or
-    ((i32in[2] and $FF) shl 8) or
-     (i32in[3] and $FF));
-
-end;
-
-function TBinaryProtocolImpl.ReadI64: Int64;
-var
-  i64in : TBytes;
-begin
-  SetLength( i64in, 8);
-  ReadAll( i64in, 0, 8);
-  Result :=
-    (Int64( i64in[0] and $FF) shl 56) or
-    (Int64( i64in[1] and $FF) shl 48) or
-    (Int64( i64in[2] and $FF) shl 40) or
-    (Int64( i64in[3] and $FF) shl 32) or
-    (Int64( i64in[4] and $FF) shl 24) or
-    (Int64( i64in[5] and $FF) shl 16) or
-    (Int64( i64in[6] and $FF) shl 8) or
-    (Int64( i64in[7] and $FF));
-end;
-
-function TBinaryProtocolImpl.ReadListBegin: IList;
-var
-  list : IList;
-begin
-  list := TListImpl.Create;
-  list.ElementType := TType( ReadByte );
-  list.Count := ReadI32;
-  Result := list;
-end;
-
-procedure TBinaryProtocolImpl.ReadListEnd;
-begin
-
-end;
-
-function TBinaryProtocolImpl.ReadMapBegin: IMap;
-var
-  map : IMap;
-begin
-  map := TMapImpl.Create;
-  map.KeyType := TType( ReadByte );
-  map.ValueType := TType( ReadByte );
-  map.Count := ReadI32;
-  Result := map;
-end;
-
-procedure TBinaryProtocolImpl.ReadMapEnd;
-begin
-
-end;
-
-function TBinaryProtocolImpl.ReadMessageBegin: IMessage;
-var
-  size : Integer;
-  version : Integer;
-  message : IMessage;
-begin
-  message := TMessageImpl.Create;
-  size := ReadI32;
-  if (size < 0) then
-  begin
-    version := size and Integer( VERSION_MASK);
-    if ( version <> Integer( VERSION_1)) then
-    begin
-      raise TProtocolException.Create(TProtocolException.BAD_VERSION, 'Bad version in ReadMessageBegin: ' + IntToStr(version) );
-    end;
-    message.Type_ := TMessageType( size and $000000ff);
-    message.Name := ReadString;
-    message.SeqID := ReadI32;
-  end else
-  begin
-    if FStrictRead then
-    begin
-      raise TProtocolException.Create( TProtocolException.BAD_VERSION, 'Missing version in readMessageBegin, old client?' );
-    end;
-    message.Name := ReadStringBody( size );
-    message.Type_ := TMessageType( ReadByte );
-    message.SeqID := ReadI32;
-  end;
-  Result := message;
-end;
-
-procedure TBinaryProtocolImpl.ReadMessageEnd;
-begin
-  inherited;
-
-end;
-
-function TBinaryProtocolImpl.ReadSetBegin: ISet;
-var
-  set_ : ISet;
-begin
-  set_ := TSetImpl.Create;
-  set_.ElementType := TType( ReadByte );
-  set_.Count := ReadI32;
-  Result := set_;
-end;
-
-procedure TBinaryProtocolImpl.ReadSetEnd;
-begin
-
-end;
-
-function TBinaryProtocolImpl.ReadStringBody( size: Integer): string;
-var
-  buf : TBytes;
-begin
-  SetLength( buf, size );
-  FTrans.ReadAll( buf, 0, size );
-  Result := TEncoding.UTF8.GetString( buf);
-end;
-
-function TBinaryProtocolImpl.ReadStructBegin: IStruct;
-begin
-  Result := TStructImpl.Create('');
-end;
-
-procedure TBinaryProtocolImpl.ReadStructEnd;
-begin
-  inherited;
-
-end;
-
-procedure TBinaryProtocolImpl.WriteBinary( const b: TBytes);
-var iLen : Integer;
-begin
-  iLen := Length(b);
-  WriteI32( iLen);
-  if iLen > 0 then FTrans.Write(b, 0, iLen);
-end;
-
-procedure TBinaryProtocolImpl.WriteBool(b: Boolean);
-begin
-  if b then
-  begin
-    WriteByte( 1 );
-  end else
-  begin
-    WriteByte( 0 );
-  end;
-end;
-
-procedure TBinaryProtocolImpl.WriteByte(b: ShortInt);
-var
-  a : TBytes;
-begin
-  SetLength( a, 1);
-  a[0] := Byte( b );
-  FTrans.Write( a, 0, 1 );
-end;
-
-procedure TBinaryProtocolImpl.WriteDouble( const d: Double);
-begin
-  WriteI64(ConvertDoubleToInt64(d));
-end;
-
-procedure TBinaryProtocolImpl.WriteFieldBegin( const field: IField);
-begin
-  WriteByte(ShortInt(field.Type_));
-  WriteI16(field.ID);
-end;
-
-procedure TBinaryProtocolImpl.WriteFieldEnd;
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteFieldStop;
-begin
-  WriteByte(ShortInt(TType.Stop));
-end;
-
-procedure TBinaryProtocolImpl.WriteI16(i16: SmallInt);
-var
-  i16out : TBytes;
-begin
-  SetLength( i16out, 2);
-  i16out[0] := Byte($FF and (i16 shr 8));
-  i16out[1] := Byte($FF and i16);
-  FTrans.Write( i16out );
-end;
-
-procedure TBinaryProtocolImpl.WriteI32(i32: Integer);
-var
-  i32out : TBytes;
-begin
-  SetLength( i32out, 4);
-  i32out[0] := Byte($FF and (i32 shr 24));
-  i32out[1] := Byte($FF and (i32 shr 16));
-  i32out[2] := Byte($FF and (i32 shr 8));
-  i32out[3] := Byte($FF and i32);
-  FTrans.Write( i32out, 0, 4);
-end;
-
-procedure TBinaryProtocolImpl.WriteI64( const i64: Int64);
-var
-  i64out : TBytes;
-begin
-  SetLength( i64out, 8);
-  i64out[0] := Byte($FF and (i64 shr 56));
-  i64out[1] := Byte($FF and (i64 shr 48));
-  i64out[2] := Byte($FF and (i64 shr 40));
-  i64out[3] := Byte($FF and (i64 shr 32));
-  i64out[4] := Byte($FF and (i64 shr 24));
-  i64out[5] := Byte($FF and (i64 shr 16));
-  i64out[6] := Byte($FF and (i64 shr 8));
-  i64out[7] := Byte($FF and i64);
-  FTrans.Write( i64out, 0, 8);
-end;
-
-procedure TBinaryProtocolImpl.WriteListBegin( const list: IList);
-begin
-  WriteByte(ShortInt(list.ElementType));
-  WriteI32(list.Count);
-end;
-
-procedure TBinaryProtocolImpl.WriteListEnd;
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteMapBegin( const map: IMap);
-begin
-  WriteByte(ShortInt(map.KeyType));
-  WriteByte(ShortInt(map.ValueType));
-  WriteI32(map.Count);
-end;
-
-procedure TBinaryProtocolImpl.WriteMapEnd;
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteMessageBegin( const msg: IMessage);
-var
-  version : Cardinal;
-begin
-  if FStrictWrite then
-  begin
-    version := VERSION_1 or Cardinal( msg.Type_);
-    WriteI32( Integer( version) );
-    WriteString( msg.Name);
-    WriteI32( msg.SeqID);
-  end else
-  begin
-    WriteString( msg.Name);
-    WriteByte(ShortInt( msg.Type_));
-    WriteI32( msg.SeqID);
-  end;
-end;
-
-procedure TBinaryProtocolImpl.WriteMessageEnd;
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteSetBegin( const set_: ISet);
-begin
-  WriteByte(ShortInt(set_.ElementType));
-  WriteI32(set_.Count);
-end;
-
-procedure TBinaryProtocolImpl.WriteSetEnd;
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteStructBegin( const struc: IStruct);
-begin
-
-end;
-
-procedure TBinaryProtocolImpl.WriteStructEnd;
-begin
-
-end;
-
-{ TProtocolException }
-
-constructor TProtocolException.Create;
-begin
-  inherited Create('');
-  FType := UNKNOWN;
-end;
-
-constructor TProtocolException.Create(type_: Integer);
-begin
-  inherited Create('');
-  FType := type_;
-end;
-
-constructor TProtocolException.Create(type_: Integer; const msg: string);
-begin
-  inherited Create( msg );
-  FType := type_;
-end;
-
-{ TThriftStringBuilder }
-
-function TThriftStringBuilder.Append(const Value: TBytes): TStringBuilder;
-begin
-  Result := Append( string( RawByteString(Value)) );
-end;
-
-function TThriftStringBuilder.Append(
-  const Value: IThriftContainer): TStringBuilder;
-begin
-  Result := Append( Value.ToString );
-end;
-
-{ TBinaryProtocolImpl.TFactory }
-
-constructor TBinaryProtocolImpl.TFactory.Create(AStrictRead, AStrictWrite: Boolean);
-begin
-  inherited Create;
-  FStrictRead := AStrictRead;
-  FStrictWrite := AStrictWrite;
-end;
-
-constructor TBinaryProtocolImpl.TFactory.Create;
-begin
-  //no inherited;  
-  Create( False, True )
-end;
-
-function TBinaryProtocolImpl.TFactory.GetProtocol( const trans: ITransport): IProtocol;
-begin
-  Result := TBinaryProtocolImpl.Create( trans, FStrictRead, FStrictWrite);
-end;
-
-
-{ TProtocolDecorator }
-
-constructor TProtocolDecorator.Create( const aProtocol : IProtocol);
-begin
-  ASSERT( aProtocol <> nil);
-  inherited Create( aProtocol.Transport);
-  FWrappedProtocol := aProtocol;
-end;
-
-
-procedure TProtocolDecorator.WriteMessageBegin( const msg: IMessage);
-begin
-  FWrappedProtocol.WriteMessageBegin( msg);
-end;
-
-
-procedure TProtocolDecorator.WriteMessageEnd;
-begin
-  FWrappedProtocol.WriteMessageEnd;
-end;
-
-
-procedure TProtocolDecorator.WriteStructBegin( const struc: IStruct);
-begin
-  FWrappedProtocol.WriteStructBegin( struc);
-end;
-
-
-procedure TProtocolDecorator.WriteStructEnd;
-begin
-  FWrappedProtocol.WriteStructEnd;
-end;
-
-
-procedure TProtocolDecorator.WriteFieldBegin( const field: IField);
-begin
-  FWrappedProtocol.WriteFieldBegin( field);
-end;
-
-
-procedure TProtocolDecorator.WriteFieldEnd;
-begin
-  FWrappedProtocol.WriteFieldEnd;
-end;
-
-
-procedure TProtocolDecorator.WriteFieldStop;
-begin
-  FWrappedProtocol.WriteFieldStop;
-end;
-
-
-procedure TProtocolDecorator.WriteMapBegin( const map: IMap);
-begin
-  FWrappedProtocol.WriteMapBegin( map);
-end;
-
-
-procedure TProtocolDecorator.WriteMapEnd;
-begin
-  FWrappedProtocol.WriteMapEnd;
-end;
-
-
-procedure TProtocolDecorator.WriteListBegin( const list: IList);
-begin
-  FWrappedProtocol.WriteListBegin( list);
-end;
-
-
-procedure TProtocolDecorator.WriteListEnd();
-begin
-  FWrappedProtocol.WriteListEnd();
-end;
-
-
-procedure TProtocolDecorator.WriteSetBegin( const set_: ISet );
-begin
-  FWrappedProtocol.WriteSetBegin( set_);
-end;
-
-
-procedure TProtocolDecorator.WriteSetEnd();
-begin
-  FWrappedProtocol.WriteSetEnd();
-end;
-
-
-procedure TProtocolDecorator.WriteBool( b: Boolean);
-begin
-  FWrappedProtocol.WriteBool( b);
-end;
-
-
-procedure TProtocolDecorator.WriteByte( b: ShortInt);
-begin
-  FWrappedProtocol.WriteByte( b);
-end;
-
-
-procedure TProtocolDecorator.WriteI16( i16: SmallInt);
-begin
-  FWrappedProtocol.WriteI16( i16);
-end;
-
-
-procedure TProtocolDecorator.WriteI32( i32: Integer);
-begin
-  FWrappedProtocol.WriteI32( i32);
-end;
-
-
-procedure TProtocolDecorator.WriteI64( const i64: Int64);
-begin
-  FWrappedProtocol.WriteI64( i64);
-end;
-
-
-procedure TProtocolDecorator.WriteDouble( const d: Double);
-begin
-  FWrappedProtocol.WriteDouble( d);
-end;
-
-
-procedure TProtocolDecorator.WriteString( const s: string );
-begin
-  FWrappedProtocol.WriteString( s);
-end;
-
-
-procedure TProtocolDecorator.WriteAnsiString( const s: AnsiString);
-begin
-  FWrappedProtocol.WriteAnsiString( s);
-end;
-
-
-procedure TProtocolDecorator.WriteBinary( const b: TBytes);
-begin
-  FWrappedProtocol.WriteBinary( b);
-end;
-
-
-function TProtocolDecorator.ReadMessageBegin: IMessage;
-begin
-  result := FWrappedProtocol.ReadMessageBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadMessageEnd();
-begin
-  FWrappedProtocol.ReadMessageEnd();
-end;
-
-
-function TProtocolDecorator.ReadStructBegin: IStruct;
-begin
-  result := FWrappedProtocol.ReadStructBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadStructEnd;
-begin
-  FWrappedProtocol.ReadStructEnd;
-end;
-
-
-function TProtocolDecorator.ReadFieldBegin: IField;
-begin
-  result := FWrappedProtocol.ReadFieldBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadFieldEnd();
-begin
-  FWrappedProtocol.ReadFieldEnd();
-end;
-
-
-function TProtocolDecorator.ReadMapBegin: IMap;
-begin
-  result := FWrappedProtocol.ReadMapBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadMapEnd();
-begin
-  FWrappedProtocol.ReadMapEnd();
-end;
-
-
-function TProtocolDecorator.ReadListBegin: IList;
-begin
-  result := FWrappedProtocol.ReadListBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadListEnd();
-begin
-  FWrappedProtocol.ReadListEnd();
-end;
-
-
-function TProtocolDecorator.ReadSetBegin: ISet;
-begin
-  result := FWrappedProtocol.ReadSetBegin;
-end;
-
-
-procedure TProtocolDecorator.ReadSetEnd();
-begin
-  FWrappedProtocol.ReadSetEnd();
-end;
-
-
-function TProtocolDecorator.ReadBool: Boolean;
-begin
-  result := FWrappedProtocol.ReadBool;
-end;
-
-
-function TProtocolDecorator.ReadByte: ShortInt;
-begin
-  result := FWrappedProtocol.ReadByte;
-end;
-
-
-function TProtocolDecorator.ReadI16: SmallInt;
-begin
-  result := FWrappedProtocol.ReadI16;
-end;
-
-
-function TProtocolDecorator.ReadI32: Integer;
-begin
-  result := FWrappedProtocol.ReadI32;
-end;
-
-
-function TProtocolDecorator.ReadI64: Int64;
-begin
-  result := FWrappedProtocol.ReadI64;
-end;
-
-
-function TProtocolDecorator.ReadDouble:Double;
-begin
-  result := FWrappedProtocol.ReadDouble;
-end;
-
-
-function TProtocolDecorator.ReadBinary: TBytes;
-begin
-  result := FWrappedProtocol.ReadBinary;
-end;
-
-
-function TProtocolDecorator.ReadString: string;
-begin
-  result := FWrappedProtocol.ReadString;
-end;
-
-
-function TProtocolDecorator.ReadAnsiString: AnsiString;
-begin
-  result := FWrappedProtocol.ReadAnsiString;
-end;
-
-
-
-end.
-
+
+
+implementation
+
+function ConvertInt64ToDouble( const n: Int64): Double;
+begin
+  ASSERT( SizeOf(n) = SizeOf(Result));
+  System.Move( n, Result, SizeOf(Result));
+end;
+
+function ConvertDoubleToInt64( const d: Double): Int64;
+begin
+  ASSERT( SizeOf(d) = SizeOf(Result));
+  System.Move( d, Result, SizeOf(Result));
+end;
+
+{ TFieldImpl }
+
+constructor TFieldImpl.Create(const AName: string; const AType: TType;
+  AId: SmallInt);
+begin
+  inherited Create;
+  FName := AName;
+  FType := AType;
+  FId := AId;
+end;
+
+constructor TFieldImpl.Create;
+begin
+  inherited Create;
+  FName := '';
+  FType := Low(TType);
+  FId   := 0;
+end;
+
+function TFieldImpl.GetId: SmallInt;
+begin
+  Result := FId;
+end;
+
+function TFieldImpl.GetName: string;
+begin
+  Result := FName;
+end;
+
+function TFieldImpl.GetType: TType;
+begin
+  Result := FType;
+end;
+
+procedure TFieldImpl.SetId(Value: SmallInt);
+begin
+  FId := Value;
+end;
+
+procedure TFieldImpl.SetName(const Value: string);
+begin
+  FName := Value;
+end;
+
+procedure TFieldImpl.SetType(Value: TType);
+begin
+  FType := Value;
+end;
+
+{ TProtocolImpl }
+
+constructor TProtocolImpl.Create(trans: ITransport);
+begin
+  inherited Create;
+  FTrans := trans;
+end;
+
+function TProtocolImpl.GetTransport: ITransport;
+begin
+  Result := FTrans;
+end;
+
+function TProtocolImpl.ReadAnsiString: AnsiString;
+var
+  b : TBytes;
+  len : Integer;
+begin
+  Result := '';
+  b := ReadBinary;
+  len := Length( b );
+  if len > 0 then
+  begin
+    SetLength( Result, len);
+    System.Move( b[0], Pointer(Result)^, len );
+  end;
+end;
+
+function TProtocolImpl.ReadString: string;
+begin
+  Result := TEncoding.UTF8.GetString( ReadBinary );
+end;
+
+procedure TProtocolImpl.WriteAnsiString(const s: AnsiString);
+var
+  b : TBytes;
+  len : Integer;
+begin
+  len := Length(s);
+  SetLength( b, len);
+  if len > 0 then
+  begin
+    System.Move( Pointer(s)^, b[0], len );
+  end;
+  WriteBinary( b );
+end;
+
+procedure TProtocolImpl.WriteString(const s: string);
+var
+  b : TBytes;
+begin
+  b := TEncoding.UTF8.GetBytes(s);
+  WriteBinary( b );
+end;
+
+{ TProtocolUtil }
+
+class procedure TProtocolUtil.Skip( prot: IProtocol; type_: TType);
+var field : IField;
+    map   : IMap;
+    set_  : ISet;
+    list  : IList;
+    i     : Integer;
+begin
+  case type_ of
+    // simple types
+    TType.Bool_   :  prot.ReadBool();
+    TType.Byte_   :  prot.ReadByte();
+    TType.I16     :  prot.ReadI16();
+    TType.I32     :  prot.ReadI32();
+    TType.I64     :  prot.ReadI64();
+    TType.Double_ :  prot.ReadDouble();
+    TType.String_ :  prot.ReadBinary();// Don't try to decode the string, just skip it.
+
+    // structured types
+    TType.Struct :  begin
+      prot.ReadStructBegin();
+      while TRUE do begin
+        field := prot.ReadFieldBegin();
+        if (field.Type_ = TType.Stop) then Break;
+        Skip(prot, field.Type_);
+        prot.ReadFieldEnd();
+      end;
+      prot.ReadStructEnd();
+    end;
+
+    TType.Map :  begin
+      map := prot.ReadMapBegin();
+      for i := 0 to map.Count-1 do begin
+        Skip(prot, map.KeyType);
+        Skip(prot, map.ValueType);
+      end;
+      prot.ReadMapEnd();
+    end;
+
+    TType.Set_ :  begin
+      set_ := prot.ReadSetBegin();
+      for i := 0 to set_.Count-1
+      do Skip( prot, set_.ElementType);
+      prot.ReadSetEnd();
+    end;
+
+    TType.List :  begin
+      list := prot.ReadListBegin();
+      for i := 0 to list.Count-1
+      do Skip( prot, list.ElementType);
+      prot.ReadListEnd();
+    end;
+
+  else
+    ASSERT( FALSE); // any new types?
+  end;
+end;
+
+{ TStructImpl }
+
+constructor TStructImpl.Create(const AName: string);
+begin
+  inherited Create;
+  FName := AName;
+end;
+
+function TStructImpl.GetName: string;
+begin
+  Result := FName;
+end;
+
+procedure TStructImpl.SetName(const Value: string);
+begin
+  FName := Value;
+end;
+
+{ TMapImpl }
+
+constructor TMapImpl.Create(AValueType, AKeyType: TType; ACount: Integer);
+begin
+  inherited Create;
+  FValueType := AValueType;
+  FKeyType := AKeyType;
+  FCount := ACount;
+end;
+
+constructor TMapImpl.Create;
+begin
+  inherited Create;
+end;
+
+function TMapImpl.GetCount: Integer;
+begin
+  Result := FCount;
+end;
+
+function TMapImpl.GetKeyType: TType;
+begin
+  Result := FKeyType;
+end;
+
+function TMapImpl.GetValueType: TType;
+begin
+  Result := FValueType;
+end;
+
+procedure TMapImpl.SetCount(Value: Integer);
+begin
+  FCount := Value;
+end;
+
+procedure TMapImpl.SetKeyType(Value: TType);
+begin
+  FKeyType := Value;
+end;
+
+procedure TMapImpl.SetValueType(Value: TType);
+begin
+  FValueType := Value;
+end;
+
+{ IMessage }
+
+constructor TMessageImpl.Create(AName: string; AMessageType: TMessageType;
+  ASeqID: Integer);
+begin
+  inherited Create;
+  FName := AName;
+  FMessageType := AMessageType;
+  FSeqID := ASeqID;
+end;
+
+constructor TMessageImpl.Create;
+begin
+  inherited;
+end;
+
+function TMessageImpl.GetName: string;
+begin
+  Result := FName;
+end;
+
+function TMessageImpl.GetSeqID: Integer;
+begin
+  Result := FSeqID;
+end;
+
+function TMessageImpl.GetType: TMessageType;
+begin
+  Result := FMessageType;
+end;
+
+procedure TMessageImpl.SetName(const Value: string);
+begin
+  FName := Value;
+end;
+
+procedure TMessageImpl.SetSeqID(Value: Integer);
+begin
+  FSeqID := Value;
+end;
+
+procedure TMessageImpl.SetType(Value: TMessageType);
+begin
+  FMessageType := Value;
+end;
+
+{ ISet }
+
+constructor TSetImpl.Create( AElementType: TType; ACount: Integer);
+begin
+  inherited Create;
+  FCount := ACount;
+  FElementType := AElementType;
+end;
+
+constructor TSetImpl.Create;
+begin
+  inherited Create;
+end;
+
+function TSetImpl.GetCount: Integer;
+begin
+  Result := FCount;
+end;
+
+function TSetImpl.GetElementType: TType;
+begin
+  Result := FElementType;
+end;
+
+procedure TSetImpl.SetCount(Value: Integer);
+begin
+  FCount := Value;
+end;
+
+procedure TSetImpl.SetElementType(Value: TType);
+begin
+  FElementType := Value;
+end;
+
+{ IList }
+
+constructor TListImpl.Create( AElementType: TType; ACount: Integer);
+begin
+  inherited Create;
+  FCount := ACount;
+  FElementType := AElementType;
+end;
+
+constructor TListImpl.Create;
+begin
+  inherited Create;
+end;
+
+function TListImpl.GetCount: Integer;
+begin
+  Result := FCount;
+end;
+
+function TListImpl.GetElementType: TType;
+begin
+  Result := FElementType;
+end;
+
+procedure TListImpl.SetCount(Value: Integer);
+begin
+  FCount := Value;
+end;
+
+procedure TListImpl.SetElementType(Value: TType);
+begin
+  FElementType := Value;
+end;
+
+{ TBinaryProtocolImpl }
+
+constructor TBinaryProtocolImpl.Create( const trans: ITransport);
+begin
+  //no inherited
+  Create( trans, False, True);
+end;
+
+constructor TBinaryProtocolImpl.Create( const trans: ITransport; strictRead,
+  strictWrite: Boolean);
+begin
+  inherited Create( trans );
+  FStrictRead := strictRead;
+  FStrictWrite := strictWrite;
+end;
+
+function TBinaryProtocolImpl.ReadAll( var buf: TBytes; off,
+  len: Integer): Integer;
+begin
+  Result := FTrans.ReadAll( buf, off, len );
+end;
+
+function TBinaryProtocolImpl.ReadBinary: TBytes;
+var
+  size : Integer;
+  buf : TBytes;
+begin
+  size := ReadI32;
+  SetLength( buf, size );
+  FTrans.ReadAll( buf, 0, size);
+  Result := buf;
+end;
+
+function TBinaryProtocolImpl.ReadBool: Boolean;
+begin
+  Result := ReadByte = 1;
+end;
+
+function TBinaryProtocolImpl.ReadByte: ShortInt;
+var
+  bin : TBytes;
+begin
+  SetLength( bin, 1);
+  ReadAll( bin, 0, 1 );
+  Result := ShortInt( bin[0]);
+end;
+
+function TBinaryProtocolImpl.ReadDouble: Double;
+begin
+  Result := ConvertInt64ToDouble( ReadI64 )
+end;
+
+function TBinaryProtocolImpl.ReadFieldBegin: IField;
+var
+  field : IField;
+begin
+  field := TFieldImpl.Create;
+  field.Type_ := TType( ReadByte);
+  if ( field.Type_ <> TType.Stop ) then
+  begin
+    field.Id := ReadI16;
+  end;
+  Result := field;
+end;
+
+procedure TBinaryProtocolImpl.ReadFieldEnd;
+begin
+
+end;
+
+function TBinaryProtocolImpl.ReadI16: SmallInt;
+var
+  i16in : TBytes;
+begin
+  SetLength( i16in, 2 );
+  ReadAll( i16in, 0, 2);
+  Result := SmallInt(((i16in[0] and $FF) shl 8) or (i16in[1] and $FF));
+end;
+
+function TBinaryProtocolImpl.ReadI32: Integer;
+var
+  i32in : TBytes;
+begin
+  SetLength( i32in, 4 );
+  ReadAll( i32in, 0, 4);
+
+  Result := Integer(
+    ((i32in[0] and $FF) shl 24) or
+    ((i32in[1] and $FF) shl 16) or
+    ((i32in[2] and $FF) shl 8) or
+     (i32in[3] and $FF));
+
+end;
+
+function TBinaryProtocolImpl.ReadI64: Int64;
+var
+  i64in : TBytes;
+begin
+  SetLength( i64in, 8);
+  ReadAll( i64in, 0, 8);
+  Result :=
+    (Int64( i64in[0] and $FF) shl 56) or
+    (Int64( i64in[1] and $FF) shl 48) or
+    (Int64( i64in[2] and $FF) shl 40) or
+    (Int64( i64in[3] and $FF) shl 32) or
+    (Int64( i64in[4] and $FF) shl 24) or
+    (Int64( i64in[5] and $FF) shl 16) or
+    (Int64( i64in[6] and $FF) shl 8) or
+    (Int64( i64in[7] and $FF));
+end;
+
+function TBinaryProtocolImpl.ReadListBegin: IList;
+var
+  list : IList;
+begin
+  list := TListImpl.Create;
+  list.ElementType := TType( ReadByte );
+  list.Count := ReadI32;
+  Result := list;
+end;
+
+procedure TBinaryProtocolImpl.ReadListEnd;
+begin
+
+end;
+
+function TBinaryProtocolImpl.ReadMapBegin: IMap;
+var
+  map : IMap;
+begin
+  map := TMapImpl.Create;
+  map.KeyType := TType( ReadByte );
+  map.ValueType := TType( ReadByte );
+  map.Count := ReadI32;
+  Result := map;
+end;
+
+procedure TBinaryProtocolImpl.ReadMapEnd;
+begin
+
+end;
+
+function TBinaryProtocolImpl.ReadMessageBegin: IMessage;
+var
+  size : Integer;
+  version : Integer;
+  message : IMessage;
+begin
+  message := TMessageImpl.Create;
+  size := ReadI32;
+  if (size < 0) then
+  begin
+    version := size and Integer( VERSION_MASK);
+    if ( version <> Integer( VERSION_1)) then
+    begin
+      raise TProtocolException.Create(TProtocolException.BAD_VERSION, 'Bad version in ReadMessageBegin: ' + IntToStr(version) );
+    end;
+    message.Type_ := TMessageType( size and $000000ff);
+    message.Name := ReadString;
+    message.SeqID := ReadI32;
+  end else
+  begin
+    if FStrictRead then
+    begin
+      raise TProtocolException.Create( TProtocolException.BAD_VERSION, 'Missing version in readMessageBegin, old client?' );
+    end;
+    message.Name := ReadStringBody( size );
+    message.Type_ := TMessageType( ReadByte );
+    message.SeqID := ReadI32;
+  end;
+  Result := message;
+end;
+
+procedure TBinaryProtocolImpl.ReadMessageEnd;
+begin
+  inherited;
+
+end;
+
+function TBinaryProtocolImpl.ReadSetBegin: ISet;
+var
+  set_ : ISet;
+begin
+  set_ := TSetImpl.Create;
+  set_.ElementType := TType( ReadByte );
+  set_.Count := ReadI32;
+  Result := set_;
+end;
+
+procedure TBinaryProtocolImpl.ReadSetEnd;
+begin
+
+end;
+
+function TBinaryProtocolImpl.ReadStringBody( size: Integer): string;
+var
+  buf : TBytes;
+begin
+  SetLength( buf, size );
+  FTrans.ReadAll( buf, 0, size );
+  Result := TEncoding.UTF8.GetString( buf);
+end;
+
+function TBinaryProtocolImpl.ReadStructBegin: IStruct;
+begin
+  Result := TStructImpl.Create('');
+end;
+
+procedure TBinaryProtocolImpl.ReadStructEnd;
+begin
+  inherited;
+
+end;
+
+procedure TBinaryProtocolImpl.WriteBinary( const b: TBytes);
+var iLen : Integer;
+begin
+  iLen := Length(b);
+  WriteI32( iLen);
+  if iLen > 0 then FTrans.Write(b, 0, iLen);
+end;
+
+procedure TBinaryProtocolImpl.WriteBool(b: Boolean);
+begin
+  if b then
+  begin
+    WriteByte( 1 );
+  end else
+  begin
+    WriteByte( 0 );
+  end;
+end;
+
+procedure TBinaryProtocolImpl.WriteByte(b: ShortInt);
+var
+  a : TBytes;
+begin
+  SetLength( a, 1);
+  a[0] := Byte( b );
+  FTrans.Write( a, 0, 1 );
+end;
+
+procedure TBinaryProtocolImpl.WriteDouble( const d: Double);
+begin
+  WriteI64(ConvertDoubleToInt64(d));
+end;
+
+procedure TBinaryProtocolImpl.WriteFieldBegin( const field: IField);
+begin
+  WriteByte(ShortInt(field.Type_));
+  WriteI16(field.ID);
+end;
+
+procedure TBinaryProtocolImpl.WriteFieldEnd;
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteFieldStop;
+begin
+  WriteByte(ShortInt(TType.Stop));
+end;
+
+procedure TBinaryProtocolImpl.WriteI16(i16: SmallInt);
+var
+  i16out : TBytes;
+begin
+  SetLength( i16out, 2);
+  i16out[0] := Byte($FF and (i16 shr 8));
+  i16out[1] := Byte($FF and i16);
+  FTrans.Write( i16out );
+end;
+
+procedure TBinaryProtocolImpl.WriteI32(i32: Integer);
+var
+  i32out : TBytes;
+begin
+  SetLength( i32out, 4);
+  i32out[0] := Byte($FF and (i32 shr 24));
+  i32out[1] := Byte($FF and (i32 shr 16));
+  i32out[2] := Byte($FF and (i32 shr 8));
+  i32out[3] := Byte($FF and i32);
+  FTrans.Write( i32out, 0, 4);
+end;
+
+procedure TBinaryProtocolImpl.WriteI64( const i64: Int64);
+var
+  i64out : TBytes;
+begin
+  SetLength( i64out, 8);
+  i64out[0] := Byte($FF and (i64 shr 56));
+  i64out[1] := Byte($FF and (i64 shr 48));
+  i64out[2] := Byte($FF and (i64 shr 40));
+  i64out[3] := Byte($FF and (i64 shr 32));
+  i64out[4] := Byte($FF and (i64 shr 24));
+  i64out[5] := Byte($FF and (i64 shr 16));
+  i64out[6] := Byte($FF and (i64 shr 8));
+  i64out[7] := Byte($FF and i64);
+  FTrans.Write( i64out, 0, 8);
+end;
+
+procedure TBinaryProtocolImpl.WriteListBegin( const list: IList);
+begin
+  WriteByte(ShortInt(list.ElementType));
+  WriteI32(list.Count);
+end;
+
+procedure TBinaryProtocolImpl.WriteListEnd;
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteMapBegin( const map: IMap);
+begin
+  WriteByte(ShortInt(map.KeyType));
+  WriteByte(ShortInt(map.ValueType));
+  WriteI32(map.Count);
+end;
+
+procedure TBinaryProtocolImpl.WriteMapEnd;
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteMessageBegin( const msg: IMessage);
+var
+  version : Cardinal;
+begin
+  if FStrictWrite then
+  begin
+    version := VERSION_1 or Cardinal( msg.Type_);
+    WriteI32( Integer( version) );
+    WriteString( msg.Name);
+    WriteI32( msg.SeqID);
+  end else
+  begin
+    WriteString( msg.Name);
+    WriteByte(ShortInt( msg.Type_));
+    WriteI32( msg.SeqID);
+  end;
+end;
+
+procedure TBinaryProtocolImpl.WriteMessageEnd;
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteSetBegin( const set_: ISet);
+begin
+  WriteByte(ShortInt(set_.ElementType));
+  WriteI32(set_.Count);
+end;
+
+procedure TBinaryProtocolImpl.WriteSetEnd;
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteStructBegin( const struc: IStruct);
+begin
+
+end;
+
+procedure TBinaryProtocolImpl.WriteStructEnd;
+begin
+
+end;
+
+{ TProtocolException }
+
+constructor TProtocolException.Create;
+begin
+  inherited Create('');
+  FType := UNKNOWN;
+end;
+
+constructor TProtocolException.Create(type_: Integer);
+begin
+  inherited Create('');
+  FType := type_;
+end;
+
+constructor TProtocolException.Create(type_: Integer; const msg: string);
+begin
+  inherited Create( msg );
+  FType := type_;
+end;
+
+{ TThriftStringBuilder }
+
+function TThriftStringBuilder.Append(const Value: TBytes): TStringBuilder;
+begin
+  Result := Append( string( RawByteString(Value)) );
+end;
+
+function TThriftStringBuilder.Append(
+  const Value: IThriftContainer): TStringBuilder;
+begin
+  Result := Append( Value.ToString );
+end;
+
+{ TBinaryProtocolImpl.TFactory }
+
+constructor TBinaryProtocolImpl.TFactory.Create(AStrictRead, AStrictWrite: Boolean);
+begin
+  inherited Create;
+  FStrictRead := AStrictRead;
+  FStrictWrite := AStrictWrite;
+end;
+
+constructor TBinaryProtocolImpl.TFactory.Create;
+begin
+  //no inherited;
+  Create( False, True )
+end;
+
+function TBinaryProtocolImpl.TFactory.GetProtocol( const trans: ITransport): IProtocol;
+begin
+  Result := TBinaryProtocolImpl.Create( trans, FStrictRead, FStrictWrite);
+end;
+
+
+{ TProtocolDecorator }
+
+constructor TProtocolDecorator.Create( const aProtocol : IProtocol);
+begin
+  ASSERT( aProtocol <> nil);
+  inherited Create( aProtocol.Transport);
+  FWrappedProtocol := aProtocol;
+end;
+
+
+procedure TProtocolDecorator.WriteMessageBegin( const msg: IMessage);
+begin
+  FWrappedProtocol.WriteMessageBegin( msg);
+end;
+
+
+procedure TProtocolDecorator.WriteMessageEnd;
+begin
+  FWrappedProtocol.WriteMessageEnd;
+end;
+
+
+procedure TProtocolDecorator.WriteStructBegin( const struc: IStruct);
+begin
+  FWrappedProtocol.WriteStructBegin( struc);
+end;
+
+
+procedure TProtocolDecorator.WriteStructEnd;
+begin
+  FWrappedProtocol.WriteStructEnd;
+end;
+
+
+procedure TProtocolDecorator.WriteFieldBegin( const field: IField);
+begin
+  FWrappedProtocol.WriteFieldBegin( field);
+end;
+
+
+procedure TProtocolDecorator.WriteFieldEnd;
+begin
+  FWrappedProtocol.WriteFieldEnd;
+end;
+
+
+procedure TProtocolDecorator.WriteFieldStop;
+begin
+  FWrappedProtocol.WriteFieldStop;
+end;
+
+
+procedure TProtocolDecorator.WriteMapBegin( const map: IMap);
+begin
+  FWrappedProtocol.WriteMapBegin( map);
+end;
+
+
+procedure TProtocolDecorator.WriteMapEnd;
+begin
+  FWrappedProtocol.WriteMapEnd;
+end;
+
+
+procedure TProtocolDecorator.WriteListBegin( const list: IList);
+begin
+  FWrappedProtocol.WriteListBegin( list);
+end;
+
+
+procedure TProtocolDecorator.WriteListEnd();
+begin
+  FWrappedProtocol.WriteListEnd();
+end;
+
+
+procedure TProtocolDecorator.WriteSetBegin( const set_: ISet );
+begin
+  FWrappedProtocol.WriteSetBegin( set_);
+end;
+
+
+procedure TProtocolDecorator.WriteSetEnd();
+begin
+  FWrappedProtocol.WriteSetEnd();
+end;
+
+
+procedure TProtocolDecorator.WriteBool( b: Boolean);
+begin
+  FWrappedProtocol.WriteBool( b);
+end;
+
+
+procedure TProtocolDecorator.WriteByte( b: ShortInt);
+begin
+  FWrappedProtocol.WriteByte( b);
+end;
+
+
+procedure TProtocolDecorator.WriteI16( i16: SmallInt);
+begin
+  FWrappedProtocol.WriteI16( i16);
+end;
+
+
+procedure TProtocolDecorator.WriteI32( i32: Integer);
+begin
+  FWrappedProtocol.WriteI32( i32);
+end;
+
+
+procedure TProtocolDecorator.WriteI64( const i64: Int64);
+begin
+  FWrappedProtocol.WriteI64( i64);
+end;
+
+
+procedure TProtocolDecorator.WriteDouble( const d: Double);
+begin
+  FWrappedProtocol.WriteDouble( d);
+end;
+
+
+procedure TProtocolDecorator.WriteString( const s: string );
+begin
+  FWrappedProtocol.WriteString( s);
+end;
+
+
+procedure TProtocolDecorator.WriteAnsiString( const s: AnsiString);
+begin
+  FWrappedProtocol.WriteAnsiString( s);
+end;
+
+
+procedure TProtocolDecorator.WriteBinary( const b: TBytes);
+begin
+  FWrappedProtocol.WriteBinary( b);
+end;
+
+
+function TProtocolDecorator.ReadMessageBegin: IMessage;
+begin
+  result := FWrappedProtocol.ReadMessageBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadMessageEnd();
+begin
+  FWrappedProtocol.ReadMessageEnd();
+end;
+
+
+function TProtocolDecorator.ReadStructBegin: IStruct;
+begin
+  result := FWrappedProtocol.ReadStructBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadStructEnd;
+begin
+  FWrappedProtocol.ReadStructEnd;
+end;
+
+
+function TProtocolDecorator.ReadFieldBegin: IField;
+begin
+  result := FWrappedProtocol.ReadFieldBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadFieldEnd();
+begin
+  FWrappedProtocol.ReadFieldEnd();
+end;
+
+
+function TProtocolDecorator.ReadMapBegin: IMap;
+begin
+  result := FWrappedProtocol.ReadMapBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadMapEnd();
+begin
+  FWrappedProtocol.ReadMapEnd();
+end;
+
+
+function TProtocolDecorator.ReadListBegin: IList;
+begin
+  result := FWrappedProtocol.ReadListBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadListEnd();
+begin
+  FWrappedProtocol.ReadListEnd();
+end;
+
+
+function TProtocolDecorator.ReadSetBegin: ISet;
+begin
+  result := FWrappedProtocol.ReadSetBegin;
+end;
+
+
+procedure TProtocolDecorator.ReadSetEnd();
+begin
+  FWrappedProtocol.ReadSetEnd();
+end;
+
+
+function TProtocolDecorator.ReadBool: Boolean;
+begin
+  result := FWrappedProtocol.ReadBool;
+end;
+
+
+function TProtocolDecorator.ReadByte: ShortInt;
+begin
+  result := FWrappedProtocol.ReadByte;
+end;
+
+
+function TProtocolDecorator.ReadI16: SmallInt;
+begin
+  result := FWrappedProtocol.ReadI16;
+end;
+
+
+function TProtocolDecorator.ReadI32: Integer;
+begin
+  result := FWrappedProtocol.ReadI32;
+end;
+
+
+function TProtocolDecorator.ReadI64: Int64;
+begin
+  result := FWrappedProtocol.ReadI64;
+end;
+
+
+function TProtocolDecorator.ReadDouble:Double;
+begin
+  result := FWrappedProtocol.ReadDouble;
+end;
+
+
+function TProtocolDecorator.ReadBinary: TBytes;
+begin
+  result := FWrappedProtocol.ReadBinary;
+end;
+
+
+function TProtocolDecorator.ReadString: string;
+begin
+  result := FWrappedProtocol.ReadString;
+end;
+
+
+function TProtocolDecorator.ReadAnsiString: AnsiString;
+begin
+  result := FWrappedProtocol.ReadAnsiString;
+end;
+
+
+
+end.
+

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/delphi/src/Thrift.Serializer.pas
----------------------------------------------------------------------
diff --git a/lib/delphi/src/Thrift.Serializer.pas b/lib/delphi/src/Thrift.Serializer.pas
index 43b5d29..cf646c8 100644
--- a/lib/delphi/src/Thrift.Serializer.pas
+++ b/lib/delphi/src/Thrift.Serializer.pas
@@ -86,7 +86,7 @@ implementation
 constructor TSerializer.Create();
 // Create a new TSerializer that uses the TBinaryProtocol by default.
 begin
-  //no inherited;  
+  //no inherited;
   Create( TBinaryProtocolImpl.TFactory.Create);
 end;
 
@@ -138,7 +138,7 @@ end;
 procedure TSerializer.Serialize( const input : IBase; const aStm : TStream);
 // Serialize the Thrift object into a byte array. The process is simple,
 // just clear the byte array output, write the object into it, and grab the
-// raw bytes. 
+// raw bytes.
 const COPY_ENTIRE_STREAM = 0;
 begin
   try
@@ -157,7 +157,7 @@ end;
 constructor TDeserializer.Create();
 // Create a new TDeserializer that uses the TBinaryProtocol by default.
 begin
-  //no inherited;  
+  //no inherited;
   Create( TBinaryProtocolImpl.TFactory.Create);
 end;
 

http://git-wip-us.apache.org/repos/asf/thrift/blob/d5436f5c/lib/delphi/src/Thrift.Server.pas
----------------------------------------------------------------------
diff --git a/lib/delphi/src/Thrift.Server.pas b/lib/delphi/src/Thrift.Server.pas
index 2fb5c90..2935747 100644
--- a/lib/delphi/src/Thrift.Server.pas
+++ b/lib/delphi/src/Thrift.Server.pas
@@ -87,7 +87,7 @@ type
     constructor Create(
       const AProcessor :IProcessor;
       const AServerTransport: IServerTransport
-	  ); overload;
+      ); overload;
 
     constructor Create(
       const AProcessor :IProcessor;
@@ -166,7 +166,7 @@ begin
   InputTransFactory := TTransportFactoryImpl.Create;
   OutputTransFactory := TTransportFactoryImpl.Create;
 
-  //no inherited;  
+  //no inherited;
   Create(
     AProcessor,
     AServerTransport,
@@ -187,7 +187,7 @@ begin
   InputProtocolFactory := TBinaryProtocolImpl.TFactory.Create;
   OutputProtocolFactory := TBinaryProtocolImpl.TFactory.Create;
 
-  //no inherited;  
+  //no inherited;
   Create( AProcessor, AServerTransport, ATransportFactory, ATransportFactory,
     InputProtocolFactory, OutputProtocolFactory, DefaultLogDelegate);
 end;
@@ -338,16 +338,16 @@ begin
 
       client := FServerTransport.Accept( procedure
                                          begin
-                                           if FServerEvents <> nil
+                                           if FServerEvents <> nil
                                            then FServerEvents.PreAccept;
-                                         end);
-
-      if client = nil then begin
-        if FStop
-        then Abort  // silent exception
-        else raise TTransportException.Create( 'ServerTransport.Accept() may not return NULL' );
-      end;
-
+                                         end);
+
+      if client = nil then begin
+        if FStop
+        then Abort  // silent exception
+        else raise TTransportException.Create( 'ServerTransport.Accept() may not return NULL' );
+      end;
+
       FLogDelegate( 'Client Connected!');
 
       InputTransport := FInputTransportFactory.GetTransport( client );