epoc32/include/s32std.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(__S32STD_H__)
williamr@2
    17
#define __S32STD_H__
williamr@2
    18
#if !defined(__S32STRM_H__)
williamr@2
    19
#include <s32strm.h>
williamr@2
    20
#endif
williamr@2
    21
williamr@2
    22
/** The value of the null stream ID. */
williamr@2
    23
const TUint32 KNullStreamIdValue=0;
williamr@2
    24
const TUint32 KMaxStreamIdValue=0xfffffff;
williamr@2
    25
const TUint32 KMaskStreamIdValue=0xfffffff;
williamr@2
    26
const TInt KShiftStreamIdValue=28;
williamr@2
    27
williamr@2
    28
/**
williamr@2
    29
 * @publishedAll 
williamr@2
    30
 * @released
williamr@2
    31
 * Provides unique identification for stream within a store.
williamr@2
    32
williamr@2
    33
A store always assigns a new id and constructs and returns an associated TStreamId 
williamr@2
    34
object when a new stream is created.
williamr@2
    35
williamr@2
    36
@see RStoreWriteStream::CreateL()
williamr@2
    37
@see RStoreWriteStream::CreateLC()  
williamr@2
    38
*/
williamr@2
    39
class TStreamId
williamr@2
    40
	{
williamr@2
    41
public:
williamr@2
    42
	/** Constructs an uninitialised object. It is necessary because there are also 
williamr@2
    43
	non-default constructors in this class. */
williamr@2
    44
	TStreamId() {}
williamr@2
    45
	inline TStreamId(TUint32 aValue);
williamr@2
    46
//
williamr@2
    47
	inline TBool operator==(TStreamId anId) const;
williamr@2
    48
	inline TBool operator!=(TStreamId anId) const;
williamr@2
    49
//
williamr@2
    50
	inline void ExternalizeL(RWriteStream& aStream) const;
williamr@2
    51
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
    52
//
williamr@2
    53
	inline TUint32 Value() const;
williamr@2
    54
private:
williamr@2
    55
	TUint32 iVal;
williamr@2
    56
private:
williamr@2
    57
	IMPORT_C static void __DbgChkRange(TUint32 aValue);
williamr@2
    58
	};
williamr@2
    59
#if defined(__NO_CLASS_CONSTS__)
williamr@2
    60
#define KNullStreamId TStreamId(KNullStreamIdValue)
williamr@2
    61
#else
williamr@2
    62
/** The null stream ID; this is a stream ID which is guaranteed not to exist. */
williamr@2
    63
const TStreamId KNullStreamId=TStreamId(KNullStreamIdValue);
williamr@2
    64
#endif
williamr@2
    65
//
williamr@2
    66
class CStreamStore;
williamr@2
    67
williamr@2
    68
/**
williamr@2
    69
 * @publishedAll 
williamr@2
    70
 * @released
williamr@2
    71
 * Supports the opening and manipulation of an existing stream in a store.  
williamr@2
    72
*/
williamr@2
    73
class RStoreReadStream : public RReadStream
williamr@2
    74
	{
williamr@2
    75
public:
williamr@2
    76
	IMPORT_C void OpenL(const CStreamStore& aStore,TStreamId anId);
williamr@2
    77
	IMPORT_C void OpenLC(const CStreamStore& aStore,TStreamId anId);
williamr@2
    78
	};
williamr@2
    79
williamr@2
    80
/**
williamr@2
    81
 * @publishedAll 
williamr@2
    82
 * @released
williamr@2
    83
 * Supports the writing of a stream to a store.
williamr@2
    84
williamr@2
    85
The class allows:
williamr@2
    86
williamr@2
    87
creation of a new stream
williamr@2
    88
williamr@2
    89
overwriting of an existing stream
williamr@2
    90
williamr@2
    91
replacement of an existing stream
williamr@2
    92
williamr@2
    93
appending to an existing stream 
williamr@2
    94
*/
williamr@2
    95
class RStoreWriteStream : public RWriteStream
williamr@2
    96
	{
williamr@2
    97
public:
williamr@2
    98
	/** Constructs an uninitialised object. It is necessary because there are also 
williamr@2
    99
	non-default constructors in this class. */
williamr@2
   100
	RStoreWriteStream() {}
williamr@2
   101
	inline RStoreWriteStream(const MExternalizer<TStreamRef>& anExter);
williamr@2
   102
	IMPORT_C TStreamId CreateL(CStreamStore& aStore);
williamr@2
   103
	IMPORT_C TStreamId CreateLC(CStreamStore& aStore);
williamr@2
   104
	IMPORT_C void OpenL(CStreamStore& aStore,TStreamId anId);
williamr@2
   105
	IMPORT_C void OpenLC(CStreamStore& aStore,TStreamId anId);
williamr@2
   106
	IMPORT_C void ReplaceL(CStreamStore& aStore,TStreamId anId);
williamr@2
   107
	IMPORT_C void ReplaceLC(CStreamStore& aStore,TStreamId anId);
williamr@2
   108
	IMPORT_C void AppendL(CStreamStore& aStore,TStreamId anId);
williamr@2
   109
	IMPORT_C void AppendLC(CStreamStore& aStore,TStreamId anId);
williamr@2
   110
	};
williamr@2
   111
williamr@2
   112
/**
williamr@2
   113
 * @publishedAll 
williamr@2
   114
 * @released
williamr@2
   115
 * Base class for swizzles.
williamr@2
   116
williamr@2
   117
A swizzle maintains a dual representation for an object:
williamr@2
   118
williamr@2
   119
by stream id, if the object is not in memory (the stream contains the external 
williamr@2
   120
representation of that object).
williamr@2
   121
williamr@2
   122
by pointer, if the object is in memory.
williamr@2
   123
williamr@2
   124
The class is not intended for instantiation. 
williamr@2
   125
*/
williamr@2
   126
class TSwizzleCBase
williamr@2
   127
	{
williamr@2
   128
public:
williamr@2
   129
	inline TBool operator==(const TSwizzleCBase& aSwizzle) const;
williamr@2
   130
	inline TBool operator==(const TAny* aPtr) const;
williamr@2
   131
	inline TBool operator!=(const TSwizzleCBase& aSwizzle) const;
williamr@2
   132
	inline TBool operator!=(const TAny* aPtr) const;
williamr@2
   133
//
williamr@2
   134
	inline TBool IsPtr() const;
williamr@2
   135
	inline TBool IsId() const;
williamr@2
   136
	IMPORT_C TStreamId AsId() const;
williamr@2
   137
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   138
protected:
williamr@2
   139
	TSwizzleCBase() {}
williamr@2
   140
	inline TSwizzleCBase(const TAny* aPtr);
williamr@2
   141
	IMPORT_C TSwizzleCBase(TStreamId anId);
williamr@2
   142
	inline TSwizzleCBase(TStreamRef aRef);
williamr@2
   143
	inline const TAny* Ptr() const;
williamr@2
   144
	IMPORT_C void DoExternalizeL(RWriteStream& aStream,TExternalizer<TAny> anExter) const;
williamr@2
   145
private:
williamr@2
   146
	IMPORT_C static TBool IsPtrRep(const TAny* aPtr);
williamr@2
   147
	IMPORT_C static TBool IsIdRep(const TAny* aPtr);
williamr@2
   148
private:
williamr@2
   149
	const TAny* iPtr;
williamr@2
   150
private:
williamr@2
   151
	IMPORT_C static void __DbgChkPtr(const TAny* aPtr);
williamr@2
   152
	IMPORT_C static void __DbgChkRef(TStreamRef aRef);
williamr@2
   153
	};
williamr@2
   154
inline TBool operator==(const TAny* aPtr,const TSwizzleCBase& aSwizzle);
williamr@2
   155
inline TBool operator!=(const TAny* aPtr,const TSwizzleCBase& aSwizzle);
williamr@2
   156
williamr@2
   157
/**
williamr@2
   158
 * @publishedAll 
williamr@2
   159
 * @released
williamr@2
   160
 * Implementation class for swizzles.
williamr@2
   161
williamr@2
   162
Although part of the class hierarchy, no function or data members in this 
williamr@2
   163
class form part of the public application programming interface.
williamr@2
   164
williamr@2
   165
The class is not intended for instantiation.
williamr@2
   166
williamr@2
   167
@see TSwizzle  
williamr@2
   168
*/
williamr@2
   169
class TSwizzleBase : public TSwizzleCBase
williamr@2
   170
	{
williamr@2
   171
protected:
williamr@2
   172
	TSwizzleBase() {}
williamr@2
   173
	inline TSwizzleBase(TAny* aPtr);
williamr@2
   174
	inline TSwizzleBase(TStreamId anId);
williamr@2
   175
	inline TAny* Ptr() const;
williamr@2
   176
	};
williamr@2
   177
williamr@2
   178
/**
williamr@2
   179
 * @publishedAll 
williamr@2
   180
 * @released
williamr@2
   181
 * Maintains a dual representation for an object. The representation is:
williamr@2
   182
williamr@2
   183
by stream id, if the object is not in memory (the stream contains the external 
williamr@2
   184
representation of that object).
williamr@2
   185
williamr@2
   186
by pointer, if the object is in memory.
williamr@2
   187
williamr@2
   188
The template class defines the type of object for which the swizzle is a representation. 
williamr@2
   189
Full access to the represented object is available through the swizzle.
williamr@2
   190
williamr@2
   191
Maintaining a dual representation for an object allows the loading of objects 
williamr@2
   192
into memory from a store to be deferred; this is particularly important in 
williamr@2
   193
complex applications. 
williamr@2
   194
*/
williamr@2
   195
template <class T>
williamr@2
   196
class TSwizzle : public TSwizzleBase
williamr@2
   197
	{
williamr@2
   198
public:
williamr@2
   199
	/** Constructs an uninitialised swizzle. It is necessary because there are also 
williamr@2
   200
	non-default constructors in this class. */
williamr@2
   201
	TSwizzle() {}
williamr@2
   202
	inline TSwizzle(T* aPtr);
williamr@2
   203
	inline TSwizzle(TStreamId anId);
williamr@2
   204
	inline TSwizzle<T>& operator=(T* aPtr);
williamr@2
   205
	inline T* AsPtr() const;
williamr@2
   206
	inline operator T*() const;
williamr@2
   207
	inline T& operator*() const;
williamr@2
   208
	inline T* operator->() const;
williamr@2
   209
	inline void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   210
	};
williamr@2
   211
williamr@2
   212
/**
williamr@2
   213
 * @publishedAll 
williamr@2
   214
 * @released
williamr@2
   215
 * A specific instantiation of the family of TSwizzle<class T> classes that maintains 
williamr@2
   216
the representation of an untyped object as a non-const pointer or as a stream 
williamr@2
   217
id.  
williamr@2
   218
*/
williamr@2
   219
TEMPLATE_SPECIALIZATION class TSwizzle<TAny> : public TSwizzleBase
williamr@2
   220
	{
williamr@2
   221
public:
williamr@2
   222
	/** Default constructor.
williamr@2
   223
	
williamr@2
   224
	Constructs an uninitialised swizzle. */
williamr@2
   225
	TSwizzle() {}
williamr@2
   226
	inline TSwizzle(TAny* aPtr);
williamr@2
   227
	inline TSwizzle(TStreamId anId);
williamr@2
   228
	inline TSwizzle(const TSwizzleBase& aSwizzle);
williamr@2
   229
	inline TSwizzle<TAny>& operator=(TAny* aPtr);
williamr@2
   230
	inline TSwizzle<TAny>& operator=(const TSwizzleBase& aSwizzle);
williamr@2
   231
	inline TAny* AsPtr() const;
williamr@2
   232
	inline operator TAny*() const;
williamr@2
   233
	};
williamr@2
   234
williamr@2
   235
/**
williamr@2
   236
 * @publishedAll 
williamr@2
   237
 * @released
williamr@2
   238
 * Maintains a dual representation for a constant object. The representation is:
williamr@2
   239
williamr@2
   240
by stream id, if the object is not in memory (the stream contains the external 
williamr@2
   241
representation of that object).
williamr@2
   242
williamr@2
   243
by pointer, if the object is in memory.
williamr@2
   244
williamr@2
   245
The template class defines the type of object for which the swizzle is a representation. 
williamr@2
   246
Access to the to the represented object is available through the swizzle, 
williamr@2
   247
but is limited. The represented object cannot be changed.
williamr@2
   248
williamr@2
   249
Maintaining a dual representation for an object allows the loading of objects 
williamr@2
   250
into memory from a store to be deferred; this is particularly important in 
williamr@2
   251
complex applications.  
williamr@2
   252
*/
williamr@2
   253
template <class T>
williamr@2
   254
class TSwizzleC : public TSwizzleCBase
williamr@2
   255
	{
williamr@2
   256
public:
williamr@2
   257
	/** Constructs an uninitialised swizzle. It is necessary because there are also 
williamr@2
   258
	non-default constructors in this class. */
williamr@2
   259
	TSwizzleC() {}
williamr@2
   260
	inline TSwizzleC(const T* aPtr);
williamr@2
   261
	inline TSwizzleC(TStreamId anId);
williamr@2
   262
	inline TSwizzleC(TSwizzle<T> aSwizzle);
williamr@2
   263
	inline TSwizzleC<T>& operator=(const T* aPtr);
williamr@2
   264
	inline const T* AsPtr() const;
williamr@2
   265
	inline operator const T*() const;
williamr@2
   266
	inline const T& operator*() const;
williamr@2
   267
	inline const T* operator->() const;
williamr@2
   268
	inline void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   269
	};
williamr@2
   270
williamr@2
   271
/**
williamr@2
   272
 * @publishedAll 
williamr@2
   273
 * @released
williamr@2
   274
 * A specific instantiation of the family of TSwizzleC<class T> classes that maintains 
williamr@2
   275
the representation of an untyped object as a const pointer or as a stream id. 
williamr@2
   276
*/
williamr@2
   277
TEMPLATE_SPECIALIZATION class TSwizzleC<TAny> : public TSwizzleCBase
williamr@2
   278
	{
williamr@2
   279
public:
williamr@2
   280
	/** Default constructor.
williamr@2
   281
	
williamr@2
   282
	Constructs an uninitialised swizzle. */
williamr@2
   283
	TSwizzleC() {}
williamr@2
   284
	inline TSwizzleC(const TAny* aPtr);
williamr@2
   285
	inline TSwizzleC(TStreamId anId);
williamr@2
   286
	inline TSwizzleC(const TSwizzleCBase& aSwizzle);
williamr@2
   287
	inline TSwizzleC(TStreamRef aRef);
williamr@2
   288
	inline TSwizzleC<TAny>& operator=(const TAny* aPtr);
williamr@2
   289
	inline TSwizzleC<TAny>& operator=(const TSwizzleCBase& aSwizzle);
williamr@2
   290
	inline const TAny* AsPtr() const;
williamr@2
   291
	inline operator const TAny*() const;
williamr@2
   292
	};
williamr@2
   293
williamr@2
   294
/**
williamr@2
   295
 * @publishedAll 
williamr@2
   296
 * @released
williamr@2
   297
 * Store map used when externalising swizzled in-memory objects. 
williamr@2
   298
williamr@2
   299
It has three main characteristics:
williamr@2
   300
williamr@2
   301
it acts as an in-memory repository of stream ids and associated swizzles 
williamr@2
   302
williamr@2
   303
it acts as an externaliser for swizzles 
williamr@2
   304
williamr@2
   305
it offers cleanup support  
williamr@2
   306
*/
williamr@2
   307
class CStoreMap : public CBase,public MExternalizer<TStreamRef>
williamr@2
   308
	{
williamr@2
   309
public:
williamr@2
   310
	/**
williamr@2
   311
	 * @publishedAll 
williamr@2
   312
	 * @released
williamr@2
   313
	 */
williamr@2
   314
	struct TEntry {TSwizzleC<TAny> swizzle;TStreamId id;};
williamr@2
   315
	typedef const TEntry* TIterator;
williamr@2
   316
public:
williamr@2
   317
	IMPORT_C static CStoreMap* NewL(CStreamStore& aStore);
williamr@2
   318
	IMPORT_C static CStoreMap* NewLC(CStreamStore& aStore);
williamr@2
   319
	IMPORT_C CStoreMap(CStreamStore& aStore);
williamr@2
   320
	IMPORT_C ~CStoreMap();
williamr@2
   321
//
williamr@2
   322
	IMPORT_C void BindL(TSwizzleC<TAny> aSwizzle,TStreamId anId);
williamr@2
   323
	IMPORT_C void Unbind(TSwizzleC<TAny> aSwizzle);
williamr@2
   324
	IMPORT_C void Forget(TStreamId anId);
williamr@2
   325
	IMPORT_C void Reset();
williamr@2
   326
	IMPORT_C void ResetAndDestroy();
williamr@2
   327
//
williamr@2
   328
	IMPORT_C TStreamId At(TSwizzleC<TAny> aSwizzle) const;
williamr@2
   329
	IMPORT_C TSwizzleC<TAny> Label(TStreamId anId) const;
williamr@2
   330
	IMPORT_C TIterator Begin() const;
williamr@2
   331
	IMPORT_C TIterator End() const;
williamr@2
   332
private:
williamr@2
   333
	void ExternalizeL(const TStreamRef& aRef,RWriteStream& aStream) const;
williamr@2
   334
private:
williamr@2
   335
	CArrayFixFlat<TEntry> iArray;
williamr@2
   336
	TStreamId iFree;
williamr@2
   337
	CStreamStore* iStore;
williamr@2
   338
	};
williamr@2
   339
williamr@2
   340
/**
williamr@2
   341
 * @publishedAll 
williamr@2
   342
 * @released
williamr@2
   343
 * Maintains two way associations between a UID (a TUid type) and a stream id 
williamr@2
   344
(a TStreamId type) .
williamr@2
   345
williamr@2
   346
Each UID and stream id pair forms an entry in an array. The class provides 
williamr@2
   347
member functions to manage these entries, for example, to add a new entry 
williamr@2
   348
or to change the stream id associated with a UID.
williamr@2
   349
williamr@2
   350
@see TUid
williamr@2
   351
@see TStreamId
williamr@2
   352
@see CDictionaryStore 
williamr@2
   353
 */
williamr@2
   354
class CStreamDictionary : public CBase
williamr@2
   355
	{
williamr@2
   356
public:
williamr@2
   357
	IMPORT_C static CStreamDictionary* NewL();
williamr@2
   358
	IMPORT_C static CStreamDictionary* NewLC();
williamr@2
   359
	IMPORT_C CStreamDictionary();
williamr@2
   360
	IMPORT_C ~CStreamDictionary();
williamr@2
   361
//
williamr@2
   362
	IMPORT_C void AssignL(TUid aUid,TStreamId anId);
williamr@2
   363
	IMPORT_C void Remove(TUid aUid);
williamr@2
   364
	IMPORT_C TStreamId At(TUid aUid) const;
williamr@2
   365
	IMPORT_C TBool IsNull() const;
williamr@2
   366
	//
williamr@2
   367
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   368
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   369
private:
williamr@2
   370
	
williamr@2
   371
	class TEntry
williamr@2
   372
		{
williamr@2
   373
	public:
williamr@2
   374
		TEntry() {}
williamr@2
   375
		inline TEntry(TUid aUid,TStreamId anId);
williamr@2
   376
		void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   377
		void InternalizeL(RReadStream& aStream);
williamr@2
   378
	public:
williamr@2
   379
		TUid iUid;
williamr@2
   380
		TStreamId iId;
williamr@2
   381
		};
williamr@2
   382
private:
williamr@2
   383
	CArrayFixSeg<TEntry> iArray;
williamr@2
   384
	};
williamr@2
   385
williamr@2
   386
#include <s32std.inl>
williamr@2
   387
#endif