--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/sisxlibrary/element.h Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Note: This file may contain code to generate corrupt files for test purposes.
+* Such code is excluded from production builds by use of compiler defines;
+* it is recommended that such code should be removed if this code is ever published publicly.
+* smart pointers; used as elements in SIS arrays and elsewhere
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef __ELEMENT_H__
+#define __ELEMENT_H__
+
+#include <string>
+#include <iostream>
+
+#include "sharedcount.h"
+
+
+
+
+
+template<class T> struct shared_ptr_traits
+ {
+ typedef T& reference;
+ };
+
+
+template<> struct shared_ptr_traits<void>
+ {
+ typedef void reference;
+ };
+
+
+
+
+template <class T> class CElement
+
+ {
+public:
+ typedef T* TPtr;
+ typedef typename shared_ptr_traits<T>::reference TRef;
+
+ CElement ();
+
+ template <class Y> explicit CElement (Y* ay) :
+ iPtr (ay),
+ iCount (ay) { }
+
+ template <class Y>
+ CElement& operator = (CElement<Y> const& r)
+ {
+ iPtr = r.iPtr;
+ iCount = r.iCount;
+ return *this;
+ }
+
+ template <class Y> void reset (Y* ay)
+ {
+ assert (ay == 0 || ay != iPtr); // can't self reset
+ this_type (ay).swap (*this);
+ }
+
+ template <class Y>
+ bool _internal_less (CElement<Y> const& rhs) const
+ {
+ return iCount < rhs.iCount;
+ }
+ void reset ();
+ TRef operator* () const
+ {
+ assert (iPtr != NULL);
+ return *iPtr;
+ }
+ T* operator -> () const;
+ T* get () const;
+ bool operator! () const;
+ long UseCount () const;
+ void swap (CElement<T>& aOther);
+
+ void Verify (const TUint32 aLanguages) const;
+ TUint32 ByteCount (const bool aInArray) const;
+ bool WasteOfSpace () const;
+ void MakeNeat ();
+ std::string Name () const;
+ void Dump (std::ostream& aStream, const int aLevel) const;
+ TUint32 ByteCountWithHeader (const bool aInArray) const;
+ void CalculateCrc (TCRC& aCRC, const bool aIsArrayElement) const;
+ std::string NoteIfOptional () const;
+#ifdef GENERATE_ERRORS
+ virtual void CreateDefects ();
+#endif // GENERATE_ERRORS
+ void SkipOldWriteNew (TSISStream& aFile) const;
+
+private:
+ T* iPtr;
+ CSharedCount iCount;
+ };
+
+
+
+template <class T> inline CElement <T>::CElement () :
+ iPtr (NULL)
+ {
+ }
+
+
+template<class T> inline void CElement <T>::reset ()
+ {
+ this_type ().swap (*this);
+ }
+
+
+template<class T> T* CElement <T>::operator -> () const
+ {
+ assert (iPtr != NULL);
+ return iPtr;
+ }
+
+template<class T> inline T* CElement <T>::get () const
+ {
+ return iPtr;
+ }
+
+template<class T> inline bool CElement <T>::operator! () const
+ {
+ return iPtr == 0;
+ }
+
+template<class T> inline long CElement <T>::UseCount () const
+ {
+ return iCount.UseCount ();
+ }
+
+template<class T> inline void CElement <T>::swap (CElement<T>& aOther)
+ {
+ std::swap (iPtr, aOther.iPtr);
+ iCount.swap (aOther.iCount);
+ }
+
+template<class T> inline
+ void CElement <T>::Verify (const TUint32 aLanguages) const
+ {
+ iPtr -> Verify (aLanguages);
+ }
+
+template<class T> inline TUint32 CElement <T>::ByteCount (const bool aInArray) const
+ {
+ return iPtr -> ByteCount (aInArray);
+ }
+
+template<class T> inline bool CElement <T>::WasteOfSpace () const
+ {
+ return iPtr -> WasteOfSpace ();
+ }
+
+template<class T> inline void CElement <T>::MakeNeat ()
+ {
+ iPtr -> MakeNeat ();
+ }
+
+template<class T> inline std::string CElement <T>::Name () const
+ {
+ return iPtr -> Name ();
+ }
+
+template<class T> inline
+ void CElement <T>::Dump (std::ostream& aStream, const int aLevel) const
+ {
+ iPtr -> Dump (aStream, aLevel);
+ }
+
+template<class T> inline
+ TUint32 CElement <T>::ByteCountWithHeader (const bool aInArray) const
+ {
+ return iPtr -> ByteCountWithHeader (aInArray);
+ }
+
+template <class T> inline
+ void CElement <T>::CalculateCrc (TCRC& aCRC, const bool aIsArrayElement) const
+ {
+ iPtr -> CalculateCrc (aCRC, aIsArrayElement);
+ }
+
+template <class T> inline std::string CElement <T>::NoteIfOptional () const
+ {
+ return iPtr -> NoteIfOptional ();
+ }
+
+#ifdef GENERATE_ERRORS
+template <class T> inline void CElement <T>::CreateDefects ()
+ {
+ iPtr -> CreateDefects ();
+ }
+#endif // GENERATE_ERRORS
+
+template <class T> inline void CElement <T>::SkipOldWriteNew (TSISStream& aFile) const
+ {
+ iPtr -> SkipOldWriteNew (aFile);
+ }
+
+template <class T, class U> inline bool operator == (CElement<T> const& a, CElement<U> const& b)
+ {
+ return a.get () == b.get ();
+ }
+
+template<class T, class U> inline bool operator != (CElement<T> const& a, CElement<U> const& b)
+ {
+ return a.get () != b.get ();
+ }
+
+template<class T, class U> inline bool operator < (CElement<T> const& a, CElement<U> const& b)
+ {
+ return a._internal_less (b);
+ }
+
+template<class T> inline void swap (CElement<T>& a, CElement<T>& b)
+ {
+ a.swap (b);
+ }
+
+template<class T> inline T* get_pointer (CElement<T> const& p)
+ {
+ return p.get ();
+ }
+
+
+
+#endif // __ELEMENT_H__