epoc32/include/comms-infras/cftransport.inl
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
     1.1 --- a/epoc32/include/comms-infras/cftransport.inl	Wed Mar 31 12:27:01 2010 +0100
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,305 +0,0 @@
     1.4 -// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 -// All rights reserved.
     1.6 -// This component and the accompanying materials are made available
     1.7 -// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     1.8 -// which accompanies this distribution, and is available
     1.9 -// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
    1.10 -//
    1.11 -// Initial Contributors:
    1.12 -// Nokia Corporation - initial contribution.
    1.13 -//
    1.14 -// Contributors:
    1.15 -//
    1.16 -// Description:
    1.17 -// cftransport.inl
    1.18 -// 
    1.19 -//
    1.20 -
    1.21 -inline TCookie::TCookie()
    1.22 -: iType(ENull),
    1.23 -  iChipsFollowing(0)
    1.24 -	{
    1.25 -	}
    1.26 -
    1.27 -// Cookies are not constructed arbitarily, instead having been generated they are bitwise copied. Consequently we don't trouble to
    1.28 -// provide clever comparison operators or a copy operation, nor to ensure consistent initialisation of padding fields
    1.29 -inline TBool TCookie::operator==(const TCookie& aRHS) const
    1.30 -	{
    1.31 -	ASSERT(iChipsFollowing==0 && aRHS.iChipsFollowing==0); //This is private (transport's use) information which must not be set here.
    1.32 -	return Mem::Compare((const TUint8*) this, sizeof(*this), (const TUint8*) &aRHS, sizeof(*this)) == 0;
    1.33 -	}
    1.34 -
    1.35 -inline TCookieAccessor::TCookieAccessor(const TCookie& aCookie)
    1.36 -: iCookie(aCookie)
    1.37 -	{
    1.38 -	}
    1.39 -
    1.40 -inline TBool TCookieAccessor::IsNull() const 
    1.41 -	{
    1.42 -	return iCookie.iType == TCookie::ENull;
    1.43 -	}
    1.44 -
    1.45 -inline TCookie::TVariety TCookieAccessor::Variety() const 
    1.46 -	{
    1.47 -	return static_cast<TCookie::TVariety>(iCookie.iType);
    1.48 -	}
    1.49 -
    1.50 -inline TWorkerId TCookieAccessor::WorkerId() const
    1.51 -	{
    1.52 -	return static_cast<TWorkerId>(iCookie.iWorkerId);
    1.53 -	}
    1.54 -
    1.55 -inline TAny* TCookieAccessor::Ptr() const
    1.56 -	{
    1.57 -	return iCookie.iUn.iObjPtr.iPtr;
    1.58 -	}
    1.59 -
    1.60 -inline TUint8 TCookieAccessor::PtrSalt() const
    1.61 -	{
    1.62 -	ASSERT(Variety() == TCookie::EDispatchItfPtr || Variety() == TCookie::EDispatchItfPtrListener);
    1.63 -	return iCookie.iSalt;
    1.64 -	}
    1.65 -
    1.66 -inline TInt TCookieAccessor::LegacyCode() const
    1.67 -	{
    1.68 -	ASSERT(Variety() == TCookie::ELegacyId);
    1.69 -	return iCookie.iUn.iLegacyCode;
    1.70 -	}
    1.71 -
    1.72 -
    1.73 -inline TCookieOp::TCookieOp(TCookie& aCookie)
    1.74 -: TCookieAccessor(aCookie),
    1.75 -iCookie(aCookie)
    1.76 -	{
    1.77 -	}
    1.78 -
    1.79 -/** Initialise cookie with a pointer to an object interface
    1.80 -*/
    1.81 -inline void TCookieOp::SetInterface(TAny* aDispatchItf, TUint8 aSalt, TWorkerId aWorkerId)
    1.82 -	{
    1.83 -	iCookie.iType = TCookie::EDispatchItfPtr;
    1.84 -	ASSERT(aWorkerId >= 0 && aWorkerId <= 255);
    1.85 -	iCookie.iWorkerId = (TUint8) aWorkerId;
    1.86 -	iCookie.iSalt = aSalt;
    1.87 -	iCookie.iUn.iObjPtr.iPtr = aDispatchItf;
    1.88 -	}
    1.89 -
    1.90 -/** Initialise pseudo-cookie for a legacy message message handler
    1.91 -*/
    1.92 -inline void TCookieOp::SetLegacyMessageCode(TWorkerId aWorkerId, TInt aLegacyCode)
    1.93 -	{
    1.94 -	iCookie.iType = TCookie::ELegacyId;
    1.95 -	ASSERT(aWorkerId >= 0 && aWorkerId <= 255);
    1.96 -	iCookie.iWorkerId = (TUint8) aWorkerId;
    1.97 -	iCookie.iUn.iLegacyCode = aLegacyCode;
    1.98 -	}
    1.99 -
   1.100 -inline void TCookieOp::SetNull()
   1.101 -	{
   1.102 -	iCookie.iType = TCookie::ENull;
   1.103 -	iCookie.iUn.iObjPtr.iPtr = NULL;	// unnecessary really, but safety net against those who don't validate type
   1.104 -	}
   1.105 -
   1.106 -inline TCFMessage2::TCFMessage2()
   1.107 -	{
   1.108 -	}
   1.109 -
   1.110 -inline TCFMessage2::TCFMessage2(const TCookie& aCookie, const TDesC8& aData)
   1.111 -	{
   1.112 -	reinterpret_cast<TCookie&>(*RawBlock()) = aCookie;
   1.113 -	__ASSERT_ALWAYS(aData.Size() <= sizeof(*this) - sizeof(TCookie), User::Panic(KCFChannelPanic, ECFChanMsgTooBig));
   1.114 -	TPtr8(const_cast<TUint8*>(RawBlock()) + sizeof(TCookie), sizeof(*this) - sizeof(TCookie)).Copy(aData);
   1.115 -	}
   1.116 -
   1.117 -inline const TCookie& TCFMessage2::Cookie() const
   1.118 -	{
   1.119 -	return reinterpret_cast<const TCookie&>(*RawBlock());
   1.120 -	}
   1.121 -
   1.122 -inline TPtrC8 TCFMessage2::Data() const
   1.123 -	{
   1.124 -	return TPtrC8(RawBlock() + sizeof(TCookie), sizeof(*this) - sizeof(TCookie));
   1.125 -	}
   1.126 -/*
   1.127 -inline TInt TCFMessage2::MaxEmbeddedMessageSize()
   1.128 -	{
   1.129 -	return MaxRawBlockSize() - sizeof(TCookie);
   1.130 -	}
   1.131 -*/
   1.132 -inline THeapStoredMessage* THeapStoredMessage::New(RAllocator& aHeap, const TCookie& aCookie, const TDesC8& aData)
   1.133 -	{
   1.134 -	THeapStoredMessage* self = reinterpret_cast<THeapStoredMessage*>(aHeap.Alloc(
   1.135 -		sizeof(THeapStoredMessage) + aData.Length() - 1));	// 1 being the sizeof(iSerialiseData); can't ref directly (CW issue)
   1.136 -	if(self)
   1.137 -		{
   1.138 -		self->iCookie = aCookie;
   1.139 -		self->iData.Set(self->iSerialisedData, aData.Length());
   1.140 -		Mem::Copy(self->iSerialisedData, aData.Ptr(), aData.Length());
   1.141 -		}
   1.142 -	return self;		
   1.143 -	}
   1.144 -
   1.145 -inline const TCookie& THeapStoredMessage::Cookie() const
   1.146 -	{
   1.147 -	return iCookie;
   1.148 -	}
   1.149 -
   1.150 -inline const TPtrC8& THeapStoredMessage::Data() const
   1.151 -	{
   1.152 -	return iData;
   1.153 -	}
   1.154 -
   1.155 -
   1.156 -
   1.157 -//
   1.158 -// Thread knowledge
   1.159 -//
   1.160 -
   1.161 -inline TBool TWorkerThreadDataBase::IsValid() const
   1.162 -	{
   1.163 -	return iHeap != 0;
   1.164 -	}
   1.165 -
   1.166 -inline CWorkerThreadDataGlobalsBase::CWorkerThreadDataGlobalsBase()
   1.167 -	{
   1.168 -	}
   1.169 -
   1.170 -inline CWorkerThreadDataGlobalsBase::~CWorkerThreadDataGlobalsBase()
   1.171 -	{
   1.172 -	User::Free(iWorkers);
   1.173 -	}
   1.174 -
   1.175 -inline void CWorkerThreadDataGlobalsBase::ConstructL(TInt aWorkerDataSize, TInt TUpperThreadIdBound)
   1.176 -	{
   1.177 -	iWorkers = reinterpret_cast<TWorkerThreadDataBase*>(User::AllocZL(aWorkerDataSize * (TUpperThreadIdBound + 1)));
   1.178 -	}
   1.179 -
   1.180 -template<class TWTD, TInt TUpperThreadIdBound>
   1.181 -inline CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>* CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::NewL()
   1.182 -	{
   1.183 -	CWorkerThreadDataGlobals* self = new(ELeave) CWorkerThreadDataGlobals();
   1.184 -	CleanupStack::PushL(self);
   1.185 -	self->ConstructL(sizeof(TWTD), TUpperThreadIdBound);
   1.186 -	CleanupStack::Pop(self);
   1.187 -	return self;
   1.188 -	}
   1.189 -
   1.190 -template<class TWTD, TInt TUpperThreadIdBound>
   1.191 -inline void CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::ConstructL(TInt aWorkerDataSize, TWorkerId aUpperBoundId)
   1.192 -	{
   1.193 -	CWorkerThreadDataGlobalsBase::ConstructL(aWorkerDataSize, aUpperBoundId);
   1.194 -	for(TInt i = 0; i <= TUpperThreadIdBound; ++i)
   1.195 -		{
   1.196 -		new(reinterpret_cast<TUint8*>(iWorkers) + i * aWorkerDataSize) TWTD;
   1.197 -		}
   1.198 -	}
   1.199 -
   1.200 -template<class TWTD, TInt TUpperThreadIdBound>
   1.201 -inline TWorkerId CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::UpperBoundWorkerId() const
   1.202 -	{
   1.203 -	return TUpperThreadIdBound;
   1.204 -	}
   1.205 -
   1.206 -template<class TWTD, TInt TUpperThreadIdBound>
   1.207 -inline TWTD* CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::GetWorkerGlobals(TWorkerId aWorker) const
   1.208 -	{
   1.209 -	__ASSERT_DEBUG(aWorker >= 0 && aWorker <= UpperBoundWorkerId(), Panic(ECFTransInvalidWorkerId));
   1.210 -	return reinterpret_cast<TWTD*>(reinterpret_cast<TUint8*>(iWorkers) + sizeof(TWTD) * aWorker);
   1.211 -	}
   1.212 -
   1.213 -template<class TWTD, TInt TUpperThreadIdBound>
   1.214 -inline TBool CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::WorkerPresent(TWorkerId aId) const
   1.215 -	{
   1.216 -	return GetWorkerGlobals(aId)->IsValid();
   1.217 -	}
   1.218 -
   1.219 -template<class TWTD, TInt TUpperThreadIdBound>
   1.220 -inline RAllocator& CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::WorkerHeap(TWorkerId aWorkerId) const
   1.221 -	{
   1.222 -	return *(GetWorkerGlobals(aWorkerId)->iHeap);
   1.223 -	}
   1.224 -
   1.225 -template<class TWTD, TInt TUpperThreadIdBound>
   1.226 -inline void CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::PanicWorker(TWorkerId aWorkerId, const TDesC& aCategory, TInt aReason) const
   1.227 -	{
   1.228 -	GetWorkerGlobals(aWorkerId)->iThread.Panic(aCategory, aReason);
   1.229 -	}
   1.230 -
   1.231 -template<class TWTD, TInt TUpperThreadIdBound>
   1.232 -inline CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>::CWorkerThreadDataGlobals()
   1.233 -: CWorkerThreadDataGlobalsBase()
   1.234 -	{
   1.235 -	}
   1.236 -
   1.237 -template<class TWTD, TInt TUpperThreadIdBound>
   1.238 -inline CWorkerThreadRegister<TWTD, TUpperThreadIdBound>* CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::NewL(TWorkerId aSelfId, CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>* aGlobalThreadRegister)
   1.239 -	{
   1.240 -	return new(ELeave) CWorkerThreadRegister(aSelfId, aGlobalThreadRegister);
   1.241 -	}
   1.242 -
   1.243 -template<class TWTD, TInt TUpperThreadIdBound>
   1.244 -inline TWTD* CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::GetWorkerGlobals(TWorkerId aWorker) const
   1.245 -	{
   1.246 -	__ASSERT_DEBUG(iGlobals != NULL, Panic(ECFTransThreadRegisterUnspecified));
   1.247 -	__ASSERT_DEBUG(aWorker >= 0 && aWorker <= TUpperThreadIdBound, Panic(ECFTransInvalidWorkerId));
   1.248 -	return iGlobals->GetWorkerGlobals(aWorker);
   1.249 -	}
   1.250 -
   1.251 -template<class TWTD, TInt TUpperThreadIdBound>
   1.252 -inline TWorkerId CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::UpperBoundWorkerId() const
   1.253 -	{
   1.254 -	return TUpperThreadIdBound;
   1.255 -	}
   1.256 -
   1.257 -template<class TWTD, TInt TUpperThreadIdBound>
   1.258 -inline TBool CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::WorkerPresent(TWorkerId aWorker) const
   1.259 -	{
   1.260 -	__ASSERT_DEBUG(iGlobals != NULL, Panic(ECFTransThreadRegisterUnspecified));
   1.261 -	__ASSERT_DEBUG(aWorker >= 0 && aWorker <= TUpperThreadIdBound, Panic(ECFTransInvalidWorkerId));
   1.262 -	return iGlobals->WorkerPresent(aWorker);
   1.263 -	}
   1.264 -
   1.265 -template<class TWTD, TInt TUpperThreadIdBound>
   1.266 -inline RAllocator& CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::WorkerHeap(TWorkerId aWorker) const
   1.267 -	{
   1.268 -	__ASSERT_DEBUG(iGlobals != NULL, Panic(ECFTransThreadRegisterUnspecified));
   1.269 -	__ASSERT_DEBUG(aWorker >= 0 && aWorker <= TUpperThreadIdBound, Panic(ECFTransInvalidWorkerId));
   1.270 -	return iGlobals->WorkerHeap(aWorker);
   1.271 -	}
   1.272 -
   1.273 -template<class TWTD, TInt TUpperThreadIdBound>
   1.274 -inline void CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::PanicWorker(TWorkerId aWorkerId, const TDesC& aCategory, TInt aReason) const
   1.275 -	{
   1.276 -	GetWorkerGlobals(aWorkerId)->iThread.Panic(aCategory, aReason);
   1.277 -	}
   1.278 -
   1.279 -template<class TWTD, TInt TUpperThreadIdBound>
   1.280 -inline TWorkerId CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::SelfWorkerId() const
   1.281 -	{
   1.282 -	return iSelfId;
   1.283 -	}
   1.284 -
   1.285 -template<class TWTD, TInt TUpperThreadIdBound>
   1.286 -inline TWTD* CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::GetSelfWorkerGlobals() const
   1.287 -	{
   1.288 -	__ASSERT_DEBUG(iGlobals != NULL, Panic(ECFTransThreadRegisterUnspecified));
   1.289 -	return iGlobals->GetWorkerGlobals(iSelfId);
   1.290 -	}
   1.291 -
   1.292 -template<class TWTD, TInt TUpperThreadIdBound>
   1.293 -inline void CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::SetGlobalThreadRegister(CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>* aGlobalThreadRegister)
   1.294 -	{
   1.295 -	iGlobals = aGlobalThreadRegister;
   1.296 -	}
   1.297 -
   1.298 -template<class TWTD, TInt TUpperThreadIdBound>
   1.299 -inline CWorkerThreadRegister<TWTD, TUpperThreadIdBound>::CWorkerThreadRegister(TWorkerId aSelfId, CWorkerThreadDataGlobals<TWTD, TUpperThreadIdBound>* aGlobalThreadRegister)
   1.300 -: iSelfId(aSelfId),
   1.301 -iGlobals(aGlobalThreadRegister)
   1.302 -	{
   1.303 -	}
   1.304 -
   1.305 -inline TBool RCFInterfaceBase::IsOpen() const
   1.306 -	{
   1.307 -	return !TCookieAccessor(iRecipient).IsNull();
   1.308 -	}