epoc32/include/stdapis/stlportv5/libstdcppwsd.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     3
* All rights reserved.
williamr@4
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@4
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     8
*
williamr@4
     9
* Initial Contributors:
williamr@4
    10
* Nokia Corporation - initial contribution.
williamr@4
    11
*
williamr@4
    12
* Contributors:
williamr@4
    13
*
williamr@4
    14
* Description:
williamr@4
    15
* Name        : libcppwsd.h
williamr@4
    16
* Part of     : standard c++ library (wsd definitions)
williamr@4
    17
* 
williamr@4
    18
*
williamr@4
    19
*/
williamr@4
    20
williamr@4
    21
williamr@4
    22
williamr@4
    23
#ifndef LIBSTDCPPWSD_H_
williamr@4
    24
#define LIBSTDCPPWSD_H_
williamr@4
    25
williamr@4
    26
#ifdef __SYMBIAN32__WSD__   //stuff for WSD
williamr@4
    27
williamr@4
    28
williamr@4
    29
// ******************************  WSD RELATED ************************//
williamr@4
    30
#include <e32std.h>
williamr@4
    31
#include <pls.h> // For emulator WSD API
williamr@4
    32
#include <typeinfo>
williamr@4
    33
#include <locale>
williamr@4
    34
#include <clocale>             
williamr@4
    35
#include <vector>
williamr@4
    36
#include <string>
williamr@4
    37
#include <hash_map>
williamr@4
    38
#include <cfloat>
williamr@4
    39
#include <cmath>
williamr@4
    40
#include <assert.h>
williamr@4
    41
#include <stl/_new.h>
williamr@4
    42
#include <stl/_map.h>
williamr@4
    43
#include <stl/_locale.h>
williamr@4
    44
#include <stl/_numpunct.h>
williamr@4
    45
#include <stl/_alloc.h>
williamr@4
    46
#include <stl/_fstream.h>
williamr@4
    47
#include <stl/_codecvt.h>
williamr@4
    48
#include <stl/_collate.h>
williamr@4
    49
#include <stl/_ctype.h>
williamr@4
    50
#include <stl/_pthread_alloc.h>
williamr@4
    51
#include <stl/_monetary.h>
williamr@4
    52
#include <stl/_threads.h>
williamr@4
    53
williamr@4
    54
williamr@4
    55
// Global hash tables for category objects.
williamr@4
    56
typedef std::hash_map<std::string, std::pair<void*, size_t>, std::hash<std::string>, std::equal_to<std::string> > Category_Map;
williamr@4
    57
williamr@4
    58
#define LOCALE_ID_MAX		39
williamr@4
    59
/*
williamr@4
    60
 * The following functions are used to make allocations internal to the 
williamr@4
    61
 * C++ library.These are only required on the emulator as these are 
williamr@4
    62
 * static variables in the actual STLPort implementation but in order to
williamr@4
    63
 * save them on the ewsd, they need to allocated on heap.
williamr@4
    64
 */
williamr@4
    65
IMPORT_C void* WSDAlloc(unsigned int size);
williamr@4
    66
IMPORT_C int   WSDFree(void*);
williamr@4
    67
williamr@4
    68
// ******************************************************//
williamr@4
    69
//  ***   all WSD definitions here
williamr@4
    70
// ******************************************************//
williamr@4
    71
class _Libcpp_wsd
williamr@4
    72
{
williamr@4
    73
public:
williamr@4
    74
	//_locale.h
williamr@4
    75
	size_t locale_id_S_max;
williamr@4
    76
	
williamr@4
    77
	//locale_impl.h
williamr@4
    78
	std::locale *_Stl_classic_locale;	
williamr@4
    79
	std::locale *_Stl_global_locale;
williamr@4
    80
	
williamr@4
    81
	void* __Loc_init_buf;
williamr@4
    82
	
williamr@4
    83
	std::_Refcount_Base *_Loc_init_S_count;
williamr@4
    84
	
williamr@4
    85
	//locale.cpp
williamr@4
    86
	__stl_atomic_t _S_index;
williamr@4
    87
	std::_STLP_STATIC_MUTEX locale_Index_lock;
williamr@4
    88
williamr@4
    89
	//_ios_base.h
williamr@4
    90
	bool ios_base_S_was_synced;
williamr@4
    91
	long ios_base_Init_S_count; 	//ios_base::Init class	
williamr@4
    92
	std::ios_base::Init *_IosInit;
williamr@4
    93
	
williamr@4
    94
	//ios.cpp
williamr@4
    95
	int ios_base_xalloc_S_index;
williamr@4
    96
	std::_STLP_STATIC_MUTEX ios_base_xalloc_lock; 
williamr@4
    97
williamr@4
    98
	//locale_catalog.cpp
williamr@4
    99
	Category_Map *_S_ctype_hash;
williamr@4
   100
	Category_Map *_S_numeric_hash;
williamr@4
   101
	Category_Map *_S_time_hash;
williamr@4
   102
	Category_Map *_S_collate_hash;
williamr@4
   103
	Category_Map *_S_monetary_hash;
williamr@4
   104
	Category_Map *_S_messages_hash;
williamr@4
   105
	
williamr@4
   106
	std::_STLP_STATIC_MUTEX locale_catalog_category_hash_lock;
williamr@4
   107
williamr@4
   108
	//iostream.cpp
williamr@4
   109
	std::istream  *wsd_cin;
williamr@4
   110
	std::ostream  *wsd_cout;
williamr@4
   111
	std::ostream  *wsd_cerr;
williamr@4
   112
	std::ostream  *wsd_clog;
williamr@4
   113
#ifndef _STLP_NO_WCHAR_T
williamr@4
   114
	std::wistream *wsd_wcin;
williamr@4
   115
	std::wostream *wsd_wcout;
williamr@4
   116
	std::wostream *wsd_wcerr;
williamr@4
   117
	std::wostream *wsd_wclog;
williamr@4
   118
#endif
williamr@4
   119
williamr@4
   120
	//numpunct.cpp
williamr@4
   121
	std::string numpunct_char_m_truename;
williamr@4
   122
	std::string numpunct_char_m_falsename;
williamr@4
   123
	std::string numpunct_char_m_grouping;
williamr@4
   124
# ifndef _STLP_NO_WCHAR_T
williamr@4
   125
	std::wstring numpunct_wchar_m_truename;
williamr@4
   126
	std::wstring numpunct_wchar_m_falsename;
williamr@4
   127
	std::string  numpunct_wchar_m_grouping;
williamr@4
   128
# endif
williamr@4
   129
	
williamr@4
   130
	//monetary.cpp
williamr@4
   131
	std::string monetary_S_empty_string;	
williamr@4
   132
# ifndef _STLP_NO_WCHAR_T
williamr@4
   133
	std::wstring monetary_S_empty_wstring;
williamr@4
   134
# endif //_STLP_NO_WCHAR_T
williamr@4
   135
williamr@4
   136
	//_fstream.h
williamr@4
   137
	size_t fstream_Filebuf_base_M_page_size;
williamr@4
   138
	
williamr@4
   139
	//allocators.cpp
williamr@4
   140
	std::__oom_handler_type wsd__oom_handler;
williamr@4
   141
	std::_STLP_STATIC_MUTEX wsd_allocator_S_lock;
williamr@4
   142
	size_t wsd__node_alloc_impl_S_heap_size;
williamr@4
   143
	char* wsd_S_start_free;
williamr@4
   144
	char* wsd_S_end_free;
williamr@4
   145
	void* wsd_S_free_list[16];	
williamr@4
   146
	
williamr@4
   147
	std::_STLP_STATIC_MUTEX wsd_pt_S_chunk_allocator_lock;
williamr@4
   148
	char *wsd_pt_S_start_free;
williamr@4
   149
	char *wsd_pt_S_end_free;
williamr@4
   150
	size_t wsd_pt_S_heap_size;
williamr@4
   151
	stlp_priv::_Pthread_alloc::__state_type *wsd_pt_S_free_per_thread_states;
williamr@4
   152
	pthread_key_t wsd_pt_S_key;
williamr@4
   153
	bool wsd_pt_S_key_initialized;
williamr@4
   154
	
williamr@4
   155
	//_threads.h
williamr@4
   156
	std::_STLP_STATIC_MUTEX _threads_S_swap_lock;
williamr@4
   157
	std::_STLP_STATIC_MUTEX _threads_0_S_swap_lock;
williamr@4
   158
	unsigned _mutex_max;
williamr@4
   159
	unsigned _mutex_last;
williamr@4
   160
	
williamr@4
   161
# ifndef _STLP_NO_MBSTATE_T
williamr@4
   162
	std::locale::id codecvt_char_char_mbstate_id;
williamr@4
   163
# ifndef _STLP_NO_WCHAR_T
williamr@4
   164
	std::locale::id codecvt_wchar_char_mbstate_id;
williamr@4
   165
# endif
williamr@4
   166
# endif		//_STLP_NO_MBSTATE_T
williamr@4
   167
	std::locale::id collate_char_id;
williamr@4
   168
williamr@4
   169
	std::locale::id ctype_char_id;
williamr@4
   170
williamr@4
   171
	std::locale::id moneypunct_char_true_id;
williamr@4
   172
williamr@4
   173
	std::locale::id moneypunct_char_false_id;
williamr@4
   174
williamr@4
   175
	std::locale::id messages_char_id;
williamr@4
   176
williamr@4
   177
	std::locale::id numpunct_char_id;
williamr@4
   178
williamr@4
   179
# ifndef _STLP_NO_WCHAR_T
williamr@4
   180
	std::locale::id collate_wchar_id;
williamr@4
   181
williamr@4
   182
	std::locale::id ctype_wchar_id;
williamr@4
   183
williamr@4
   184
	std::locale::id moneypunct_wchar_true_id;
williamr@4
   185
williamr@4
   186
	std::locale::id moneypunct_wchar_false_id;
williamr@4
   187
williamr@4
   188
	std::locale::id numpunct_wchar_id;
williamr@4
   189
williamr@4
   190
	std::locale::id messages_wchar_id;
williamr@4
   191
williamr@4
   192
	std::locale::id num_get_wchar_istreambuf_iterator_id;
williamr@4
   193
williamr@4
   194
	std::locale::id num_get_wchar_wchar_const_id;
williamr@4
   195
williamr@4
   196
	std::locale::id num_put_wchar_ostreambuf_iterator_id;
williamr@4
   197
williamr@4
   198
	std::locale::id num_put_wchar_wchar_id;
williamr@4
   199
williamr@4
   200
	std::locale::id time_get_wchar_istreambuf_iterator_id;
williamr@4
   201
williamr@4
   202
	std::locale::id time_get_wchar_wchar_const_id;
williamr@4
   203
williamr@4
   204
	std::locale::id time_put_wchar_ostreambuf_iterator_id;
williamr@4
   205
williamr@4
   206
	std::locale::id time_put_wchar_wchar_id;
williamr@4
   207
williamr@4
   208
	std::locale::id money_get_wchar_istreambuf_iterator_id;
williamr@4
   209
williamr@4
   210
	std::locale::id money_get_wchar_wchar_const_id;
williamr@4
   211
williamr@4
   212
	std::locale::id money_put_wchar_ostreambuf_iterator_id;
williamr@4
   213
williamr@4
   214
	std::locale::id money_put_wchar_wchar_id;
williamr@4
   215
#endif
williamr@4
   216
williamr@4
   217
	std::locale::id time_get_char_istreambuf_iterator_id;
williamr@4
   218
williamr@4
   219
	std::locale::id time_get_char_char_const_id;
williamr@4
   220
williamr@4
   221
	std::locale::id time_put_char_ostreambuf_iterator_id;
williamr@4
   222
williamr@4
   223
	std::locale::id time_put_char_char_id;
williamr@4
   224
williamr@4
   225
	std::locale::id num_get_char_istreambuf_iterator_id;
williamr@4
   226
williamr@4
   227
	std::locale::id num_get_char_char_const_id;
williamr@4
   228
williamr@4
   229
	std::locale::id num_put_char_ostreambuf_iterator_id;
williamr@4
   230
williamr@4
   231
	std::locale::id num_put_char_char_id;
williamr@4
   232
williamr@4
   233
	std::locale::id num_put_char_back_insert_iterator_id;
williamr@4
   234
williamr@4
   235
	std::locale::id money_get_char_istreambuf_iterator_id;
williamr@4
   236
williamr@4
   237
	std::locale::id money_get_char_char_const_id;
williamr@4
   238
williamr@4
   239
	std::locale::id money_put_char_ostreambuf_iterator_id;
williamr@4
   240
williamr@4
   241
	std::locale::id money_put_char_char_id;
williamr@4
   242
williamr@4
   243
	std::map<std::string, std::locale::id> ctype_charT_ids; 		//for ctype<charT>
williamr@4
   244
	std::map<std::string, std::locale::id> numpunct_charT_ids; 	//for numpunct<charT>
williamr@4
   245
	std::map<std::string, std::locale::id> moneypunct_charT_ids;	//for moneypunct<charT>
williamr@4
   246
		
williamr@4
   247
#ifdef _STLP_DEBUG
williamr@4
   248
	std::string *_Nameless;
williamr@4
   249
#endif	
williamr@4
   250
	// ****** end of static var definition
williamr@4
   251
	
williamr@4
   252
    bool is_Initialized;
williamr@4
   253
    
williamr@4
   254
    //constructor
williamr@4
   255
    _Libcpp_wsd();
williamr@4
   256
    
williamr@4
   257
    //destructor	
williamr@4
   258
    ~_Libcpp_wsd();
williamr@4
   259
williamr@4
   260
};
williamr@4
   261
williamr@4
   262
williamr@4
   263
//declaraions for wsd initialization functions
williamr@4
   264
void locale_impl_init();
williamr@4
   265
void locale_index_lock_init();
williamr@4
   266
void monetary_empty_string_init();
williamr@4
   267
void global_iostream_init();
williamr@4
   268
void stdcpp_allocators_init();
williamr@4
   269
void filebuf_page_size_init();
williamr@4
   270
williamr@4
   271
#ifdef _STLP_DEBUG
williamr@4
   272
inline std::string*& get_Nameless();
williamr@4
   273
#endif
williamr@4
   274
williamr@4
   275
namespace _STLP_PRIV_NAME {
williamr@4
   276
void locale_catalog_category_hash_lock_init();
williamr@4
   277
void Category_Map_Init();
williamr@4
   278
_STLP_END_NAMESPACE
williamr@4
   279
williamr@4
   280
williamr@4
   281
const TUid KLibstdcppUID = {0x20017610};
williamr@4
   282
williamr@4
   283
//cleanup all the WSD allocations
williamr@4
   284
IMPORT_C void CleanupWSD();
williamr@4
   285
williamr@4
   286
//return the global class pointer
williamr@4
   287
IMPORT_C _Libcpp_wsd& get_libcpp_wsd();
williamr@4
   288
williamr@4
   289
#ifdef _STLP_DEBUG
williamr@4
   290
inline std::string*& get_Nameless()
williamr@4
   291
	{
williamr@4
   292
	return get_libcpp_wsd()._Nameless;
williamr@4
   293
	}
williamr@4
   294
#endif
williamr@4
   295
williamr@4
   296
williamr@4
   297
// ******************************************************//
williamr@4
   298
williamr@4
   299
//locale wsd functions
williamr@4
   300
#include "wsd_locales.h"
williamr@4
   301
williamr@4
   302
//streams wsd functions
williamr@4
   303
#include "wsd_streams.h"
williamr@4
   304
williamr@4
   305
// ******************************************************//
williamr@4
   306
#endif
williamr@4
   307
williamr@4
   308
#endif /*LIBSTDCPPWSD_H_*/