mmappfw_plat/mpx_common_api/inc/mpxdata.h
changeset 0 a2952bb97e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_common_api/inc/mpxdata.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,340 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Manages data and access to the global chunk
+*
+*/
+
+
+
+#ifndef MMPXDATA_H
+#define MMPXDATA_H
+
+// INCLUDES
+#include <mpxattribute.h>
+
+/**
+ *  Base class for managing data in global heap.
+ *
+ *  @lib mpxcommon.lib
+ */
+class MMPXData
+    {
+public:
+    /**
+    * Defines 'markers' that identify objects from their streamed buffers, e.g.
+    * if the first 4 bytes of an externalized object constitute the value EMedia,
+    * then we assume the it is an externalized media object.
+    */
+    enum TMPXObjectType
+        {
+        EMedia=0x12343219,
+        EMediaArray=0x987678ab,
+        EPath=0x567982fe // Note: This can be removed when NO clients call
+                         // CMPXMedia::Value API for CMPXCollectionPath.
+        };
+public:
+    /**
+    * Create a new implementation of the MMPXData interface. This is thread-
+    * relative.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @return pointer to the implementation object of MMXData
+    */
+    static MMPXData* NewL(TUint aClientHandle);
+
+    /**
+    * Create a new implementation from an existing MMPXData implementation.
+    * This is an duplicate copy of the original.
+    * This is thread-relative.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @param aData existing MMPXData implementation.
+    * @return pointer to the implementation object of MMXData
+    */
+    static MMPXData* NewL(TUint aClientHandle,const MMPXData& aData);
+
+    /**
+    * Obtain the interface of an existing implementation from the handle.
+    * This is thread-relative.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @param aDataHandle data handle to the MMPXData implementation.
+    * @return pointer to the implementation object of MMXData
+    */
+    static MMPXData* Data(TUint aClientHandle,TUint aDataHandle);
+
+    /**
+    * Obtain the interface from a buffer, or NULL if the buffer does
+    * not contain an implementation of the interface.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @param aData buffer which contains the object of MMPXData implementation
+    * @return pointer to the implementation object of MMXData
+    */
+    static MMPXData* Data(TUint aClientHandle,const TDesC8& aData);
+
+    /**
+    * Obtains the interface from a buffer, or NULL if the buffer does
+    * not contain an implementation of the interface.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @param aData buffer which contains the object of MMPXData implementation
+    * @param aSize size of the data buffer
+    * @return pointer to the implementation object of MMXData
+    */
+    static MMPXData* Data(TUint aClientHandle,TAny* aData,TInt aSize);
+
+    /**
+    * Handle which represents the current client (thread).
+    * This should be stored by the client and provided in all methods;
+    * zero indicates that it has failed.
+    *
+    * @since S60 3.2.3
+    * @return Client handle of global chunk
+    */
+    static TUint ClientHandle();
+
+    /**
+    * To increment the reference count for this client (thread);
+    * should be called for every media/media array object that
+    * is not contained within another.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    */
+    static void AddClientRef(TUint aClientHandle);
+
+    /**
+    * To decrement the reference count on this this client (thread).
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    */
+    static void ReleaseClient(TUint aClientHandle);
+
+    /**
+    * Gets the total size and the currently used size of the global heap.
+    *
+    * @since S60 3.2.3
+    * @param aTotal Total size of memory (out parameter)
+    * @param aUsed Used size of memory (out parameter)
+    */
+    static void HeapMemoryInfoL( TInt& aTotal, TInt& aUsed );
+
+
+    /**
+     * Lock the heap.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     */
+    static void LockHeap(TUint aClientHandle);
+
+    /**
+     * Unlock the heap.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     */
+    static void UnlockHeap(TUint aClientHandle);
+
+public:
+    /**
+    * Handle to the object implementing this interface; can
+    * be used to reference the object.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @return data handle
+    */
+    virtual TUint DataHandle(TUint aClientHandle)=0;
+
+    /**
+    * To increment the reference count on this data.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    */
+    virtual void AddRef(TUint aClientHandle)=0;
+
+    /**
+    * To decrement the reference count on this data; when zero,
+    * the data is deleted.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    */
+    virtual void Release(TUint aClientHandle)=0;
+
+    /**
+    * Gets the data value by index.
+    *
+    * @since S60 3.2.3
+    * @param aClientHandle client handle to the global chunk
+    * @param aIndex index of the data item
+    * @return raw data
+    */
+    virtual TPtrC8 Value(TUint aClientHandle,TInt aIndex)=0;
+
+    /**
+     * Gets attribute by index.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aIndex index of the data item
+     * @return attribute of the data
+     */
+    virtual const TMPXAttribute& Attribute(TUint aClientHandle,TInt aIndex)=0;
+
+    /**
+     * Gets object type by index.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aIndex index of the data item
+     * @return object type of the data
+     */
+    virtual TMPXAttributeType AttributeType(TUint aClientHandle,TInt aIndex)=0;
+
+    /**
+     * Gets supported content ids.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @return array of supported content ids
+     */
+    virtual TArray<TInt> SupportedIds(TUint aClientHandle)=0;
+
+    /**
+     * Sets supported content ids.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aSupportedIds array of supported content ids
+     * @return KErrNone if succeeded. Otheriwse system error code
+     */
+    virtual TInt SetSupportedIds(TUint aClientHandle,
+                                 const TArray<TInt>& aSupportedIds)=0;
+
+    /**
+     * Delete a data item.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aIndex index of the data item
+     */
+    virtual void Delete(TUint aClientHandle,TInt aIndex)=0;
+
+    /**
+     * Set a data item.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aAttr media attribute
+     * @param aType object type
+     * @param aData raw data
+     * @param aIndex index of the data item
+     */
+    virtual void Set(TUint aClientHandle,
+                     const TMPXAttribute& aAttr,
+                     TMPXAttributeType aType,
+                     const TDesC8& aData,
+                     TInt aIndex)=0;
+
+    /**
+     * Insert a data item.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aAttr media attribute
+     * @param aType object type
+     * @param aData raw data
+     * @param aIndex index of the data item
+     * @return KErrNone if succeeded. Otheriwse system error code
+     */
+    virtual TInt Insert(TUint aClientHandle,
+                        const TMPXAttribute& aAttr,
+                        TMPXAttributeType aType,
+                        const TDesC8& aData,
+                        TInt aIndex)=0;
+
+    /**
+     * Append a data item.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aAttr media attribute
+     * @param aType object type
+     * @param aData raw data
+     * @return KErrNone if succeeded. Otheriwse system error code
+     */
+    virtual TInt Append(TUint aClientHandle,
+                        const TMPXAttribute& aAttr,
+                        TMPXAttributeType aType,
+                        const TDesC8& aData)=0;
+
+    /**
+     * Remove all data items.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     */
+    virtual void Reset(TUint aClientHandle)=0;
+
+    /**
+     * Returns number of data items.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @return number of data items.
+     */
+    virtual TInt Count(TUint aClientHandle)=0;
+
+    /**
+     * Returns index of the data item with the media attribute.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aAttr media attribute
+     * @return index of the data items with the attribute
+     */
+    virtual TInt Index(TUint aClientHandle,const TMPXAttribute& aAttr)=0;
+
+    /**
+     * Returns index of the data item with aUid.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aUid uid of the data item
+     * @return index of the data items with the attribute
+     */
+    virtual TInt Index(TUint aClientHandle,TInt aUid)=0;
+
+    /**
+     * Returns uid by index.
+     *
+     * @since S60 3.2.3
+     * @param aClientHandle client handle to the global chunk
+     * @param aIndex index of the data item
+     * @return uid of the data item
+     */
+    virtual TInt Uid(TUint aClientHandle,TInt aIndex)=0;
+    };
+
+#endif // MMPXDATA_H