stdcpp/src/libstd_cpp_init.cpp
changeset 31 ce057bb09d0b
child 45 4b03adbd26ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stdcpp/src/libstd_cpp_init.cpp	Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+# include "stlport_prefix.h"
+#include <e32base.h>
+#include <e32err.h>
+//#include <typeinfo.h>
+#include <memory>
+
+#include "libstdcppwsd.h"
+#ifdef __WINSCW__
+#include <pls.h>
+const TUid KLibstdcppUID = {0x10282872};
+#endif
+
+#ifdef	__WINSCW__
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+}	// extern "C"
+#endif
+#include <e32std.h>
+#endif //__WINSCW__
+#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
+#include "sysif.h"
+#endif
+
+
+
+
+_STLP_BEGIN_NAMESPACE
+
+void CallIosInit();
+#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
+extern void CallCloseStdLib();
+#endif
+
+_STLP_EXP_DECLSPEC void LibStdCppInit()
+    {
+	//Create Cleanup Stack
+	CTrapCleanup* pCleanup = CTrapCleanup::New();
+
+	if( pCleanup )
+		{
+		CallIosInit();
+		delete pCleanup;
+		}
+    }
+
+#if 0
+_STLP_EXP_DECLSPEC type_info::~type_info () {}
+
+
+_STLP_EXP_DECLSPEC bad_cast::~bad_cast() throw() { }
+
+_STLP_EXP_DECLSPEC bad_typeid::~bad_typeid() throw() { }
+    
+
+// return true if this is a type_info for a pointer type
+_STLP_EXP_DECLSPEC bool type_info::__is_pointer_p () const
+{
+  return false;
+}
+
+_STLP_EXP_DECLSPEC bool type_info::__is_function_p () const
+{
+  return false;
+}
+
+_STLP_EXP_DECLSPEC bool type_info::__do_catch (const type_info *thr_type, void **, unsigned) const
+{
+  return *this == *thr_type;
+}
+
+#endif
+
+
+_STLP_EXP_DECLSPEC new_handler set_new_handler(new_handler pnew) __NO_THROW
+{
+    new_handler& phandler = get_new_handler();
+    new_handler phold = phandler;
+    phandler = pnew;
+    return phold;
+}
+
+_STLP_END_NAMESPACE
+
+using namespace std;
+
+int
+init_libcpp_wsdvar(_Libcpp_wsd* g_libcpp_wsd)
+{
+	g_libcpp_wsd->is_Initialized = false;
+	return KErrNone;
+}
+
+#ifdef __WINSCW__
+void* GetGlobalTlsData()
+    {
+    return Pls<_Libcpp_wsd>(KLibstdcppUID, &init_libcpp_wsdvar);
+    }
+
+void SetGlobalTlsData(void* aData)
+    {
+    SetPls(aData, KLibstdcppUID);
+    }
+#endif
+#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
+void* SetBackendHeap()
+{
+
+	RHeap* oldHeap = User::SwitchHeap( Backend()->Heap() ); // From now, new allocates memory form backend heap
+	
+	return (void*)oldHeap;
+	
+}
+
+void ReSetUserHeap(void* oldHeap)
+{
+	
+	User::SwitchHeap( (RHeap*)oldHeap);
+}
+
+
+#endif
+
+
+
+_STLP_EXP_DECLSPEC void CloseStdLibCpp()
+    {
+#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
+    std::CallCloseStdLib();
+#endif
+    }
+
+
+
+
+_STLP_EXP_DECLSPEC void *operator new(unsigned int aSize)__NO_THROW
+	{
+	void* __y;
+
+	__y = _STLP_NEW(aSize);
+
+	if (__y == 0)
+	    {
+	    new_handler& phandler = get_new_handler();
+	    if(phandler == NULL)
+	        _STLP_THROW(bad_alloc());
+	    else
+	      phandler();
+	    }
+    return __y;
+	}
+
+_STLP_EXP_DECLSPEC void *operator new[](unsigned int aSize)__NO_THROW
+    {
+    return ::operator new(aSize);
+    }
+
+_STLP_EXP_DECLSPEC void operator delete(void* aPtr) __NO_THROW
+    {
+
+    ::free(aPtr);
+
+    }
+
+_STLP_EXP_DECLSPEC void operator delete[](void* aPtr) __NO_THROW
+    {
+    ::operator delete(aPtr);
+    }
+
+_STLP_EXP_DECLSPEC void* operator new(unsigned int aSize, const std::nothrow_t& /*aNoThrow*/) __NO_THROW
+    { 
+	void* __y = _STLP_NEW(aSize);
+	if (__y == 0)
+	    {
+	    new_handler& phandler = get_new_handler();
+	    if(phandler != NULL)
+	      phandler();
+	    }
+    return __y;
+    }
+
+_STLP_EXP_DECLSPEC void* operator new[](unsigned int aSize, const std::nothrow_t& aNoThrow) __NO_THROW
+    { 
+    return operator new (aSize, aNoThrow); 
+    }
+
+_STLP_EXP_DECLSPEC void operator delete(void* aPtr, const std::nothrow_t& /*aNoThrow*/) __NO_THROW
+    {
+    operator delete(aPtr);
+    }
+
+_STLP_EXP_DECLSPEC void operator delete[](void* aPtr, const std::nothrow_t& /*aNoThrow*/) __NO_THROW
+    {
+    operator delete(aPtr);
+    }
+
+
+// end of file