applayerprotocols/wapbase/inc/cnode.inl
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/wapbase/inc/cnode.inl	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,569 @@
+// Copyright (c) 1998-2009 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:
+//
+
+_LIT(KWapBaseNodePanic,"Node-Panic");
+
+#ifndef __WAP_MONOLITHIC__
+
+void Panic(TNodePanic aPanic)
+//
+//	Panic the client program.
+//
+	{
+	User::Panic(KWapBaseNodePanic,aPanic);
+	}
+#endif
+
+//
+// INLINED Node implementation
+// for description of templated api's see CNODE.H
+//
+
+//CTOR of non-deletable data
+/** Constructor.
+
+@param aData Buffer to wrap
+*/
+inline CDataNoDelete::CDataNoDelete(HBufC16* aData)
+	: iData(aData)
+	{
+	}
+
+//DTOR doesn't delete the data member
+/** Destructor.
+
+The wrapped buffer is not deleted.
+*/
+inline CDataNoDelete::~CDataNoDelete()
+	{
+	}
+
+//Accessor method to set the iData pointer to the parameter passed in
+//Ownership is taken here
+// Returns the previous value
+/** Changes the buffer that is wrapped.
+
+@return The previous wrapped buffer
+@param aData Buffer to wrap
+*/
+inline HBufC16* CDataNoDelete::SetData(HBufC16* aData)
+	{
+	HBufC16* prevVal = iData;
+	iData = aData;
+	return prevVal;
+	}
+
+//Resets data pointer to point to aData, data is not deleted
+/** Sets the buffer that is wrapped.
+
+The existing value is forgotten.
+
+@param aData Buffer to wrap
+*/
+inline void CDataNoDelete::ResetDataPointer(HBufC16 *aData)
+	{
+	iData = aData;
+	}
+
+//Accessor method to get the data
+/** Gets the wrapped buffer.
+
+@return The wrapped buffer
+*/
+inline HBufC16* CDataNoDelete::Data()
+	{
+	return iData;
+	}
+
+//CTOR of deletable data
+/** Constructor.
+
+@param aData Buffer to wrap
+*/
+inline CDataDelete::CDataDelete(HBufC16* aData)
+	: CDataNoDelete(aData)
+	{
+	}
+
+//DTOR of deletable data...DELETES THE DATA
+/** Destructor.
+
+The wrapped buffer is deleted.
+*/
+inline CDataDelete::~CDataDelete()
+	{
+	delete iData;
+	}
+
+/** Sets the buffer that is wrapped.
+
+The existing value is deleted.
+
+@param aData Buffer to wrap
+*/
+inline void CDataDelete::ResetDataPointer(HBufC16* aData)
+	{
+	delete iData;
+	iData = aData;
+	}
+
+//CTOR of deletable file data
+/** Constructor.
+
+@param aData Buffer to wrap
+*/
+inline CFileDataDelete::CFileDataDelete(HBufC16* aData)
+	: CDataNoDelete(aData)
+	{
+	}
+
+// DTOR of deletable file data...
+// DELETES THE DATA AFTER REMOVING THE REFERENCED FILE
+/** Destructor.
+
+It deletes the filename buffer and the file itself.
+*/
+inline CFileDataDelete::~CFileDataDelete()
+	{
+	RemoveFile();
+	delete iData;
+	}
+
+/** Sets the filename that is wrapped.
+
+The existing filename buffer and the file itself are deleted.
+
+@param aData Buffer to wrap
+*/
+inline void CFileDataDelete::ResetDataPointer(HBufC16* aData)
+	{
+	RemoveFile();
+	delete iData;
+	iData = aData;
+	}
+
+inline void CFileDataDelete::RemoveFile()
+	{
+	// When this panics 
+	// Someone somewhere has incorrectly reset this node's data
+	__ASSERT_DEBUG(iData,Panic(ENoData));
+	RFs fs;
+	// If connect fails we can sadly do nothing to remove the file
+	// it will be left lying around :-<
+	if(fs.Connect() == KErrNone)
+		{
+		fs.Delete(iData->Des());	
+		fs.Close();
+		}
+	}
+
+//CTOR of wrapper for integer attributes
+/** Constructor.
+
+@param aInteger Integer to wrap
+*/
+inline CIntAttribute::CIntAttribute(TInt aInteger)
+	: iInteger(aInteger)
+	{
+	}
+
+//Accessor method
+/** Gets the wrapped integer.
+
+@return The wrapped integer
+*/
+inline TInt CIntAttribute::Int() const
+	{
+	return iInteger;
+	}
+
+
+//
+//
+//TEMPLATED FUNCTIONS SEE CNODE.H FOR DESCRIPTIONS OF API'S
+//
+//
+/** Allocates and constructs a new node.
+
+@return New node
+@param aType The type of the node
+@param aParent The parent of this node
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::NewL(TNodeType aType, CNode* aParent)
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::NewL(CONST_CAST(TAny*,REINTERPRET_CAST(const TAny*,aType)),aParent)));
+	}
+
+
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>::CTypedNode(TNodeType aType, CNode* aParent)
+	: CNode(CONST_CAST(TAny*,REINTERPRET_CAST(const TAny*,aType)),aParent)
+	{}
+
+/** Deletes a specified child node.
+
+@param aNode Node to delete
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::DeleteChildNode(CNode* aNode)
+	{
+	CNode::DeleteChildNode(aNode);
+	}
+
+/** Deletes all the child nodes of this node.
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::DeleteAllChildNodes()
+	{
+	CNode::DeleteAllChildNodes();
+	}
+
+/** Creates a new child node.
+
+@return The new child node
+@param aType Node type
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>& CTypedNode<TNodeType, TAttributeType>::AppendNodeL(TNodeType aType)
+	{
+	return (STATIC_CAST(CTypedNode& , CNode::AppendNodeL(CONST_CAST(TAny*,REINTERPRET_CAST(TAny*,aType)))));
+	}
+
+/** Adds an existing node as a child.
+
+@param aNode Node to make a child
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::AppendNodeToThisNodeL(CNode* aNode)
+	{
+	CNode::AppendNodeToThisNodeL(aNode);
+	}
+
+/** Gets the first child or the next child after a specified child.
+
+@return First or next child node
+@param aNode Child node or NULL to get the first child
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::NextChild(const CNode* aNode) const
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::NextChild(aNode)));
+	}
+
+/** Gets the previous child before a specified child.
+
+@return Previous child node
+@param aNode Child node
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::PrevChild(const CNode& aNode) const
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::PrevChild(aNode)));
+	}
+
+/** Gets the parent of this node.
+
+@return Parent
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::Parent() const
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::Parent()));
+	}
+
+/** Changes the parent of the node.
+
+The node is removed from the childlist of its current parent.
+
+@param aParent New parent
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::ReparentL(CNode* aParent)
+	{
+	CNode::ReparentL(aParent);
+	}
+
+/** Gets the next sibling node.
+
+This asks for the next child of its parent.
+
+@return Next sibling node
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::NextSibling() const
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::NextSibling()));
+	}
+
+/** Gets the previous sibling node.
+
+This asks for the previous child of its parent.
+
+@return Previous sibling node
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::PrevSibling() const
+	{
+	return (STATIC_CAST(CTypedNode*,CNode::PrevSibling()));
+	}
+
+/** Gets the number of children of this node.
+
+@return Number of children of this node
+*/
+template <class TNodeType, class TAttributeType>
+inline TInt CTypedNode<TNodeType, TAttributeType>::NumberImmediateChildren() const
+	{
+	return (CNode::NumberImmediateChildren());
+	}
+
+/** Gets the absolute root node of the tree.
+
+@return Root node
+*/
+template <class TNodeType, class TAttributeType>
+inline const CTypedNode<TNodeType, TAttributeType>& CTypedNode<TNodeType, TAttributeType>::Root() const
+	{
+	return (STATIC_CAST(const CTypedNode&,CNode::Root()));
+	}
+
+/** Sets the node data.
+
+The object will delete the data in its destructor.
+
+@param aData Node data
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::SetDataL(HBufC16 *aData)
+	{
+	CNode::SetDataL(aData);
+	}
+
+/** Sets the object not to delete the node data in its destructor.
+
+Note that the function internally reallocates memory. If it leaves, the data is lost.
+ */
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::SetDataNoDeleteL()
+	{
+	CNode::SetDataNoDeleteL();
+	}
+
+/** Sets the object to delete the node data in its destructor.
+
+Note that the function internally reallocates memory. If it leaves, the data is lost. */
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::ClearSetDataNoDeleteL()
+	{
+	CNode::ClearSetDataNoDeleteL();
+	}
+
+/** Sets the node data to be taken from a specified file.
+
+If the data is deleted, the referenced file is also deleted.
+
+@param aData Name of the file containing the data
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::SetFileDataL(HBufC16 *aData)
+	{
+	CNode::SetFileDataL(aData);
+	}
+
+/** Resets the node data to a specified pointer.
+
+Existing data owned by the node is deleted.
+
+@param aData Root node
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::ResetDataPointer(HBufC16* aData)
+	{
+	CNode::ResetDataPointer(aData);
+	}
+
+/** Gets the node data.
+
+@return Node data or NULL if no data is set
+*/
+template <class TNodeType, class TAttributeType>
+inline HBufC16* CTypedNode<TNodeType, TAttributeType>::Data() const
+	{
+	return (CNode::Data());
+	}
+
+/** Deletes an attribute of a specified type.
+
+Note that the attribute value will be deleted.
+
+@param aAttributeType Attribute type
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::DeleteAttribute(TAttributeType aAttributeType)
+	{
+	CNode::DeleteAttribute(CONST_CAST(TAny*, REINTERPRET_CAST(const TAny*,aAttributeType)));
+	}
+
+/** Delete all node attributes.
+
+Note that attribute values will be deleted.
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::DeleteAllAttributes()
+	{
+	CNode::DeleteAllAttributes();
+	}
+
+/** Removes an attribute of a specified type, but does not delete it.
+
+The caller is now responsible for the destruction of the attribute value.
+
+@param aAttributeType Attribute type
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::RemoveAttributeNoDelete(TAttributeType aAttributeType)
+	{
+	CNode::RemoveAttributeNoDelete(CONST_CAST(TAny*,REINTERPRET_CAST(const TAny*,aAttributeType)));
+	}
+
+/** Gets the number of attributes of this node.
+
+@return Number of attributes of this node
+*/
+template <class TNodeType, class TAttributeType>
+inline TInt CTypedNode<TNodeType, TAttributeType>::AttributeCount() const
+	{
+	return(CNode::AttributeCount());
+	}
+
+/** Gets the attribute value of an attribute at a specified index
+
+@return Attribute value
+@param aIndex Attribute index
+*/
+template <class TNodeType, class TAttributeType>
+inline TAttributeType CTypedNode<TNodeType, TAttributeType>::AttributeTypeByIndex(TInt aIndex) const
+	{
+	return(REINTERPRET_CAST(TAttributeType, CNode::AttributeTypeByIndex(aIndex)));
+	}
+
+/** Gets the attribute value of an attribute at a specified index
+
+@return Attribute value
+@param aIndex Attribute index
+*/
+template <class TNodeType, class TAttributeType>
+inline CBase* CTypedNode<TNodeType, TAttributeType>::AttributeByIndex(TInt aIndex) const
+	{
+	return(CNode::AttributeByIndex(aIndex));
+	}
+
+/** Gets the attribute value and type of an attribute at a specified index..
+
+@return Attribute value
+@param aIndex Attribute index
+@param aType On return, the attribute type
+*/
+template <class TNodeType, class TAttributeType>
+inline CBase* CTypedNode<TNodeType, TAttributeType>::AttributeByIndex(TInt aIndex,TAttributeType& aType) const
+	{
+	TAny* type;
+	CBase* ret=CNode::AttributeByIndex(aIndex,type);
+	aType=REINTERPRET_CAST(TAttributeType, type);
+	return ret;
+	}
+
+/** Adds an attribute.
+
+The node takes ownership of aAttributeValue.
+
+@param aAttributeType Attribute type
+@param aAttributeValue Attribute value
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::AddAttributeL(TAttributeType aAttributeType, CBase* aAttributeValue)
+	{
+	CNode::AddAttributeL(CONST_CAST(TAny*, REINTERPRET_CAST(const TAny*,aAttributeType)),aAttributeValue);
+	}
+
+/** Sets node data and adds an attribute.
+
+The node takes ownership of aDataand aAttributeValue. 
+Existing node data owned by the node is deleted.
+
+@param aData Node data
+@param aAttributeType Attribute type
+@param aAttributeValue Attribute value
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::AddDataAndAttributeL(HBufC16 *aData, TAttributeType aAttributeType, CBase* aAttributeValue)
+	{
+	CNode::AddDataAndAttributeL(aData,CONST_CAST(TAny*, REINTERPRET_CAST(const TAny*,aAttributeType)),aAttributeValue);
+	}
+
+/** Gets a child node by index.
+
+@return Child node
+@param aByIndex Index of the child node
+*/
+template <class TNodeType, class TAttributeType>
+inline CTypedNode<TNodeType, TAttributeType>* CTypedNode<TNodeType, TAttributeType>::Child(TInt aByIndex) const
+	{
+	return (REINTERPRET_CAST(CTypedNode*,CNode::Child(aByIndex)));
+	}
+
+/** Gets an attribute value for a specified attribute type.
+
+@return Attribute value
+@param aAttributeType Attribute type
+*/
+template <class TNodeType, class TAttributeType>
+inline CBase* CTypedNode<TNodeType, TAttributeType>::Attribute(TAttributeType aAttributeType) const
+	{
+	return (CNode::Attribute(CONST_CAST(TAny*, REINTERPRET_CAST(const TAny*,aAttributeType))));
+	}
+
+/** Tests if an attribute of a specified type exists.
+
+@return True if the attribute exists, otherwise false
+@param aAttributeType Attribute type
+*/
+template <class TNodeType, class TAttributeType>
+inline TBool CTypedNode<TNodeType, TAttributeType>::AttributeExists(TAttributeType aAttributeType) const
+	{
+	return (CNode::AttributeExists(CONST_CAST(TAny*, REINTERPRET_CAST(const TAny*,aAttributeType))));
+	}
+
+/** Gets the node type.
+
+@return Node type
+*/
+template <class TNodeType, class TAttributeType>
+inline TNodeType CTypedNode<TNodeType, TAttributeType>::Type() const
+	{
+	return (REINTERPRET_CAST(TNodeType,CNode::Type()));
+	}
+
+/** Sets the node type.
+
+@param aType Node type
+*/
+template <class TNodeType, class TAttributeType>
+inline void CTypedNode<TNodeType, TAttributeType>::SetType(TNodeType aType)
+	{
+	CNode::SetType(CONST_CAST(TAny*,REINTERPRET_CAST(const TAny* ,aType)));
+	}
+