epoc32/include/s32strm.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
#if !defined(__S32STRM_H__)
williamr@2
    17
#define __S32STRM_H__
williamr@2
    18
#if !defined(__E32BASE_H__)
williamr@2
    19
#include <e32base.h>
williamr@2
    20
#endif
williamr@2
    21
williamr@2
    22
/** The largest integer value which can be stored as a TCardinality type. */
williamr@2
    23
const TInt KMaxCardinality=0x1fffffff;
williamr@2
    24
//
williamr@2
    25
class MStreamBuf;
williamr@2
    26
class RWriteStream;
williamr@2
    27
williamr@2
    28
/**
williamr@2
    29
 * @publishedAll 
williamr@2
    30
 * @released
williamr@2
    31
 * The read stream interface. The process of internalising from a stream is 
williamr@2
    32
achieved through a reference to an object of this type.
williamr@2
    33
williamr@2
    34
A store aware class defines an implements an InternalizeL() member function 
williamr@2
    35
which is used to internalise that object and takes a reference to an 
williamr@2
    36
RReadStream as the interface to the read stream. 
williamr@2
    37
*/
williamr@2
    38
class RReadStream
williamr@2
    39
	{
williamr@2
    40
public:
williamr@2
    41
	inline RReadStream();
williamr@2
    42
	inline RReadStream(MStreamBuf* aSource);
williamr@2
    43
	inline MStreamBuf* Source();
williamr@2
    44
	inline void Close();
williamr@2
    45
	IMPORT_C void Release();
williamr@2
    46
//
williamr@2
    47
	IMPORT_C void PushL();
williamr@2
    48
	inline void Pop();
williamr@2
    49
//
williamr@2
    50
	IMPORT_C void ReadL(TDes8& aDes);
williamr@2
    51
	IMPORT_C void ReadL(TDes8& aDes,TInt aLength);
williamr@2
    52
	IMPORT_C void ReadL(TDes8& aDes,TChar aDelim);
williamr@2
    53
	IMPORT_C void ReadL(TUint8* aPtr,TInt aLength);
williamr@2
    54
	IMPORT_C void ReadL(TInt aLength);
williamr@2
    55
	inline void ReadL(RWriteStream& aStream);
williamr@2
    56
	inline void ReadL(RWriteStream& aStream,TInt aLength);
williamr@2
    57
//
williamr@2
    58
	IMPORT_C void ReadL(TDes16& aDes);
williamr@2
    59
	IMPORT_C void ReadL(TDes16& aDes,TInt aLength);
williamr@2
    60
	IMPORT_C void ReadL(TDes16& aDes,TChar aDelim);
williamr@2
    61
	IMPORT_C void ReadL(TUint16* aPtr,TInt aLength);
williamr@2
    62
//
williamr@2
    63
	IMPORT_C TInt8 ReadInt8L();
williamr@2
    64
	IMPORT_C TInt16 ReadInt16L();
williamr@2
    65
	IMPORT_C TInt32 ReadInt32L();
williamr@2
    66
	IMPORT_C TUint8 ReadUint8L();
williamr@2
    67
	IMPORT_C TUint16 ReadUint16L();
williamr@2
    68
	IMPORT_C TUint32 ReadUint32L();
williamr@2
    69
	IMPORT_C TReal32 ReadReal32L() __SOFTFP;
williamr@2
    70
	IMPORT_C TReal64 ReadReal64L() __SOFTFP;
williamr@2
    71
protected:
williamr@2
    72
	inline void Attach(MStreamBuf* aSource);
williamr@2
    73
	inline void Detach();
williamr@2
    74
private:
williamr@2
    75
	MStreamBuf* iSrc;
williamr@2
    76
private:
williamr@2
    77
	friend class RWriteStream;
williamr@2
    78
	};
williamr@2
    79
template <class T>
williamr@2
    80
class MExternalizer;
williamr@2
    81
class TStreamRef;
williamr@2
    82
williamr@2
    83
/**
williamr@2
    84
 * @publishedAll 
williamr@2
    85
 * @released
williamr@2
    86
 * The write stream interface. The process of externalising to a stream is 
williamr@2
    87
achieved through a reference to an object of this type.
williamr@2
    88
williamr@2
    89
A store aware class defines and implements an ExternalizeL() member function 
williamr@2
    90
which is used to externalise that object and takes a reference to an 
williamr@2
    91
RWriteStream as the interface to the write stream. 
williamr@2
    92
*/
williamr@2
    93
class RWriteStream
williamr@2
    94
	{
williamr@2
    95
public:
williamr@2
    96
	inline RWriteStream();
williamr@2
    97
	inline RWriteStream(const MExternalizer<TStreamRef>& anExter);
williamr@2
    98
	inline RWriteStream(MStreamBuf* aSink);
williamr@2
    99
	inline MStreamBuf* Sink();
williamr@2
   100
	IMPORT_C void Close();
williamr@2
   101
	IMPORT_C void Release();
williamr@2
   102
	IMPORT_C void CommitL();
williamr@2
   103
//
williamr@2
   104
	IMPORT_C void PushL();
williamr@2
   105
	inline void Pop();
williamr@2
   106
//
williamr@2
   107
	IMPORT_C void WriteL(const TDesC8& aDes);
williamr@2
   108
	IMPORT_C void WriteL(const TDesC8& aDes,TInt aLength);
williamr@2
   109
	IMPORT_C void WriteL(const TUint8* aPtr,TInt aLength);
williamr@2
   110
	IMPORT_C void WriteL(RReadStream& aStream);
williamr@2
   111
	IMPORT_C void WriteL(RReadStream& aStream,TInt aLength);
williamr@2
   112
//
williamr@2
   113
	IMPORT_C void WriteL(const TDesC16& aDes);
williamr@2
   114
	IMPORT_C void WriteL(const TDesC16& aDes,TInt aLength);
williamr@2
   115
	IMPORT_C void WriteL(const TUint16* aPtr,TInt aLength);
williamr@2
   116
//
williamr@2
   117
	IMPORT_C void WriteInt8L(TInt aValue);
williamr@2
   118
	IMPORT_C void WriteInt16L(TInt aValue);
williamr@2
   119
	IMPORT_C void WriteInt32L(TInt32 aValue);
williamr@2
   120
	IMPORT_C void WriteUint8L(TUint aValue);
williamr@2
   121
	IMPORT_C void WriteUint16L(TUint aValue);
williamr@2
   122
	IMPORT_C void WriteUint32L(TUint32 aValue);
williamr@2
   123
	IMPORT_C void WriteReal32L(TReal aValue) __SOFTFP;
williamr@2
   124
	IMPORT_C void WriteReal64L(TReal64 aValue) __SOFTFP;
williamr@2
   125
protected:
williamr@2
   126
	inline void Attach(MStreamBuf* aSink);
williamr@2
   127
	inline void Detach();
williamr@2
   128
private:
williamr@2
   129
	IMPORT_C void WriteRefL(TStreamRef aRef);
williamr@2
   130
private:
williamr@2
   131
	MStreamBuf* iSnk;
williamr@2
   132
	const MExternalizer<TStreamRef>* iExterL;
williamr@2
   133
private:
williamr@2
   134
	friend class TStreamRef;
williamr@2
   135
	};
williamr@2
   136
//
williamr@2
   137
template <class T>
williamr@2
   138
inline RWriteStream& operator<<(RWriteStream& aStream,const T& anObject);
williamr@2
   139
template <class T>
williamr@2
   140
inline RReadStream& operator>>(RReadStream& aStream,T& anObject);
williamr@2
   141
williamr@2
   142
/**
williamr@2
   143
 * @publishedAll 
williamr@2
   144
 * @released
williamr@2
   145
 * Compact stream format for positive integer values in the range 0 to 
williamr@2
   146
536,870,911 ((2^29)-1). Values in the range 0-127 are stored in a single byte, 
williamr@2
   147
128-16383 in two bytes and other values in 4 bytes.
williamr@2
   148
williamr@2
   149
The class provides conversion to and from TInt, and both externalization and 
williamr@2
   150
internalization functions. It is used to significant effect within Symbian 
williamr@2
   151
code. 
williamr@2
   152
*/
williamr@2
   153
class TCardinality
williamr@2
   154
	{
williamr@2
   155
public:
williamr@2
   156
	TCardinality() {}
williamr@2
   157
	inline TCardinality(TInt aCount);
williamr@2
   158
	inline operator TInt() const;
williamr@2
   159
//
williamr@2
   160
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   161
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   162
private:
williamr@2
   163
	TInt iCount;
williamr@2
   164
private:
williamr@2
   165
	IMPORT_C static void __DbgChkRange(TInt aCount);
williamr@2
   166
	};
williamr@2
   167
//
williamr@2
   168
/** Defines a function type for a function returned by TExternalizer::Function() 
williamr@2
   169
and TStreamRef. */
williamr@2
   170
typedef void (*TExternalizeFunction)(const TAny* aPtr,RWriteStream& aStream);
williamr@2
   171
/** Defines a function type for a function returned by TInternalizer::Function(). */
williamr@2
   172
typedef void (*TInternalizeFunction)(TAny* aPtr,RReadStream& aStream);
williamr@2
   173
williamr@2
   174
/**
williamr@2
   175
 * @publishedAll 
williamr@2
   176
 * @released
williamr@2
   177
 * A family of classes whose instances can be used to perform externalisation 
williamr@2
   178
on behalf of other objects.
williamr@2
   179
williamr@2
   180
@see TStreamRef  
williamr@2
   181
*/
williamr@2
   182
template <class T>
williamr@2
   183
class TExternalizer
williamr@2
   184
	{
williamr@2
   185
public:
williamr@2
   186
	inline void operator()(const T& anObject,RWriteStream& aStream) const;
williamr@2
   187
	inline static TExternalizeFunction Function();
williamr@2
   188
private:
williamr@2
   189
	static void ExternalizeAsL(const TAny* aPtr,RWriteStream& aStream);
williamr@2
   190
	};
williamr@2
   191
williamr@2
   192
/**
williamr@2
   193
 * @publishedAll 
williamr@2
   194
 * @released
williamr@2
   195
 * A specific instantiation of the family of TExternalizer<class T> classes whose 
williamr@2
   196
instances can be used to perform externalisation on behalf of other untyped 
williamr@2
   197
objects. 
williamr@2
   198
*/
williamr@2
   199
TEMPLATE_SPECIALIZATION class TExternalizer<TAny>
williamr@2
   200
	{
williamr@2
   201
public:
williamr@2
   202
	/** Default constructor. */
williamr@2
   203
	TExternalizer() {}
williamr@2
   204
	
williamr@2
   205
	/** Constructs the externaliser with the specified externalisation function.
williamr@2
   206
	
williamr@2
   207
	@param aFunction The externalisation function. */
williamr@2
   208
	inline TExternalizer(TExternalizeFunction aFunction);
williamr@2
   209
	inline void operator()(const TAny* aPtr,RWriteStream& aStream) const;
williamr@2
   210
	
williamr@2
   211
	/** Gets a pointer to the function to be used to perform externalisation.
williamr@2
   212
	
williamr@2
   213
	@return The externalisation function. */
williamr@2
   214
	inline TExternalizeFunction Function() const;
williamr@2
   215
private:
williamr@2
   216
	TExternalizeFunction iFunc;
williamr@2
   217
	};
williamr@2
   218
williamr@2
   219
/**
williamr@2
   220
 * @publishedAll 
williamr@2
   221
 * @released
williamr@2
   222
 * A family of classes whose instances can be used to perform internalisation 
williamr@2
   223
on behalf of other objects. 
williamr@2
   224
*/
williamr@2
   225
template <class T>
williamr@2
   226
class TInternalizer
williamr@2
   227
	{
williamr@2
   228
public:
williamr@2
   229
	inline void operator()(T& anObject,RReadStream& aStream) const;
williamr@2
   230
	inline static TInternalizeFunction Function();
williamr@2
   231
private:
williamr@2
   232
	static void InternalizeAsL(TAny* aPtr,RReadStream& aStream);
williamr@2
   233
	};
williamr@2
   234
williamr@2
   235
/**
williamr@2
   236
 * @publishedAll 
williamr@2
   237
 * @released
williamr@2
   238
 * A specific instantiation of the family of TInternalizer<class T> classes whose 
williamr@2
   239
instances can be used to perform internalisation on behalf of other objects. 
williamr@2
   240
*/
williamr@2
   241
TEMPLATE_SPECIALIZATION class TInternalizer<TAny>
williamr@2
   242
	{
williamr@2
   243
public:
williamr@2
   244
	/** Default constructor. */
williamr@2
   245
	TInternalizer() {}
williamr@2
   246
	
williamr@2
   247
	/** Constructs the internaliser with the specified internalisation function.
williamr@2
   248
	
williamr@2
   249
	@param aFunction The internalisation function. */
williamr@2
   250
	inline TInternalizer(TInternalizeFunction aFunction);
williamr@2
   251
	inline void operator()(TAny* aPtr,RReadStream& aStream) const;
williamr@2
   252
	
williamr@2
   253
	/** Gets a pointer to the function to be used to perform internalisation.
williamr@2
   254
	
williamr@2
   255
	@return The internalisation function. */
williamr@2
   256
	inline TInternalizeFunction Function() const;
williamr@2
   257
private:
williamr@2
   258
	TInternalizeFunction iFunc;
williamr@2
   259
	};
williamr@2
   260
williamr@2
   261
/**
williamr@2
   262
 * @publishedAll 
williamr@2
   263
 * @released
williamr@2
   264
 * A family of classes defining an interface that can be implemented by classes 
williamr@2
   265
that need to perform externalisation on behalf of others.
williamr@2
   266
williamr@2
   267
@see CStoreMap 
williamr@2
   268
*/
williamr@2
   269
template <class T>
williamr@2
   270
class MExternalizer
williamr@2
   271
	{
williamr@2
   272
public:
williamr@2
   273
	inline void operator()(const T& anObject,RWriteStream& aStream) const;
williamr@2
   274
private:
williamr@2
   275
	/** Performs externalisation.
williamr@2
   276
	
williamr@2
   277
	The function is called by operator().
williamr@2
   278
	
williamr@2
   279
	@param anObject The object to be externalised.
williamr@2
   280
	@param aStream The write stream. */
williamr@2
   281
	virtual void ExternalizeL(const T& anObject,RWriteStream& aStream) const=0;
williamr@2
   282
	};
williamr@2
   283
williamr@2
   284
/**
williamr@2
   285
 * @publishedAll 
williamr@2
   286
 * @released
williamr@2
   287
 * A family of classes defining an interface that can be implemented by classes 
williamr@2
   288
that need to perform internalisation on behalf of others.
williamr@2
   289
williamr@2
   290
@see CStoreMap 
williamr@2
   291
*/
williamr@2
   292
template <class T>
williamr@2
   293
class MInternalizer
williamr@2
   294
	{
williamr@2
   295
public:
williamr@2
   296
	inline void operator()(T& anObject,RReadStream& aStream) const;
williamr@2
   297
private:
williamr@2
   298
	/** Performs internalisation.
williamr@2
   299
	
williamr@2
   300
	The function is called by operator().
williamr@2
   301
	
williamr@2
   302
	@param anObject The object to be the target of the internalisation process.
williamr@2
   303
	@param aStream The read stream. */
williamr@2
   304
	virtual void InternalizeL(T& anObject,RReadStream& aStream) const=0;
williamr@2
   305
	};
williamr@2
   306
williamr@2
   307
/**
williamr@2
   308
 * @publishedAll 
williamr@2
   309
 * @released
williamr@2
   310
 * A proxy for perfoming externalisation for classes that do not have an 
williamr@2
   311
externalisation member. 
williamr@2
   312
*/
williamr@2
   313
class TStreamRef
williamr@2
   314
	{
williamr@2
   315
public:
williamr@2
   316
	inline TStreamRef(const TAny* aPtr,TExternalizeFunction aFunction);
williamr@2
   317
	inline const TAny* Ptr() const;
williamr@2
   318
	inline TExternalizeFunction Function() const;
williamr@2
   319
//
williamr@2
   320
	inline void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   321
private:
williamr@2
   322
	const TAny* iPtr;
williamr@2
   323
	TExternalizeFunction iFunc;
williamr@2
   324
	};
williamr@2
   325
williamr@2
   326
/**
williamr@2
   327
 * @publishedAll 
williamr@2
   328
 * @released
williamr@2
   329
 * A class whose members are used to distinguish between the two variants of 
williamr@2
   330
the Symbian OS internal function DoExternalizeL(). 
williamr@2
   331
*/
williamr@2
   332
class Externalize
williamr@2
   333
	{
williamr@2
   334
public:
williamr@2
   335
	/** Indicates that an object will be externalized by calling its 
williamr@2
   336
	ExternalizeL() member. */
williamr@2
   337
	class Member {};
williamr@2
   338
williamr@2
   339
	/** Indicates that an object will be externalized by calling a global 
williamr@2
   340
	ExternalizeL() function. */
williamr@2
   341
	class Function {};
williamr@2
   342
	};
williamr@2
   343
williamr@2
   344
/**
williamr@2
   345
 * @publishedAll 
williamr@2
   346
 * @released
williamr@2
   347
 * A class whose members are used to distinguish between the two variants of 
williamr@2
   348
the Symbian OS internal function DoInternalizeL(). 
williamr@2
   349
*/
williamr@2
   350
class Internalize
williamr@2
   351
	{
williamr@2
   352
public:
williamr@2
   353
	/** Indicates that an object will be internalized by calling its 
williamr@2
   354
	InternalizeL() member. */
williamr@2
   355
	class Member {};
williamr@2
   356
williamr@2
   357
	/** Indicates that an object will be internalized by calling a global 
williamr@2
   358
	InternalizeL() function. */
williamr@2
   359
	class Function {};
williamr@2
   360
	};
williamr@2
   361
williamr@2
   362
#include <s32strm.inl>
williamr@2
   363
#endif