sl@0: // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Graphics Resource - kernel resource implementation sl@0: // sl@0: sl@0: #include sl@0: #include "sgextensionimpl.h" sl@0: sl@0: DSgResourceImpl::DSgResourceImpl(DSgExtensionImpl& aExtensionImpl, TUint64 aId, TUint32 aAttribs, sl@0: const TDesC8& aMetaData, DChunk* aDataChunk, TInt aDataSize) sl@0: : iExtensionImpl(aExtensionImpl), iRefCount(1), iId(aId), iAttributes(aAttribs), sl@0: iMetaDataSize(aMetaData.Size()), iDataChunk(aDataChunk), iDataSize(aDataSize) sl@0: { sl@0: memcpy(this + 1, aMetaData.Ptr(), aMetaData.Size()); sl@0: } sl@0: sl@0: DSgResourceImpl::~DSgResourceImpl() sl@0: { sl@0: if (iDataChunk) sl@0: { sl@0: Kern::ChunkClose(iDataChunk); sl@0: } sl@0: } sl@0: sl@0: TInt DSgResourceImpl::Open() sl@0: { sl@0: return NKern::SafeInc(iRefCount) > 0 ? KErrNone : KErrNotFound; sl@0: } sl@0: sl@0: void DSgResourceImpl::Close() sl@0: { sl@0: if (NKern::SafeDec(iRefCount) == 1) sl@0: { sl@0: iExtensionImpl.DeleteResource(this); sl@0: } sl@0: } sl@0: sl@0: TUint64 DSgResourceImpl::Id() const sl@0: { sl@0: return iId; sl@0: } sl@0: sl@0: TUint32 DSgResourceImpl::Attributes() const sl@0: { sl@0: return iAttributes; sl@0: } sl@0: sl@0: TInt DSgResourceImpl::GetMetaData(TDes8& aMetaData) const sl@0: { sl@0: if (aMetaData.MaxSize() < iMetaDataSize) sl@0: { sl@0: return KErrOverflow; sl@0: } sl@0: if (iMetaDataSize == 0) sl@0: { sl@0: aMetaData.Zero(); sl@0: } sl@0: else sl@0: { sl@0: aMetaData.Copy(TPtrC8(reinterpret_cast(this + 1), iMetaDataSize)); sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: DChunk* DSgResourceImpl::DataChunk() const sl@0: { sl@0: return iDataChunk; sl@0: } sl@0: sl@0: TInt DSgResourceImpl::DataSize() const sl@0: { sl@0: return iDataSize; sl@0: }