os/graphics/graphicsresourceservices/graphicsresourceimplementation/src/sgresource.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// Graphics Resource - kernel resource implementation
sl@0
    15
//
sl@0
    16
sl@0
    17
#include <kernel/kern_priv.h>
sl@0
    18
#include "sgextensionimpl.h"
sl@0
    19
sl@0
    20
DSgResourceImpl::DSgResourceImpl(DSgExtensionImpl& aExtensionImpl, TUint64 aId, TUint32 aAttribs,
sl@0
    21
	                             const TDesC8& aMetaData, DChunk* aDataChunk, TInt aDataSize)
sl@0
    22
	: iExtensionImpl(aExtensionImpl), iRefCount(1), iId(aId), iAttributes(aAttribs),
sl@0
    23
	  iMetaDataSize(aMetaData.Size()), iDataChunk(aDataChunk), iDataSize(aDataSize)
sl@0
    24
	{
sl@0
    25
	memcpy(this + 1, aMetaData.Ptr(), aMetaData.Size());
sl@0
    26
	}
sl@0
    27
sl@0
    28
DSgResourceImpl::~DSgResourceImpl()
sl@0
    29
	{
sl@0
    30
	if (iDataChunk)
sl@0
    31
		{
sl@0
    32
		Kern::ChunkClose(iDataChunk);
sl@0
    33
		}
sl@0
    34
	}
sl@0
    35
sl@0
    36
TInt DSgResourceImpl::Open()
sl@0
    37
	{
sl@0
    38
	return NKern::SafeInc(iRefCount) > 0 ? KErrNone : KErrNotFound;
sl@0
    39
	}
sl@0
    40
sl@0
    41
void DSgResourceImpl::Close()
sl@0
    42
	{
sl@0
    43
	if (NKern::SafeDec(iRefCount) == 1)
sl@0
    44
		{
sl@0
    45
		iExtensionImpl.DeleteResource(this);
sl@0
    46
		}
sl@0
    47
	}
sl@0
    48
sl@0
    49
TUint64 DSgResourceImpl::Id() const
sl@0
    50
	{
sl@0
    51
	return iId;
sl@0
    52
	}
sl@0
    53
sl@0
    54
TUint32 DSgResourceImpl::Attributes() const
sl@0
    55
	{
sl@0
    56
	return iAttributes;
sl@0
    57
	}
sl@0
    58
sl@0
    59
TInt DSgResourceImpl::GetMetaData(TDes8& aMetaData) const
sl@0
    60
	{
sl@0
    61
	if (aMetaData.MaxSize() < iMetaDataSize)
sl@0
    62
		{
sl@0
    63
		return KErrOverflow;
sl@0
    64
		}
sl@0
    65
	if (iMetaDataSize == 0)
sl@0
    66
		{
sl@0
    67
		aMetaData.Zero();
sl@0
    68
		}
sl@0
    69
	else
sl@0
    70
		{
sl@0
    71
		aMetaData.Copy(TPtrC8(reinterpret_cast<const TUint8*>(this + 1), iMetaDataSize));
sl@0
    72
		}
sl@0
    73
	return KErrNone;
sl@0
    74
	}
sl@0
    75
sl@0
    76
DChunk* DSgResourceImpl::DataChunk() const
sl@0
    77
	{
sl@0
    78
	return iDataChunk;
sl@0
    79
	}
sl@0
    80
sl@0
    81
TInt DSgResourceImpl::DataSize() const
sl@0
    82
	{
sl@0
    83
	return iDataSize;
sl@0
    84
	}