diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/stdapis/stlportv5/libstdcppwsd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/stdapis/stlportv5/libstdcppwsd.h Wed Mar 31 12:33:34 2010 +0100 @@ -0,0 +1,308 @@ +/* +* Copyright (c) 2008-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: +* Name : libcppwsd.h +* Part of : standard c++ library (wsd definitions) +* +* +*/ + + + +#ifndef LIBSTDCPPWSD_H_ +#define LIBSTDCPPWSD_H_ + +#ifdef __SYMBIAN32__WSD__ //stuff for WSD + + +// ****************************** WSD RELATED ************************// +#include +#include // For emulator WSD API +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// Global hash tables for category objects. +typedef std::hash_map, std::hash, std::equal_to > Category_Map; + +#define LOCALE_ID_MAX 39 +/* + * The following functions are used to make allocations internal to the + * C++ library.These are only required on the emulator as these are + * static variables in the actual STLPort implementation but in order to + * save them on the ewsd, they need to allocated on heap. + */ +IMPORT_C void* WSDAlloc(unsigned int size); +IMPORT_C int WSDFree(void*); + +// ******************************************************// +// *** all WSD definitions here +// ******************************************************// +class _Libcpp_wsd +{ +public: + //_locale.h + size_t locale_id_S_max; + + //locale_impl.h + std::locale *_Stl_classic_locale; + std::locale *_Stl_global_locale; + + void* __Loc_init_buf; + + std::_Refcount_Base *_Loc_init_S_count; + + //locale.cpp + __stl_atomic_t _S_index; + std::_STLP_STATIC_MUTEX locale_Index_lock; + + //_ios_base.h + bool ios_base_S_was_synced; + long ios_base_Init_S_count; //ios_base::Init class + std::ios_base::Init *_IosInit; + + //ios.cpp + int ios_base_xalloc_S_index; + std::_STLP_STATIC_MUTEX ios_base_xalloc_lock; + + //locale_catalog.cpp + Category_Map *_S_ctype_hash; + Category_Map *_S_numeric_hash; + Category_Map *_S_time_hash; + Category_Map *_S_collate_hash; + Category_Map *_S_monetary_hash; + Category_Map *_S_messages_hash; + + std::_STLP_STATIC_MUTEX locale_catalog_category_hash_lock; + + //iostream.cpp + std::istream *wsd_cin; + std::ostream *wsd_cout; + std::ostream *wsd_cerr; + std::ostream *wsd_clog; +#ifndef _STLP_NO_WCHAR_T + std::wistream *wsd_wcin; + std::wostream *wsd_wcout; + std::wostream *wsd_wcerr; + std::wostream *wsd_wclog; +#endif + + //numpunct.cpp + std::string numpunct_char_m_truename; + std::string numpunct_char_m_falsename; + std::string numpunct_char_m_grouping; +# ifndef _STLP_NO_WCHAR_T + std::wstring numpunct_wchar_m_truename; + std::wstring numpunct_wchar_m_falsename; + std::string numpunct_wchar_m_grouping; +# endif + + //monetary.cpp + std::string monetary_S_empty_string; +# ifndef _STLP_NO_WCHAR_T + std::wstring monetary_S_empty_wstring; +# endif //_STLP_NO_WCHAR_T + + //_fstream.h + size_t fstream_Filebuf_base_M_page_size; + + //allocators.cpp + std::__oom_handler_type wsd__oom_handler; + std::_STLP_STATIC_MUTEX wsd_allocator_S_lock; + size_t wsd__node_alloc_impl_S_heap_size; + char* wsd_S_start_free; + char* wsd_S_end_free; + void* wsd_S_free_list[16]; + + std::_STLP_STATIC_MUTEX wsd_pt_S_chunk_allocator_lock; + char *wsd_pt_S_start_free; + char *wsd_pt_S_end_free; + size_t wsd_pt_S_heap_size; + stlp_priv::_Pthread_alloc::__state_type *wsd_pt_S_free_per_thread_states; + pthread_key_t wsd_pt_S_key; + bool wsd_pt_S_key_initialized; + + //_threads.h + std::_STLP_STATIC_MUTEX _threads_S_swap_lock; + std::_STLP_STATIC_MUTEX _threads_0_S_swap_lock; + unsigned _mutex_max; + unsigned _mutex_last; + +# ifndef _STLP_NO_MBSTATE_T + std::locale::id codecvt_char_char_mbstate_id; +# ifndef _STLP_NO_WCHAR_T + std::locale::id codecvt_wchar_char_mbstate_id; +# endif +# endif //_STLP_NO_MBSTATE_T + std::locale::id collate_char_id; + + std::locale::id ctype_char_id; + + std::locale::id moneypunct_char_true_id; + + std::locale::id moneypunct_char_false_id; + + std::locale::id messages_char_id; + + std::locale::id numpunct_char_id; + +# ifndef _STLP_NO_WCHAR_T + std::locale::id collate_wchar_id; + + std::locale::id ctype_wchar_id; + + std::locale::id moneypunct_wchar_true_id; + + std::locale::id moneypunct_wchar_false_id; + + std::locale::id numpunct_wchar_id; + + std::locale::id messages_wchar_id; + + std::locale::id num_get_wchar_istreambuf_iterator_id; + + std::locale::id num_get_wchar_wchar_const_id; + + std::locale::id num_put_wchar_ostreambuf_iterator_id; + + std::locale::id num_put_wchar_wchar_id; + + std::locale::id time_get_wchar_istreambuf_iterator_id; + + std::locale::id time_get_wchar_wchar_const_id; + + std::locale::id time_put_wchar_ostreambuf_iterator_id; + + std::locale::id time_put_wchar_wchar_id; + + std::locale::id money_get_wchar_istreambuf_iterator_id; + + std::locale::id money_get_wchar_wchar_const_id; + + std::locale::id money_put_wchar_ostreambuf_iterator_id; + + std::locale::id money_put_wchar_wchar_id; +#endif + + std::locale::id time_get_char_istreambuf_iterator_id; + + std::locale::id time_get_char_char_const_id; + + std::locale::id time_put_char_ostreambuf_iterator_id; + + std::locale::id time_put_char_char_id; + + std::locale::id num_get_char_istreambuf_iterator_id; + + std::locale::id num_get_char_char_const_id; + + std::locale::id num_put_char_ostreambuf_iterator_id; + + std::locale::id num_put_char_char_id; + + std::locale::id num_put_char_back_insert_iterator_id; + + std::locale::id money_get_char_istreambuf_iterator_id; + + std::locale::id money_get_char_char_const_id; + + std::locale::id money_put_char_ostreambuf_iterator_id; + + std::locale::id money_put_char_char_id; + + std::map ctype_charT_ids; //for ctype + std::map numpunct_charT_ids; //for numpunct + std::map moneypunct_charT_ids; //for moneypunct + +#ifdef _STLP_DEBUG + std::string *_Nameless; +#endif + // ****** end of static var definition + + bool is_Initialized; + + //constructor + _Libcpp_wsd(); + + //destructor + ~_Libcpp_wsd(); + +}; + + +//declaraions for wsd initialization functions +void locale_impl_init(); +void locale_index_lock_init(); +void monetary_empty_string_init(); +void global_iostream_init(); +void stdcpp_allocators_init(); +void filebuf_page_size_init(); + +#ifdef _STLP_DEBUG +inline std::string*& get_Nameless(); +#endif + +namespace _STLP_PRIV_NAME { +void locale_catalog_category_hash_lock_init(); +void Category_Map_Init(); +_STLP_END_NAMESPACE + + +const TUid KLibstdcppUID = {0x20017610}; + +//cleanup all the WSD allocations +IMPORT_C void CleanupWSD(); + +//return the global class pointer +IMPORT_C _Libcpp_wsd& get_libcpp_wsd(); + +#ifdef _STLP_DEBUG +inline std::string*& get_Nameless() + { + return get_libcpp_wsd()._Nameless; + } +#endif + + +// ******************************************************// + +//locale wsd functions +#include "wsd_locales.h" + +//streams wsd functions +#include "wsd_streams.h" + +// ******************************************************// +#endif + +#endif /*LIBSTDCPPWSD_H_*/