williamr@4: /* williamr@4: * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * Name : libcppwsd.h williamr@4: * Part of : standard c++ library (wsd definitions) williamr@4: * williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: williamr@4: #ifndef LIBSTDCPPWSD_H_ williamr@4: #define LIBSTDCPPWSD_H_ williamr@4: williamr@4: #ifdef __SYMBIAN32__WSD__ //stuff for WSD williamr@4: williamr@4: williamr@4: // ****************************** WSD RELATED ************************// williamr@4: #include williamr@4: #include // For emulator WSD API williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: williamr@4: // Global hash tables for category objects. williamr@4: typedef std::hash_map, std::hash, std::equal_to > Category_Map; williamr@4: williamr@4: #define LOCALE_ID_MAX 39 williamr@4: /* williamr@4: * The following functions are used to make allocations internal to the williamr@4: * C++ library.These are only required on the emulator as these are williamr@4: * static variables in the actual STLPort implementation but in order to williamr@4: * save them on the ewsd, they need to allocated on heap. williamr@4: */ williamr@4: IMPORT_C void* WSDAlloc(unsigned int size); williamr@4: IMPORT_C int WSDFree(void*); williamr@4: williamr@4: // ******************************************************// williamr@4: // *** all WSD definitions here williamr@4: // ******************************************************// williamr@4: class _Libcpp_wsd williamr@4: { williamr@4: public: williamr@4: //_locale.h williamr@4: size_t locale_id_S_max; williamr@4: williamr@4: //locale_impl.h williamr@4: std::locale *_Stl_classic_locale; williamr@4: std::locale *_Stl_global_locale; williamr@4: williamr@4: void* __Loc_init_buf; williamr@4: williamr@4: std::_Refcount_Base *_Loc_init_S_count; williamr@4: williamr@4: //locale.cpp williamr@4: __stl_atomic_t _S_index; williamr@4: std::_STLP_STATIC_MUTEX locale_Index_lock; williamr@4: williamr@4: //_ios_base.h williamr@4: bool ios_base_S_was_synced; williamr@4: long ios_base_Init_S_count; //ios_base::Init class williamr@4: std::ios_base::Init *_IosInit; williamr@4: williamr@4: //ios.cpp williamr@4: int ios_base_xalloc_S_index; williamr@4: std::_STLP_STATIC_MUTEX ios_base_xalloc_lock; williamr@4: williamr@4: //locale_catalog.cpp williamr@4: Category_Map *_S_ctype_hash; williamr@4: Category_Map *_S_numeric_hash; williamr@4: Category_Map *_S_time_hash; williamr@4: Category_Map *_S_collate_hash; williamr@4: Category_Map *_S_monetary_hash; williamr@4: Category_Map *_S_messages_hash; williamr@4: williamr@4: std::_STLP_STATIC_MUTEX locale_catalog_category_hash_lock; williamr@4: williamr@4: //iostream.cpp williamr@4: std::istream *wsd_cin; williamr@4: std::ostream *wsd_cout; williamr@4: std::ostream *wsd_cerr; williamr@4: std::ostream *wsd_clog; williamr@4: #ifndef _STLP_NO_WCHAR_T williamr@4: std::wistream *wsd_wcin; williamr@4: std::wostream *wsd_wcout; williamr@4: std::wostream *wsd_wcerr; williamr@4: std::wostream *wsd_wclog; williamr@4: #endif williamr@4: williamr@4: //numpunct.cpp williamr@4: std::string numpunct_char_m_truename; williamr@4: std::string numpunct_char_m_falsename; williamr@4: std::string numpunct_char_m_grouping; williamr@4: # ifndef _STLP_NO_WCHAR_T williamr@4: std::wstring numpunct_wchar_m_truename; williamr@4: std::wstring numpunct_wchar_m_falsename; williamr@4: std::string numpunct_wchar_m_grouping; williamr@4: # endif williamr@4: williamr@4: //monetary.cpp williamr@4: std::string monetary_S_empty_string; williamr@4: # ifndef _STLP_NO_WCHAR_T williamr@4: std::wstring monetary_S_empty_wstring; williamr@4: # endif //_STLP_NO_WCHAR_T williamr@4: williamr@4: //_fstream.h williamr@4: size_t fstream_Filebuf_base_M_page_size; williamr@4: williamr@4: //allocators.cpp williamr@4: std::__oom_handler_type wsd__oom_handler; williamr@4: std::_STLP_STATIC_MUTEX wsd_allocator_S_lock; williamr@4: size_t wsd__node_alloc_impl_S_heap_size; williamr@4: char* wsd_S_start_free; williamr@4: char* wsd_S_end_free; williamr@4: void* wsd_S_free_list[16]; williamr@4: williamr@4: std::_STLP_STATIC_MUTEX wsd_pt_S_chunk_allocator_lock; williamr@4: char *wsd_pt_S_start_free; williamr@4: char *wsd_pt_S_end_free; williamr@4: size_t wsd_pt_S_heap_size; williamr@4: stlp_priv::_Pthread_alloc::__state_type *wsd_pt_S_free_per_thread_states; williamr@4: pthread_key_t wsd_pt_S_key; williamr@4: bool wsd_pt_S_key_initialized; williamr@4: williamr@4: //_threads.h williamr@4: std::_STLP_STATIC_MUTEX _threads_S_swap_lock; williamr@4: std::_STLP_STATIC_MUTEX _threads_0_S_swap_lock; williamr@4: unsigned _mutex_max; williamr@4: unsigned _mutex_last; williamr@4: williamr@4: # ifndef _STLP_NO_MBSTATE_T williamr@4: std::locale::id codecvt_char_char_mbstate_id; williamr@4: # ifndef _STLP_NO_WCHAR_T williamr@4: std::locale::id codecvt_wchar_char_mbstate_id; williamr@4: # endif williamr@4: # endif //_STLP_NO_MBSTATE_T williamr@4: std::locale::id collate_char_id; williamr@4: williamr@4: std::locale::id ctype_char_id; williamr@4: williamr@4: std::locale::id moneypunct_char_true_id; williamr@4: williamr@4: std::locale::id moneypunct_char_false_id; williamr@4: williamr@4: std::locale::id messages_char_id; williamr@4: williamr@4: std::locale::id numpunct_char_id; williamr@4: williamr@4: # ifndef _STLP_NO_WCHAR_T williamr@4: std::locale::id collate_wchar_id; williamr@4: williamr@4: std::locale::id ctype_wchar_id; williamr@4: williamr@4: std::locale::id moneypunct_wchar_true_id; williamr@4: williamr@4: std::locale::id moneypunct_wchar_false_id; williamr@4: williamr@4: std::locale::id numpunct_wchar_id; williamr@4: williamr@4: std::locale::id messages_wchar_id; williamr@4: williamr@4: std::locale::id num_get_wchar_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id num_get_wchar_wchar_const_id; williamr@4: williamr@4: std::locale::id num_put_wchar_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id num_put_wchar_wchar_id; williamr@4: williamr@4: std::locale::id time_get_wchar_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id time_get_wchar_wchar_const_id; williamr@4: williamr@4: std::locale::id time_put_wchar_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id time_put_wchar_wchar_id; williamr@4: williamr@4: std::locale::id money_get_wchar_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id money_get_wchar_wchar_const_id; williamr@4: williamr@4: std::locale::id money_put_wchar_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id money_put_wchar_wchar_id; williamr@4: #endif williamr@4: williamr@4: std::locale::id time_get_char_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id time_get_char_char_const_id; williamr@4: williamr@4: std::locale::id time_put_char_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id time_put_char_char_id; williamr@4: williamr@4: std::locale::id num_get_char_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id num_get_char_char_const_id; williamr@4: williamr@4: std::locale::id num_put_char_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id num_put_char_char_id; williamr@4: williamr@4: std::locale::id num_put_char_back_insert_iterator_id; williamr@4: williamr@4: std::locale::id money_get_char_istreambuf_iterator_id; williamr@4: williamr@4: std::locale::id money_get_char_char_const_id; williamr@4: williamr@4: std::locale::id money_put_char_ostreambuf_iterator_id; williamr@4: williamr@4: std::locale::id money_put_char_char_id; williamr@4: williamr@4: std::map ctype_charT_ids; //for ctype williamr@4: std::map numpunct_charT_ids; //for numpunct williamr@4: std::map moneypunct_charT_ids; //for moneypunct williamr@4: williamr@4: #ifdef _STLP_DEBUG williamr@4: std::string *_Nameless; williamr@4: #endif williamr@4: // ****** end of static var definition williamr@4: williamr@4: bool is_Initialized; williamr@4: williamr@4: //constructor williamr@4: _Libcpp_wsd(); williamr@4: williamr@4: //destructor williamr@4: ~_Libcpp_wsd(); williamr@4: williamr@4: }; williamr@4: williamr@4: williamr@4: //declaraions for wsd initialization functions williamr@4: void locale_impl_init(); williamr@4: void locale_index_lock_init(); williamr@4: void monetary_empty_string_init(); williamr@4: void global_iostream_init(); williamr@4: void stdcpp_allocators_init(); williamr@4: void filebuf_page_size_init(); williamr@4: williamr@4: #ifdef _STLP_DEBUG williamr@4: inline std::string*& get_Nameless(); williamr@4: #endif williamr@4: williamr@4: namespace _STLP_PRIV_NAME { williamr@4: void locale_catalog_category_hash_lock_init(); williamr@4: void Category_Map_Init(); williamr@4: _STLP_END_NAMESPACE williamr@4: williamr@4: williamr@4: const TUid KLibstdcppUID = {0x20017610}; williamr@4: williamr@4: //cleanup all the WSD allocations williamr@4: IMPORT_C void CleanupWSD(); williamr@4: williamr@4: //return the global class pointer williamr@4: IMPORT_C _Libcpp_wsd& get_libcpp_wsd(); williamr@4: williamr@4: #ifdef _STLP_DEBUG williamr@4: inline std::string*& get_Nameless() williamr@4: { williamr@4: return get_libcpp_wsd()._Nameless; williamr@4: } williamr@4: #endif williamr@4: williamr@4: williamr@4: // ******************************************************// williamr@4: williamr@4: //locale wsd functions williamr@4: #include "wsd_locales.h" williamr@4: williamr@4: //streams wsd functions williamr@4: #include "wsd_streams.h" williamr@4: williamr@4: // ******************************************************// williamr@4: #endif williamr@4: williamr@4: #endif /*LIBSTDCPPWSD_H_*/