_STLP_MOVE_TO_PRIV_NAMESPACE static void _Init_monetary_formats(money_base::pattern& pos_format, money_base::pattern& neg_format, _Locale_monetary * monetary) { switch (_Locale_p_sign_posn(monetary)) { case 0: // Parentheses surround the quantity and currency_symbol case 1: // The sign string precedes the quantity and currency_symbol pos_format.field[0] = (char) money_base::sign; if (_Locale_p_cs_precedes(monetary)) { // 1 if currency_symbol precedes a positive value pos_format.field[1] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::value; } else { // a space not separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a positive value pos_format.field[1] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::symbol; } else { // a space not separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::none; } } break; case 2: // The sign string succeeds the quantity and currency_symbol. if (_Locale_p_cs_precedes(monetary)) { // 1 if currency_symbol precedes a positive value pos_format.field[0] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::value; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a positive value pos_format.field[0] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::symbol; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } break; case 3: // The sign string immediately precedes the currency_symbol. if (_Locale_p_cs_precedes(monetary)) { // 1 if currency_symbol precedes a positive value pos_format.field[0] = (char) money_base::sign; pos_format.field[1] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::value; } else { // a space not separates currency_symbol from a positive value. pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a positive value pos_format.field[0] = (char) money_base::value; pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::none; } break; case 4: // The sign string immediately succeeds the currency_symbol. default: if (_Locale_p_cs_precedes(monetary)) { // 1 if currency_symbol precedes a positive value pos_format.field[0] = (char) money_base::symbol; pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } else { // 0 if currency_symbol succeeds a positive value pos_format.field[0] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { // a space separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a positive value. pos_format.field[1] = (char) money_base::symbol; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } break; } switch (_Locale_n_sign_posn(monetary)) { case 0: // Parentheses surround the quantity and currency_symbol case 1: // The sign string precedes the quantity and currency_symbol neg_format.field[0] = (char) money_base::sign; if (_Locale_n_cs_precedes(monetary)) { // 1 if currency_symbol precedes a negative value neg_format.field[1] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::value; } else { // a space not separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a negative value neg_format.field[1] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::symbol; } else { // a space not separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::none; } } break; case 2: // The sign string succeeds the quantity and currency_symbol. if (_Locale_n_cs_precedes(monetary)) { // 1 if currency_symbol precedes a negative value neg_format.field[0] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::value; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a negative value neg_format.field[0] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::symbol; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } break; case 3: // The sign string immediately precedes the currency_symbol. if (_Locale_n_cs_precedes(monetary)) { // 1 if currency_symbol precedes a negative value neg_format.field[0] = (char) money_base::sign; neg_format.field[1] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::value; } else { // a space not separates currency_symbol from a negative value. neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } } else { // 0 if currency_symbol succeeds a negative value neg_format.field[0] = (char) money_base::value; neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::none; } break; case 4: // The sign string immediately succeeds the currency_symbol. default: if (_Locale_n_cs_precedes(monetary)) { // 1 if currency_symbol precedes a negative value neg_format.field[0] = (char) money_base::symbol; neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } else { // 0 if currency_symbol succeeds a negative value neg_format.field[0] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { // a space separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::sign; } else { // a space not separates currency_symbol from a negative value. neg_format.field[1] = (char) money_base::symbol; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } break; } }
static void _Init_monetary_formats_int(money_base::pattern& pos_format, money_base::pattern& neg_format, _Locale_monetary * monetary) { pos_format.field[0] = (char) money_base::symbol; // pos_format.field[1] = (char) money_base::space; switch (_Locale_p_sign_posn(monetary)) { case 0: // Parentheses surround the quantity and currency_symbol case 1: // The sign string precedes the quantity and currency_symbol pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::value; break; case 2: // The sign string succeeds the quantity and currency_symbol. pos_format.field[1] = (char) money_base::value; pos_format.field[2] = (char) money_base::sign; break; case 3: // The sign string immediately precedes the currency_symbol. case 4: // The sign string immediately succeeds the currency_symbol. default: if (_Locale_p_cs_precedes(monetary)) { // 1 if currency_symbol precedes a positive value pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::value; } else { // 0 if currency_symbol succeeds a positive value pos_format.field[1] = (char) money_base::value; pos_format.field[2] = (char) money_base::sign; } break; } pos_format.field[3] = (char) money_base::none; neg_format.field[0] = (char) money_base::symbol; // neg_format.field[1] = (char) money_base::space; switch (_Locale_n_sign_posn(monetary)) { case 0: // Parentheses surround the quantity and currency_symbol case 1: // The sign string precedes the quantity and currency_symbol neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::value; break; case 2: // The sign string succeeds the quantity and currency_symbol. neg_format.field[1] = (char) money_base::value; neg_format.field[2] = (char) money_base::sign; break; case 3: // The sign string immediately precedes the currency_symbol. case 4: // The sign string immediately succeeds the currency_symbol. default: if (_Locale_n_cs_precedes(monetary)) { // 1 if currency_symbol precedes a negative value neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::value; } else { // 0 if currency_symbol succeeds a negative value neg_format.field[1] = (char) money_base::value; neg_format.field[2] = (char) money_base::sign; } break; } neg_format.field[3] = (char) money_base::none; }
_STLP_END_NAMESPACE #include <stl/_monetary.h> // #include <stl/_ostream.h> // #include <stl/_istream.h> #include "c_locale.h" _STLP_BEGIN_NAMESPACE static void _Init_monetary_formats(money_base::pattern& pos_format, money_base::pattern& neg_format, _Locale_monetary * monetary) { switch (_Locale_p_sign_posn(monetary)) { case 0: case 1: pos_format.field[0] = (char) money_base::sign; if (_Locale_p_cs_precedes(monetary)) { pos_format.field[1] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::value; } else { pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } } else { pos_format.field[2] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::symbol; } else { pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::none; } } break; case 2: if (_Locale_p_cs_precedes(monetary)) { pos_format.field[0] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::sign; } else { pos_format.field[1] = (char) money_base::value; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } else { pos_format.field[1] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::sign; } else { pos_format.field[1] = (char) money_base::symbol; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } break; case 3: if (_Locale_p_cs_precedes(monetary)) { pos_format.field[0] = (char) money_base::sign; pos_format.field[1] = (char) money_base::symbol; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[2] = (char) money_base::space; pos_format.field[3] = (char) money_base::value; } else { pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } } else { pos_format.field[0] = (char) money_base::value; pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::none; } break; case 4: default: if (_Locale_p_cs_precedes(monetary)) { pos_format.field[0] = (char) money_base::symbol; pos_format.field[1] = (char) money_base::sign; pos_format.field[2] = (char) money_base::value; pos_format.field[3] = (char) money_base::none; } else { pos_format.field[0] = (char) money_base::value; if (_Locale_p_sep_by_space(monetary)) { pos_format.field[1] = (char) money_base::space; pos_format.field[2] = (char) money_base::symbol; pos_format.field[3] = (char) money_base::sign; } else { pos_format.field[1] = (char) money_base::symbol; pos_format.field[2] = (char) money_base::sign; pos_format.field[3] = (char) money_base::none; } } break; } switch (_Locale_n_sign_posn(monetary)) { case 0: case 1: neg_format.field[0] = (char) money_base::sign; if (_Locale_n_cs_precedes(monetary)) { neg_format.field[1] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::value; } else { neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } } else { neg_format.field[2] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::symbol; } else { neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::none; } } break; case 2: if (_Locale_n_cs_precedes(monetary)) { neg_format.field[0] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::sign; } else { neg_format.field[1] = (char) money_base::value; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } else { neg_format.field[1] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::sign; } else { neg_format.field[1] = (char) money_base::symbol; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } break; case 3: if (_Locale_n_cs_precedes(monetary)) { neg_format.field[0] = (char) money_base::sign; neg_format.field[1] = (char) money_base::symbol; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[2] = (char) money_base::space; neg_format.field[3] = (char) money_base::value; } else { neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } } else { neg_format.field[0] = (char) money_base::value; neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::none; } break; case 4: default: if (_Locale_n_cs_precedes(monetary)) { neg_format.field[0] = (char) money_base::symbol; neg_format.field[1] = (char) money_base::sign; neg_format.field[2] = (char) money_base::value; neg_format.field[3] = (char) money_base::none; } else { neg_format.field[0] = (char) money_base::value; if (_Locale_n_sep_by_space(monetary)) { neg_format.field[1] = (char) money_base::space; neg_format.field[2] = (char) money_base::symbol; neg_format.field[3] = (char) money_base::sign; } else { neg_format.field[1] = (char) money_base::symbol; neg_format.field[2] = (char) money_base::sign; neg_format.field[3] = (char) money_base::none; } } break; } }