graphicstools/bitmapfonttools/inc/LST.H
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstools/bitmapfonttools/inc/LST.H	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 1997-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: 
+* Header LST.H
+*
+*/
+
+
+#ifndef __LST_H__
+#define __LST_H__
+
+template <class T>
+class Link
+/**
+@publishedAll
+WARNING: Class for internal use ONLY.  Compatibility is not guaranteed in future releases.
+*/
+	{
+public:
+	inline Link();
+	inline Link(T aT);
+public:
+	Link* iNext;
+	T iT;
+	};
+
+template <class T>
+class List
+/**
+@publishedAll
+WARNING: Class for internal use ONLY.  Compatibility is not guaranteed in future releases.
+*/
+	{
+public:
+	inline List();
+	inline int Size() const;
+	inline T& operator [] (const int aNum) const;
+	inline void Add(T aT);
+	virtual void Externalize(ostream& out) = 0;
+	inline void Destroy();
+	inline ~List();
+private:
+	Link<T> *iFirst;
+	};
+
+template <class T> 
+class ObjectList : public List<T>
+/**
+List of object pointers
+@publishedAll
+WARNING: Class for internal use ONLY.  Compatibility is not guaranteed in future releases.
+*/	
+	{
+public:
+	inline virtual void Externalize(ostream& out);
+	inline void Destroy();
+	};
+
+template <class T> inline Link<T>::Link()
+	{
+	iNext = NULL;
+	}
+
+template <class T> inline Link<T>::Link(T aT)
+	{
+	iT = aT;
+	iNext = NULL;
+	}
+
+template <class T> inline List<T>::List()
+	{
+	iFirst = NULL;
+	}
+
+template <class T> inline int List<T>::Size() const
+	{
+	int size = 0;
+	Link<T>* link = iFirst;
+	while (link != NULL)
+		{
+		link = link->iNext;
+		size++;
+		}
+	return size;
+	}
+
+template <class T> inline T& List<T>::operator [] (const int aNum) const
+	{
+	int num = 0;
+	Link<T>* link = iFirst;
+	while (num != aNum)
+		{
+		link = link->iNext;
+		num++;
+		}
+	return link->iT;
+	}
+
+template <class T> inline void List<T>::Add(T aT)
+	{
+	Link<T>* link;
+	if (iFirst == NULL)
+		iFirst = new Link<T>(aT);
+	else
+		{
+		link = iFirst;
+		while (link->iNext != NULL)
+			link = link->iNext; 
+		link->iNext = new Link<T>(aT);
+		}
+	}
+
+template <class T> inline void List<T>::Destroy()
+	{
+	Link<T>* link = iFirst;
+	Link<T>* next;
+	while (link != NULL)
+		{
+		next = link->iNext;
+		delete link;
+		link = next;
+		}
+	iFirst = NULL;
+	}
+
+template <class T> inline List<T>::~List (void)
+	{
+	Destroy();
+	}
+
+template <class T> inline void ObjectList<T>::Externalize(ostream& out)
+	{
+	int32 size = List<T>::Size();
+	int32 i;
+	out.write ((char*) &size, sizeof(size));
+	for (i = 0; i < size; i++)
+		(*this)[i]->Externalize(out);
+	}
+
+template <class T> inline void ObjectList<T>::Destroy()
+	{
+	int size = List<T>::Size();
+	int i;
+	for (i = 0; i < size; i++)
+		delete (*this)[i];
+	List<T>::Destroy();
+	}
+
+#endif