; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.51106.1 TITLE E:\????????????????\any\any\any.cpp .686P .XMM include listing.inc .model flat INCLUDELIB OLDNAMES PUBLIC ??_C@_07DCLBNMLN@generic?$AA@ ; `string' PUBLIC ??_C@_0O@BFJCFAAK@unknown?5error?$AA@ ; `string' PUBLIC ??_C@_08LLGCOLLL@iostream?$AA@ ; `string' PUBLIC ??_C@_0BG@PADBLCHM@iostream?5stream?5error?$AA@ ; `string' PUBLIC ??_C@_06FHFOAHML@system?$AA@ ; `string' PUBLIC ??_C@_0BI@CFPLBAOH@invalid?5string?5position?$AA@ ; `string' PUBLIC ??_C@_0BA@JFNIOLAK@string?5too?5long?$AA@ ; `string' PUBLIC ??_C@_0BD@OLBABOEK@vector?$DMT?$DO?5too?5long?$AA@ ; `string' PUBLIC ??_R2_System_error_category@std@@8 ; std::_System_error_category::`RTTI Base Class Array' PUBLIC ??_R2_Iostream_error_category@std@@8 ; std::_Iostream_error_category::`RTTI Base Class Array' PUBLIC ??_R2_Generic_error_category@std@@8 ; std::_Generic_error_category::`RTTI Base Class Array' PUBLIC ??_R2error_category@std@@8 ; std::error_category::`RTTI Base Class Array' PUBLIC ??_R1A@?0A@EA@_System_error_category@std@@8 ; std::_System_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' PUBLIC ??_R1A@?0A@EA@_Iostream_error_category@std@@8 ; std::_Iostream_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' PUBLIC ??_R1A@?0A@EA@_Generic_error_category@std@@8 ; std::_Generic_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' PUBLIC ??_R1A@?0A@EA@error_category@std@@8 ; std::error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' PUBLIC ??_R3_System_error_category@std@@8 ; std::_System_error_category::`RTTI Class Hierarchy Descriptor' PUBLIC ??_R0?AV_System_error_category@std@@@8 ; std::_System_error_category `RTTI Type Descriptor' PUBLIC ??_R3_Iostream_error_category@std@@8 ; std::_Iostream_error_category::`RTTI Class Hierarchy Descriptor' PUBLIC ??_R0?AV_Iostream_error_category@std@@@8 ; std::_Iostream_error_category `RTTI Type Descriptor' PUBLIC ??_R3_Generic_error_category@std@@8 ; std::_Generic_error_category::`RTTI Class Hierarchy Descriptor' PUBLIC ??_R0?AV_Generic_error_category@std@@@8 ; std::_Generic_error_category `RTTI Type Descriptor' PUBLIC ??_R3error_category@std@@8 ; std::error_category::`RTTI Class Hierarchy Descriptor' PUBLIC ??_R0?AVerror_category@std@@@8 ; std::error_category `RTTI Type Descriptor' PUBLIC ??_R4_System_error_category@std@@6B@ ; std::_System_error_category::`RTTI Complete Object Locator' PUBLIC ??_R4_Iostream_error_category@std@@6B@ ; std::_Iostream_error_category::`RTTI Complete Object Locator' PUBLIC ??_R4_Generic_error_category@std@@6B@ ; std::_Generic_error_category::`RTTI Complete Object Locator' PUBLIC ??_R4error_category@std@@6B@ ; std::error_category::`RTTI Complete Object Locator' PUBLIC ??_7_System_error_category@std@@6B@ ; std::_System_error_category::`vftable' PUBLIC ??_7_Iostream_error_category@std@@6B@ ; std::_Iostream_error_category::`vftable' PUBLIC ??_7_Generic_error_category@std@@6B@ ; std::_Generic_error_category::`vftable' PUBLIC ??_7error_category@std@@6B@ ; std::error_category::`vftable' PUBLIC ?value@?$_Sizeof@U_Nil@std@@U12@U12@U12@U12@U12@U12@U12@@std@@2IB ; std::_Sizeof::value PUBLIC ?value@?$integral_constant@_N$00@std@@2_NB ; std::integral_constant::value PUBLIC ?value@?$integral_constant@_N$0A@@std@@2_NB ; std::integral_constant::value EXTRN __imp_?_Orphan_all@_Container_base0@std@@QAEXXZ:PROC EXTRN __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z:PROC EXTRN __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z:PROC EXTRN __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z:PROC EXTRN __imp___purecall:PROC EXTRN __imp_?_Xbad_alloc@std@@YAXXZ:PROC EXTRN _atexit:PROC EXTRN __imp_?_Xlength_error@std@@YAXPBD@Z:PROC EXTRN __imp_?_Xout_of_range@std@@YAXPBD@Z:PROC EXTRN __imp__getchar:PROC EXTRN __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A:BYTE EXTRN __imp__clock:PROC EXTRN __imp_?_Winerror_map@std@@YAPBDH@Z:PROC EXTRN __imp_?_Syserror_map@std@@YAPBDH@Z:PROC EXTRN __imp_??2@YAPAXI@Z:PROC EXTRN ??_7type_info@@6B@:QWORD ; type_info::`vftable' EXTRN __imp__memmove:PROC EXTRN __imp_??3@YAXPAX@Z:PROC EXTRN @__security_check_cookie@4:PROC EXTRN __purecall:PROC ; COMDAT ?value@?$integral_constant@_N$0A@@std@@2_NB CONST SEGMENT ?value@?$integral_constant@_N$0A@@std@@2_NB DB 00H ; std::integral_constant::value CONST ENDS ; COMDAT ?value@?$integral_constant@_N$00@std@@2_NB CONST SEGMENT ?value@?$integral_constant@_N$00@std@@2_NB DB 01H ; std::integral_constant::value CONST ENDS ; COMDAT ?value@?$_Sizeof@U_Nil@std@@U12@U12@U12@U12@U12@U12@U12@@std@@2IB CONST SEGMENT ?value@?$_Sizeof@U_Nil@std@@U12@U12@U12@U12@U12@U12@U12@@std@@2IB DD 00H ; std::_Sizeof::value CONST ENDS ; COMDAT ??_7error_category@std@@6B@ CONST SEGMENT ??_7error_category@std@@6B@ DD FLAT:??_R4error_category@std@@6B@ ; std::error_category::`vftable' DD FLAT:??_Eerror_category@std@@UAEPAXI@Z DD FLAT:__purecall DD FLAT:__purecall DD FLAT:?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z CONST ENDS ; COMDAT ??_7_Generic_error_category@std@@6B@ CONST SEGMENT ??_7_Generic_error_category@std@@6B@ DD FLAT:??_R4_Generic_error_category@std@@6B@ ; std::_Generic_error_category::`vftable' DD FLAT:??_E_Generic_error_category@std@@UAEPAXI@Z DD FLAT:?name@_Generic_error_category@std@@UBEPBDXZ DD FLAT:?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z DD FLAT:?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z CONST ENDS ; COMDAT ??_7_Iostream_error_category@std@@6B@ CONST SEGMENT ??_7_Iostream_error_category@std@@6B@ DD FLAT:??_R4_Iostream_error_category@std@@6B@ ; std::_Iostream_error_category::`vftable' DD FLAT:??_E_Iostream_error_category@std@@UAEPAXI@Z DD FLAT:?name@_Iostream_error_category@std@@UBEPBDXZ DD FLAT:?message@_Iostream_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z DD FLAT:?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z CONST ENDS ; COMDAT ??_7_System_error_category@std@@6B@ CONST SEGMENT ??_7_System_error_category@std@@6B@ DD FLAT:??_R4_System_error_category@std@@6B@ ; std::_System_error_category::`vftable' DD FLAT:??_E_System_error_category@std@@UAEPAXI@Z DD FLAT:?name@_System_error_category@std@@UBEPBDXZ DD FLAT:?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z DD FLAT:?default_error_condition@_System_error_category@std@@UBE?AVerror_condition@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z DD FLAT:?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z CONST ENDS ; COMDAT ??_R4error_category@std@@6B@ rdata$r SEGMENT ??_R4error_category@std@@6B@ DD 00H ; std::error_category::`RTTI Complete Object Locator' DD 00H DD 00H DD FLAT:??_R0?AVerror_category@std@@@8 DD FLAT:??_R3error_category@std@@8 rdata$r ENDS ; COMDAT ??_R4_Generic_error_category@std@@6B@ rdata$r SEGMENT ??_R4_Generic_error_category@std@@6B@ DD 00H ; std::_Generic_error_category::`RTTI Complete Object Locator' DD 00H DD 00H DD FLAT:??_R0?AV_Generic_error_category@std@@@8 DD FLAT:??_R3_Generic_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R4_Iostream_error_category@std@@6B@ rdata$r SEGMENT ??_R4_Iostream_error_category@std@@6B@ DD 00H ; std::_Iostream_error_category::`RTTI Complete Object Locator' DD 00H DD 00H DD FLAT:??_R0?AV_Iostream_error_category@std@@@8 DD FLAT:??_R3_Iostream_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R4_System_error_category@std@@6B@ rdata$r SEGMENT ??_R4_System_error_category@std@@6B@ DD 00H ; std::_System_error_category::`RTTI Complete Object Locator' DD 00H DD 00H DD FLAT:??_R0?AV_System_error_category@std@@@8 DD FLAT:??_R3_System_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R0?AVerror_category@std@@@8 _DATA SEGMENT ??_R0?AVerror_category@std@@@8 DD FLAT:??_7type_info@@6B@ ; std::error_category `RTTI Type Descriptor' DD 00H DB '.?AVerror_category@std@@', 00H _DATA ENDS ; COMDAT ??_R3error_category@std@@8 rdata$r SEGMENT ??_R3error_category@std@@8 DD 00H ; std::error_category::`RTTI Class Hierarchy Descriptor' DD 00H DD 01H DD FLAT:??_R2error_category@std@@8 rdata$r ENDS ; COMDAT ??_R0?AV_Generic_error_category@std@@@8 _DATA SEGMENT ??_R0?AV_Generic_error_category@std@@@8 DD FLAT:??_7type_info@@6B@ ; std::_Generic_error_category `RTTI Type Descriptor' DD 00H DB '.?AV_Generic_error_category@std@@', 00H _DATA ENDS ; COMDAT ??_R3_Generic_error_category@std@@8 rdata$r SEGMENT ??_R3_Generic_error_category@std@@8 DD 00H ; std::_Generic_error_category::`RTTI Class Hierarchy Descriptor' DD 00H DD 02H DD FLAT:??_R2_Generic_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R0?AV_Iostream_error_category@std@@@8 _DATA SEGMENT ??_R0?AV_Iostream_error_category@std@@@8 DD FLAT:??_7type_info@@6B@ ; std::_Iostream_error_category `RTTI Type Descriptor' DD 00H DB '.?AV_Iostream_error_category@std@@', 00H _DATA ENDS ; COMDAT ??_R3_Iostream_error_category@std@@8 rdata$r SEGMENT ??_R3_Iostream_error_category@std@@8 DD 00H ; std::_Iostream_error_category::`RTTI Class Hierarchy Descriptor' DD 00H DD 03H DD FLAT:??_R2_Iostream_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R0?AV_System_error_category@std@@@8 _DATA SEGMENT ??_R0?AV_System_error_category@std@@@8 DD FLAT:??_7type_info@@6B@ ; std::_System_error_category `RTTI Type Descriptor' DD 00H DB '.?AV_System_error_category@std@@', 00H _DATA ENDS ; COMDAT ??_R3_System_error_category@std@@8 rdata$r SEGMENT ??_R3_System_error_category@std@@8 DD 00H ; std::_System_error_category::`RTTI Class Hierarchy Descriptor' DD 00H DD 03H DD FLAT:??_R2_System_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R1A@?0A@EA@error_category@std@@8 rdata$r SEGMENT ??_R1A@?0A@EA@error_category@std@@8 DD FLAT:??_R0?AVerror_category@std@@@8 ; std::error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' DD 00H DD 00H DD 0ffffffffH DD 00H DD 040H DD FLAT:??_R3error_category@std@@8 rdata$r ENDS ; COMDAT ??_R1A@?0A@EA@_Generic_error_category@std@@8 rdata$r SEGMENT ??_R1A@?0A@EA@_Generic_error_category@std@@8 DD FLAT:??_R0?AV_Generic_error_category@std@@@8 ; std::_Generic_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' DD 01H DD 00H DD 0ffffffffH DD 00H DD 040H DD FLAT:??_R3_Generic_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R1A@?0A@EA@_Iostream_error_category@std@@8 rdata$r SEGMENT ??_R1A@?0A@EA@_Iostream_error_category@std@@8 DD FLAT:??_R0?AV_Iostream_error_category@std@@@8 ; std::_Iostream_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' DD 02H DD 00H DD 0ffffffffH DD 00H DD 040H DD FLAT:??_R3_Iostream_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R1A@?0A@EA@_System_error_category@std@@8 rdata$r SEGMENT ??_R1A@?0A@EA@_System_error_category@std@@8 DD FLAT:??_R0?AV_System_error_category@std@@@8 ; std::_System_error_category::`RTTI Base Class Descriptor at (0,-1,0,64)' DD 02H DD 00H DD 0ffffffffH DD 00H DD 040H DD FLAT:??_R3_System_error_category@std@@8 rdata$r ENDS ; COMDAT ??_R2error_category@std@@8 rdata$r SEGMENT ??_R2error_category@std@@8 DD FLAT:??_R1A@?0A@EA@error_category@std@@8 ; std::error_category::`RTTI Base Class Array' rdata$r ENDS ; COMDAT ??_R2_Generic_error_category@std@@8 rdata$r SEGMENT ??_R2_Generic_error_category@std@@8 DD FLAT:??_R1A@?0A@EA@_Generic_error_category@std@@8 ; std::_Generic_error_category::`RTTI Base Class Array' DD FLAT:??_R1A@?0A@EA@error_category@std@@8 rdata$r ENDS ; COMDAT ??_R2_Iostream_error_category@std@@8 rdata$r SEGMENT ??_R2_Iostream_error_category@std@@8 DD FLAT:??_R1A@?0A@EA@_Iostream_error_category@std@@8 ; std::_Iostream_error_category::`RTTI Base Class Array' DD FLAT:??_R1A@?0A@EA@_Generic_error_category@std@@8 DD FLAT:??_R1A@?0A@EA@error_category@std@@8 rdata$r ENDS ; COMDAT ??_R2_System_error_category@std@@8 rdata$r SEGMENT ??_R2_System_error_category@std@@8 DD FLAT:??_R1A@?0A@EA@_System_error_category@std@@8 ; std::_System_error_category::`RTTI Base Class Array' DD FLAT:??_R1A@?0A@EA@_Generic_error_category@std@@8 DD FLAT:??_R1A@?0A@EA@error_category@std@@8 rdata$r ENDS ; COMDAT ??_C@_0BD@OLBABOEK@vector?$DMT?$DO?5too?5long?$AA@ CONST SEGMENT ??_C@_0BD@OLBABOEK@vector?$DMT?$DO?5too?5long?$AA@ DB 'vector too long' DB 00H ; `string' CONST ENDS ; COMDAT ??_C@_0BA@JFNIOLAK@string?5too?5long?$AA@ CONST SEGMENT ??_C@_0BA@JFNIOLAK@string?5too?5long?$AA@ DB 'string too long', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0BI@CFPLBAOH@invalid?5string?5position?$AA@ CONST SEGMENT ??_C@_0BI@CFPLBAOH@invalid?5string?5position?$AA@ DB 'invalid string posi' DB 'tion', 00H ; `string' CONST ENDS ; COMDAT ??_C@_06FHFOAHML@system?$AA@ CONST SEGMENT ??_C@_06FHFOAHML@system?$AA@ DB 'system', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0BG@PADBLCHM@iostream?5stream?5error?$AA@ CONST SEGMENT ??_C@_0BG@PADBLCHM@iostream?5stream?5error?$AA@ DB 'iostream stream error' DB 00H ; `string' CONST ENDS ; COMDAT ??_C@_08LLGCOLLL@iostream?$AA@ CONST SEGMENT ??_C@_08LLGCOLLL@iostream?$AA@ DB 'iostream', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0O@BFJCFAAK@unknown?5error?$AA@ CONST SEGMENT ??_C@_0O@BFJCFAAK@unknown?5error?$AA@ DB 'unknown error', 00H ; `string' CONST ENDS ; COMDAT ??_C@_07DCLBNMLN@generic?$AA@ CONST SEGMENT ??_C@_07DCLBNMLN@generic?$AA@ DB 'generic', 00H ; `string' CONST ENDS PUBLIC ??$_Uninit_move@NNN@std@@YAPANPAN00AAU?$_Wrap_alloc@V?$allocator@N@std@@@0@0U_Scalar_ptr_iterator_tag@0@@Z ; std::_Uninit_move PUBLIC ??$_Fill_n@PANIN@std@@YAPANPANIABN@Z ; std::_Fill_n PUBLIC ??$destroy@PAD@?$allocator@D@std@@QAEXPAPAD@Z ; std::allocator::destroy PUBLIC ??$construct@PADAAPAD@?$allocator@D@std@@QAEXPAPADAAPAD@Z ; std::allocator::construct PUBLIC ??$_Uninitialized_move@PANPANU?$_Wrap_alloc@V?$allocator@N@std@@@std@@@std@@YAPANPAN00AAU?$_Wrap_alloc@V?$allocator@N@std@@@0@@Z ; std::_Uninitialized_move > > PUBLIC ??$_Destroy_range@U?$_Wrap_alloc@V?$allocator@N@std@@@std@@@std@@YAXPAN0AAU?$_Wrap_alloc@V?$allocator@N@std@@@0@U_Scalar_ptr_iterator_tag@0@@Z ; std::_Destroy_range > > PUBLIC ??$_Move@PANPAN@std@@YAPANPAN00U_Scalar_ptr_iterator_tag@0@@Z ; std::_Move PUBLIC ??$_Destroy_range@U?$_Wrap_alloc@V?$allocator@H@std@@@std@@@std@@YAXPAH0AAU?$_Wrap_alloc@V?$allocator@H@std@@@0@U_Scalar_ptr_iterator_tag@0@@Z ; std::_Destroy_range > > PUBLIC ??$_Ptr_cat@HH@std@@YA?AU_Scalar_ptr_iterator_tag@0@PAH0@Z ; std::_Ptr_cat PUBLIC ??$_Uninit_def_fill_n@NIN@std@@YAXPANIAAU?$_Wrap_alloc@V?$allocator@N@std@@@0@0U_Scalar_ptr_iterator_tag@0@@Z ; std::_Uninit_def_fill_n PUBLIC ??$_Ptr_cat@NN@std@@YA?AU_Scalar_ptr_iterator_tag@0@PAN0@Z ; std::_Ptr_cat PUBLIC ??$_Val_type@PAN@std@@YAPANPAN@Z ; std::_Val_type PUBLIC ??$destroy@PAD@?$allocator_traits@V?$allocator@D@std@@@std@@SAXAAV?$allocator@D@1@PAPAD@Z ; std::allocator_traits >::destroy PUBLIC ??$construct@PADAAPAD@?$allocator_traits@V?$allocator@D@std@@@std@@SAXAAV?$allocator@D@1@PAPADAAPAD@Z ; std::allocator_traits >::construct PUBLIC ??$forward@AAPAD@std@@YAAAPADAAPAD@Z ; std::forward PUBLIC ??$_Allocate@D@std@@YAPADIPAD@Z ; std::_Allocate PUBLIC ??$_Allocate@N@std@@YAPANIPAN@Z ; std::_Allocate PUBLIC ??$_Umove@PAN@?$vector@NV?$allocator@N@std@@@std@@IAEPANPAN00@Z ; std::vector >::_Umove PUBLIC ??$_Destroy_range@U?$_Wrap_alloc@V?$allocator@N@std@@@std@@@std@@YAXPAN0AAU?$_Wrap_alloc@V?$allocator@N@std@@@0@@Z ; std::_Destroy_range > > PUBLIC ??$_Move@PANPAN@std@@YAPANPAN00@Z ; std::_Move PUBLIC ??$_Destroy_range@U?$_Wrap_alloc@V?$allocator@H@std@@@std@@@std@@YAXPAH0AAU?$_Wrap_alloc@V?$allocator@H@std@@@0@@Z ; std::_Destroy_range > > PUBLIC ??$_Uninitialized_default_fill_n@PANIU?$_Wrap_alloc@V?$allocator@N@std@@@std@@@std@@YAXPANIAAU?$_Wrap_alloc@V?$allocator@N@std@@@0@@Z ; std::_Uninitialized_default_fill_n > > PUBLIC ??$addressof@D@std@@YAPADAAD@Z ; std::addressof PUBLIC ??$destroy@PAD@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QAEXPAPAD@Z ; std::_Wrap_alloc >::destroy PUBLIC ??$construct@PADAAPAD@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QAEXPAPADAAPAD@Z ; std::_Wrap_alloc >::construct PUBLIC ?max_size@?$allocator@D@std@@QBEIXZ ; std::allocator::max_size PUBLIC ?max_size@?$allocator@N@std@@QBEIXZ ; std::allocator::max_size PUBLIC ?max_size@?$allocator_traits@V?$allocator@D@std@@@std@@SAIABV?$allocator@D@2@@Z ; std::allocator_traits >::max_size PUBLIC ?allocate@?$allocator@D@std@@QAEPADI@Z ; std::allocator::allocate PUBLIC ?max_size@?$allocator_traits@V?$allocator@N@std@@@std@@SAIABV?$allocator@N@2@@Z ; std::allocator_traits >::max_size PUBLIC ?allocate@?$allocator@N@std@@QAEPANI@Z ; std::allocator::allocate PUBLIC ?max_size@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QBEIXZ ; std::_Wrap_alloc >::max_size PUBLIC ?allocate@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QAEPADI@Z ; std::_Wrap_alloc >::allocate PUBLIC ?_Compat@?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QBEXABV12@@Z ; std::_Vector_const_iterator > >::_Compat PUBLIC ??Y?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QAEAAV01@H@Z ; std::_Vector_const_iterator > >::operator+= PUBLIC ??0?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QAE@PANPBU_Container_base0@1@@Z ; std::_Vector_const_iterator > >::_Vector_const_iterator > > PUBLIC ?max_size@?$_Wrap_alloc@V?$allocator@N@std@@@std@@QBEIXZ ; std::_Wrap_alloc >::max_size PUBLIC ?allocate@?$_Wrap_alloc@V?$allocator@N@std@@@std@@QAEPANI@Z ; std::_Wrap_alloc >::allocate PUBLIC ?capacity@?$vector@NV?$allocator@N@std@@@std@@QBEIXZ ; std::vector >::capacity PUBLIC ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z ; std::basic_string,std::allocator >::_Copy PUBLIC ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ ; std::basic_string,std::allocator >::max_size PUBLIC ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z ; std::basic_string,std::allocator >::erase PUBLIC ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@I@Z ; std::basic_string,std::allocator >::erase PUBLIC ??9?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QBE_NABV01@@Z ; std::_Vector_const_iterator > >::operator!= PUBLIC ??8?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QBE_NABV01@@Z ; std::_Vector_const_iterator > >::operator== PUBLIC ??Y?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QAEAAV01@H@Z ; std::_Vector_iterator > >::operator+= PUBLIC ??0?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QAE@PANPBU_Container_base0@1@@Z ; std::_Vector_iterator > >::_Vector_iterator > > PUBLIC ??0?$_Wrap_alloc@V?$allocator@N@std@@@std@@QAE@XZ ; std::_Wrap_alloc >::_Wrap_alloc > PUBLIC ?deallocate@?$allocator@N@std@@QAEXPANI@Z ; std::allocator::deallocate PUBLIC ?_Xlen@?$vector@NV?$allocator@N@std@@@std@@IBEXXZ ; std::vector >::_Xlen PUBLIC ?_Reallocate@?$vector@NV?$allocator@N@std@@@std@@IAEXI@Z ; std::vector >::_Reallocate PUBLIC ?_Grow_to@?$vector@NV?$allocator@N@std@@@std@@IBEII@Z ; std::vector >::_Grow_to PUBLIC ?clear@?$vector@NV?$allocator@N@std@@@std@@QAEXXZ ; std::vector >::clear PUBLIC ?max_size@?$vector@NV?$allocator@N@std@@@std@@QBEIXZ ; std::vector >::max_size PUBLIC ?_Make_iter@?$vector@NV?$allocator@N@std@@@std@@QBE?AV?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@V?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@@Z ; std::vector >::_Make_iter PUBLIC ?_Unused_capacity@?$vector@NV?$allocator@N@std@@@std@@QBEIXZ ; std::vector >::_Unused_capacity PUBLIC ??0?$_Wrap_alloc@V?$allocator@H@std@@@std@@QAE@XZ ; std::_Wrap_alloc >::_Wrap_alloc > PUBLIC ?deallocate@?$allocator@H@std@@QAEXPAHI@Z ; std::allocator::deallocate PUBLIC ?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QAEPADXZ ; std::_String_val >::_Myptr PUBLIC ?deallocate@?$allocator@D@std@@QAEXPADI@Z ; std::allocator::deallocate PUBLIC ?_Xlen@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEXXZ ; std::basic_string,std::allocator >::_Xlen PUBLIC ?_Inside@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE_NPBD@Z ; std::basic_string,std::allocator >::_Inside PUBLIC ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE_NI_N@Z ; std::basic_string,std::allocator >::_Grow PUBLIC ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z ; std::basic_string,std::allocator >::assign PUBLIC ??H?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@std@@QBE?AV01@H@Z ; std::_Vector_iterator > >::operator+ PUBLIC ??0?$_Vector_val@U?$_Simple_types@N@std@@@std@@QAE@XZ ; std::_Vector_val >::_Vector_val > PUBLIC ?deallocate@?$_Wrap_alloc@V?$allocator@N@std@@@std@@QAEXPANI@Z ; std::_Wrap_alloc >::deallocate PUBLIC ?_Getal@?$_Vector_alloc@$0A@U?$_Vec_base_types@NV?$allocator@N@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@N@std@@@2@XZ ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Getal PUBLIC ?_Reserve@?$vector@NV?$allocator@N@std@@@std@@IAEXI@Z ; std::vector >::_Reserve PUBLIC ?_Destroy@?$vector@NV?$allocator@N@std@@@std@@IAEXPAN0@Z ; std::vector >::_Destroy PUBLIC ?erase@?$vector@NV?$allocator@N@std@@@std@@QAE?AV?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@V?$_Vector_const_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@0@Z ; std::vector >::erase PUBLIC ?size@?$vector@NV?$allocator@N@std@@@std@@QBEIXZ ; std::vector >::size PUBLIC ?end@?$vector@NV?$allocator@N@std@@@std@@QAE?AV?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@XZ ; std::vector >::end PUBLIC ?begin@?$vector@NV?$allocator@N@std@@@std@@QAE?AV?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@N@std@@@std@@@2@XZ ; std::vector >::begin PUBLIC ??0?$_Vector_val@U?$_Simple_types@H@std@@@std@@QAE@XZ ; std::_Vector_val >::_Vector_val > PUBLIC ?deallocate@?$_Wrap_alloc@V?$allocator@H@std@@@std@@QAEXPAHI@Z ; std::_Wrap_alloc >::deallocate PUBLIC ?_Getal@?$_Vector_alloc@$0A@U?$_Vec_base_types@HV?$allocator@H@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@H@std@@@2@XZ ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Getal PUBLIC ?_Destroy@?$vector@HV?$allocator@H@std@@@std@@IAEXPAH0@Z ; std::vector >::_Destroy PUBLIC ??0?$_String_val@U?$_Simple_types@D@std@@@std@@QAE@XZ ; std::_String_val >::_String_val > PUBLIC ?deallocate@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QAEXPADI@Z ; std::_Wrap_alloc >::deallocate PUBLIC ??0?$_Wrap_alloc@V?$allocator@D@std@@@std@@QAE@XZ ; std::_Wrap_alloc >::_Wrap_alloc > PUBLIC ?_Xran@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEXXZ ; std::basic_string,std::allocator >::_Xran PUBLIC ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z ; std::basic_string,std::allocator >::_Eos PUBLIC ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign PUBLIC ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@NV?$allocator@N@std@@@std@@@std@@QAE@ABV?$allocator@N@1@@Z ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > > PUBLIC ??0?$allocator@N@std@@QAE@XZ ; std::allocator::allocator PUBLIC ?_Tidy@?$vector@NV?$allocator@N@std@@@std@@IAEXXZ ; std::vector >::_Tidy PUBLIC ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z ; std::vector >::resize PUBLIC ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@HV?$allocator@H@std@@@std@@@std@@QAE@ABV?$allocator@H@1@@Z ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > > PUBLIC ??0?$allocator@H@std@@QAE@XZ ; std::allocator::allocator PUBLIC ?_Tidy@?$vector@HV?$allocator@H@std@@@std@@IAEXXZ ; std::vector >::_Tidy PUBLIC ?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QBEPBDXZ ; std::_String_val >::_Myptr PUBLIC ?_Getal@?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@D@std@@@2@XZ ; std::_String_alloc<0,std::_String_base_types > >::_Getal PUBLIC ??0?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QAE@ABV?$allocator@D@1@@Z ; std::_String_alloc<0,std::_String_base_types > >::_String_alloc<0,std::_String_base_types > > PUBLIC ??0?$allocator@D@std@@QAE@XZ ; std::allocator::allocator PUBLIC ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEX_NI@Z ; std::basic_string,std::allocator >::_Tidy PUBLIC ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ ; std::basic_string,std::allocator >::size PUBLIC ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z ; std::basic_string,std::allocator >::assign PUBLIC ??A?$vector@NV?$allocator@N@std@@@std@@QAEAANI@Z ; std::vector >::operator[] PUBLIC ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ ; std::vector >::~vector > PUBLIC ??0?$vector@NV?$allocator@N@std@@@std@@QAE@I@Z ; std::vector >::vector > PUBLIC ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ; std::vector >::~vector > PUBLIC ??0?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ; std::vector >::vector > PUBLIC ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string,std::allocator >::~basic_string,std::allocator > PUBLIC ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ; std::basic_string,std::allocator >::basic_string,std::allocator > PUBLIC _main PUBLIC ?system_category@std@@YAABVerror_category@1@XZ ; std::system_category PUBLIC ?generic_category@std@@YAABVerror_category@1@XZ ; std::generic_category PUBLIC ??1_System_error_category@std@@UAE@XZ ; std::_System_error_category::~_System_error_category PUBLIC ??_G_System_error_category@std@@UAEPAXI@Z ; std::_System_error_category::`scalar deleting destructor' PUBLIC ?default_error_condition@_System_error_category@std@@UBE?AVerror_condition@2@H@Z ; std::_System_error_category::default_error_condition PUBLIC ?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ; std::_System_error_category::message PUBLIC ?name@_System_error_category@std@@UBEPBDXZ ; std::_System_error_category::name PUBLIC ??0_System_error_category@std@@QAE@XZ ; std::_System_error_category::_System_error_category PUBLIC ??1_Iostream_error_category@std@@UAE@XZ ; std::_Iostream_error_category::~_Iostream_error_category PUBLIC ??_G_Iostream_error_category@std@@UAEPAXI@Z ; std::_Iostream_error_category::`scalar deleting destructor' PUBLIC ?message@_Iostream_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ; std::_Iostream_error_category::message PUBLIC ?name@_Iostream_error_category@std@@UBEPBDXZ ; std::_Iostream_error_category::name PUBLIC ??0_Iostream_error_category@std@@QAE@XZ ; std::_Iostream_error_category::_Iostream_error_category PUBLIC ??1_Generic_error_category@std@@UAE@XZ ; std::_Generic_error_category::~_Generic_error_category PUBLIC ??_G_Generic_error_category@std@@UAEPAXI@Z ; std::_Generic_error_category::`scalar deleting destructor' PUBLIC ?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ; std::_Generic_error_category::message PUBLIC ?name@_Generic_error_category@std@@UBEPBDXZ ; std::_Generic_error_category::name PUBLIC ??0_Generic_error_category@std@@QAE@XZ ; std::_Generic_error_category::_Generic_error_category PUBLIC ?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z ; std::error_category::equivalent PUBLIC ?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z ; std::error_category::equivalent PUBLIC ?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z ; std::error_category::default_error_condition PUBLIC ??8error_condition@std@@QBE_NABV01@@Z ; std::error_condition::operator== PUBLIC ?category@error_condition@std@@QBEABVerror_category@2@XZ ; std::error_condition::category PUBLIC ?value@error_condition@std@@QBEHXZ ; std::error_condition::value PUBLIC ??0error_condition@std@@QAE@HABVerror_category@1@@Z ; std::error_condition::error_condition PUBLIC ?category@error_code@std@@QBEABVerror_category@2@XZ ; std::error_code::category PUBLIC ?value@error_code@std@@QBEHXZ ; std::error_code::value PUBLIC ??_Gerror_category@std@@UAEPAXI@Z ; std::error_category::`scalar deleting destructor' PUBLIC ??8error_category@std@@QBE_NABV01@@Z ; std::error_category::operator== PUBLIC ??1error_category@std@@UAE@XZ ; std::error_category::~error_category PUBLIC ??0error_category@std@@QAE@XZ ; std::error_category::error_category PUBLIC ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z ; std::_Iterator_base0::_Adopt PUBLIC ?assign@?$char_traits@D@std@@SAXAADABD@Z ; std::char_traits::assign PUBLIC ?move@?$char_traits@D@std@@SAPADPADPBDI@Z ; std::char_traits::move PUBLIC ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z ; std::char_traits::copy PUBLIC ?length@?$char_traits@D@std@@SAIPBD@Z ; std::char_traits::length PUBLIC ??3@YAXPAX0@Z ; operator delete PUBLIC ??2@YAPAXIPAX@Z ; operator new PUBLIC ?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A ; std::_Error_objects::_Generic_object PUBLIC ?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A ; std::_Error_objects::_Iostream_object PUBLIC ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A ; std::_Error_objects::_System_object PUBLIC __real@3ff0000000000000 EXTRN ??_Eerror_category@std@@UAEPAXI@Z:PROC ; std::error_category::`vector deleting destructor' EXTRN ??_E_Generic_error_category@std@@UAEPAXI@Z:PROC ; std::_Generic_error_category::`vector deleting destructor' EXTRN ??_E_Iostream_error_category@std@@UAEPAXI@Z:PROC ; std::_Iostream_error_category::`vector deleting destructor' EXTRN ??_E_System_error_category@std@@UAEPAXI@Z:PROC ; std::_System_error_category::`vector deleting destructor' EXTRN __CxxThrowException@8:PROC EXTRN ___CxxFrameHandler3:PROC EXTRN __vcomp_barrier:PROC EXTRN __vcomp_for_static_end:PROC EXTRN __vcomp_for_static_simple_init:PROC EXTRN __vcomp_fork:PROC EXTRN __vcomp_set_num_threads:PROC EXTRN _memcpy:PROC EXTRN __You_must_link_with_Microsoft_OpenMP_library:DWORD EXTRN ___security_cookie:DWORD EXTRN __fltused:DWORD _piecewise_construct DB 01H DUP (?) _allocator_arg DB 01H DUP (?) _BSS ENDS ; COMDAT CRT$XCU CRT$XCU SEGMENT ?_Generic_object$initializer$@?$_Error_objects@H@std@@2P6AXXZA DD FLAT:??__E?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A@@YAXXZ ; std::_Error_objects::_Generic_object$initializer$ CRT$XCU ENDS ; COMDAT __real@3ff0000000000000 CONST SEGMENT __real@3ff0000000000000 DQ 03ff0000000000000r ; 1 CONST ENDS ; COMDAT ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A _DATA SEGMENT ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A DD FLAT:??_7_System_error_category@std@@6B@ ; std::_Error_objects::_System_object _DATA ENDS ; COMDAT ?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A _DATA SEGMENT ?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A DD FLAT:??_7_Iostream_error_category@std@@6B@ ; std::_Error_objects::_Iostream_object _DATA ENDS ; COMDAT ?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A _DATA SEGMENT ?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A DD FLAT:??_7_Generic_error_category@std@@6B@ ; std::_Error_objects::_Generic_object _DATA ENDS ; COMDAT xdata$x xdata$x SEGMENT __ehfuncinfo$_main DD 019930522H DD 04H DD FLAT:__unwindtable$_main DD 2 DUP(00H) DD 2 DUP(00H) DD 00H DD 01H __unwindtable$_main DD 0ffffffffH DD FLAT:__unwindfunclet$_main$0 DD 00H DD FLAT:__unwindfunclet$_main$1 DD 01H DD FLAT:__unwindfunclet$_main$2 DD 02H DD FLAT:__unwindfunclet$_main$3 xdata$x ENDS ; COMDAT xdata$x xdata$x SEGMENT __ehfuncinfo$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z DD 019930522H DD 04H DD FLAT:__unwindtable$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z DD 02H DD FLAT:__tryblocktable$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z DD 2 DUP(00H) DD 00H DD 01H __unwindtable$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z DD 0ffffffffH DD 00H DD 0ffffffffH DD 00H DD 01H DD 00H DD 01H DD 00H __tryblocktable$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z DD 02H DD 02H DD 03H DD 01H DD FLAT:__catchsym$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$4 DD 00H DD 00H DD 03H DD 01H DD FLAT:__catchsym$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$5 __catchsym$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$4 DD 040H DD 00H DD 00H DD FLAT:__catch$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$1 __catchsym$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$5 DD 040H DD 00H DD 00H DD FLAT:__catch$?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z$0 xdata$x ENDS ; COMDAT CRT$XCU CRT$XCU SEGMENT ?_Iostream_object$initializer$@?$_Error_objects@H@std@@2P6AXXZA DD FLAT:??__E?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A@@YAXXZ ; std::_Error_objects::_Iostream_object$initializer$ CRT$XCU ENDS ; COMDAT CRT$XCU CRT$XCU SEGMENT ?_System_object$initializer$@?$_Error_objects@H@std@@2P6AXXZA DD FLAT:??__E?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A@@YAXXZ ; std::_Error_objects::_System_object$initializer$ CRT$XCU ENDS ; Function compile flags: /Ogtp ; File e:\программирование\any\any\any.cpp ; COMDAT _main$omp$1 _TEXT SEGMENT _temp$1$ = -16 ; size = 8 $T1 = -8 ; size = 4 $T2 = -4 ; size = 4 _vec1$ = 8 ; size = 4 _main$omp$1 PROC ; COMDAT push ebp mov ebp, esp sub esp, 16 ; 00000010H push esi ; 165 : for( i = 0; i::length, COMDAT ; __First$ = ecx ; 522 : return (*_First == 0 ? 0 ; 523 : : _CSTD strlen(_First)); cmp BYTE PTR [ecx], 0 jne SHORT $LN3@length xor eax, eax ; 524 : } ret 0 $LN3@length: ; 522 : return (*_First == 0 ? 0 ; 523 : : _CSTD strlen(_First)); lea edx, DWORD PTR [ecx+1] npad 5 $LL5@length: mov al, BYTE PTR [ecx] inc ecx test al, al jne SHORT $LL5@length sub ecx, edx mov eax, ecx ; 524 : } ret 0 ?length@?$char_traits@D@std@@SAIPBD@Z ENDP ; std::char_traits::length _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; COMDAT ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z _TEXT SEGMENT __Count$ = 8 ; size = 4 ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z PROC ; std::char_traits::copy, COMDAT ; __First1$ = ecx ; __First2$ = edx ; 528 : { // copy [_First2, _First2 + _Count) to [_First1, ...) push ebp mov ebp, esp ; 529 : return (_Count == 0 ? _First1 ; 530 : : (_Elem *)_CSTD memcpy(_First1, _First2, _Count)); mov eax, DWORD PTR __Count$[ebp] test eax, eax jne SHORT $LN3@copy mov eax, ecx ; 531 : } pop ebp ret 0 $LN3@copy: ; 529 : return (_Count == 0 ? _First1 ; 530 : : (_Elem *)_CSTD memcpy(_First1, _First2, _Count)); push eax push edx push ecx call _memcpy add esp, 12 ; 0000000cH ; 531 : } pop ebp ret 0 ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z ENDP ; std::char_traits::copy _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; COMDAT ?move@?$char_traits@D@std@@SAPADPADPBDI@Z _TEXT SEGMENT __Count$ = 8 ; size = 4 ?move@?$char_traits@D@std@@SAPADPADPBDI@Z PROC ; std::char_traits::move, COMDAT ; __First1$ = ecx ; __First2$ = edx ; 551 : { // copy [_First2, _First2 + _Count) to [_First1, ...) push ebp mov ebp, esp ; 552 : return (_Count == 0 ? _First1 ; 553 : : (_Elem *)_CSTD memmove(_First1, _First2, _Count)); mov eax, DWORD PTR __Count$[ebp] test eax, eax jne SHORT $LN3@move mov eax, ecx ; 554 : } pop ebp ret 0 $LN3@move: ; 552 : return (_Count == 0 ? _First1 ; 553 : : (_Elem *)_CSTD memmove(_First1, _First2, _Count)); push eax push edx push ecx call DWORD PTR __imp__memmove add esp, 12 ; 0000000cH ; 554 : } pop ebp ret 0 ?move@?$char_traits@D@std@@SAPADPADPBDI@Z ENDP ; std::char_traits::move _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; COMDAT ?assign@?$char_traits@D@std@@SAXAADABD@Z _TEXT SEGMENT ?assign@?$char_traits@D@std@@SAXAADABD@Z PROC ; std::char_traits::assign, COMDAT ; __Left$ = ecx ; __Right$ = edx ; 564 : _Left = _Right; mov al, BYTE PTR [edx] mov BYTE PTR [ecx], al ; 565 : } ret 0 ?assign@?$char_traits@D@std@@SAXAADABD@Z ENDP ; std::char_traits::assign _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility ; COMDAT ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z _TEXT SEGMENT ___formal$dead$ = 8 ; size = 4 ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z PROC ; std::_Iterator_base0::_Adopt, COMDAT ; _this$dead$ = ecx ; 51 : } ret 4 ?_Adopt@_Iterator_base0@std@@QAEXPBX@Z ENDP ; std::_Iterator_base0::_Adopt _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??0error_category@std@@QAE@XZ _TEXT SEGMENT ??0error_category@std@@QAE@XZ PROC ; std::error_category::error_category, COMDAT ; _this$ = ecx ; 162 : error_category() mov DWORD PTR [ecx], OFFSET ??_7error_category@std@@6B@ ; 163 : { // default constructor ; 164 : } mov eax, ecx ret 0 ??0error_category@std@@QAE@XZ ENDP ; std::error_category::error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??1error_category@std@@UAE@XZ _TEXT SEGMENT ??1error_category@std@@UAE@XZ PROC ; std::error_category::~error_category, COMDAT ; _this$ = ecx ; 167 : { // destroy the object mov DWORD PTR [ecx], OFFSET ??_7error_category@std@@6B@ ; 168 : } ret 0 ??1error_category@std@@UAE@XZ ENDP ; std::error_category::~error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??8error_category@std@@QBE_NABV01@@Z _TEXT SEGMENT __Right$ = 8 ; size = 4 ??8error_category@std@@QBE_NABV01@@Z PROC ; std::error_category::operator==, COMDAT ; _this$ = ecx ; 184 : { // compare categories for equality push ebp mov ebp, esp ; 185 : return (this == &_Right); xor eax, eax cmp ecx, DWORD PTR __Right$[ebp] sete al ; 186 : } pop ebp ret 4 ??8error_category@std@@QBE_NABV01@@Z ENDP ; std::error_category::operator== _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??_Gerror_category@std@@UAEPAXI@Z _TEXT SEGMENT ___flags$ = 8 ; size = 4 ??_Gerror_category@std@@UAEPAXI@Z PROC ; std::error_category::`scalar deleting destructor', COMDAT ; _this$ = ecx push ebp mov ebp, esp test BYTE PTR ___flags$[ebp], 1 push esi mov esi, ecx ; 167 : { // destroy the object mov DWORD PTR [esi], OFFSET ??_7error_category@std@@6B@ je SHORT $LN6@scalar push esi call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 $LN6@scalar: mov eax, esi pop esi pop ebp ret 4 ??_Gerror_category@std@@UAEPAXI@Z ENDP ; std::error_category::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?value@error_code@std@@QBEHXZ _TEXT SEGMENT ?value@error_code@std@@QBEHXZ PROC ; std::error_code::value, COMDAT ; _this$ = ecx ; 252 : return (_Myval); mov eax, DWORD PTR [ecx] ; 253 : } ret 0 ?value@error_code@std@@QBEHXZ ENDP ; std::error_code::value _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?category@error_code@std@@QBEABVerror_category@2@XZ _TEXT SEGMENT ?category@error_code@std@@QBEABVerror_category@2@XZ PROC ; std::error_code::category, COMDAT ; _this$ = ecx ; 257 : return (*_Mycat); mov eax, DWORD PTR [ecx+4] ; 258 : } ret 0 ?category@error_code@std@@QBEABVerror_category@2@XZ ENDP ; std::error_code::category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??0error_condition@std@@QAE@HABVerror_category@1@@Z _TEXT SEGMENT __Val$ = 8 ; size = 4 __Cat$ = 12 ; size = 4 ??0error_condition@std@@QAE@HABVerror_category@1@@Z PROC ; std::error_condition::error_condition, COMDAT ; _this$ = ecx ; 316 : { // construct from error code and category push ebp mov ebp, esp mov eax, DWORD PTR __Val$[ebp] mov DWORD PTR [ecx], eax mov eax, DWORD PTR __Cat$[ebp] mov DWORD PTR [ecx+4], eax ; 317 : } mov eax, ecx pop ebp ret 8 ??0error_condition@std@@QAE@HABVerror_category@1@@Z ENDP ; std::error_condition::error_condition _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?value@error_condition@std@@QBEHXZ _TEXT SEGMENT ?value@error_condition@std@@QBEHXZ PROC ; std::error_condition::value, COMDAT ; _this$ = ecx ; 350 : return (_Myval); mov eax, DWORD PTR [ecx] ; 351 : } ret 0 ?value@error_condition@std@@QBEHXZ ENDP ; std::error_condition::value _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?category@error_condition@std@@QBEABVerror_category@2@XZ _TEXT SEGMENT ?category@error_condition@std@@QBEABVerror_category@2@XZ PROC ; std::error_condition::category, COMDAT ; _this$ = ecx ; 355 : return (*_Mycat); mov eax, DWORD PTR [ecx+4] ; 356 : } ret 0 ?category@error_condition@std@@QBEABVerror_category@2@XZ ENDP ; std::error_condition::category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??8error_condition@std@@QBE_NABV01@@Z _TEXT SEGMENT __Right$ = 8 ; size = 4 ??8error_condition@std@@QBE_NABV01@@Z PROC ; std::error_condition::operator==, COMDAT ; _this$ = ecx ; 376 : { // test if *this == _Right push ebp mov ebp, esp ; 185 : return (this == &_Right); mov edx, DWORD PTR __Right$[ebp] mov eax, DWORD PTR [ecx+4] cmp eax, DWORD PTR [edx+4] ; 377 : return (category() == _Right.category() ; 378 : && value() == _Right.value()); jne SHORT $LN3@operator mov eax, DWORD PTR [ecx] cmp eax, DWORD PTR [edx] jne SHORT $LN3@operator mov al, 1 ; 379 : } pop ebp ret 4 $LN3@operator: ; 377 : return (category() == _Right.category() ; 378 : && value() == _Right.value()); xor al, al ; 379 : } pop ebp ret 4 ??8error_condition@std@@QBE_NABV01@@Z ENDP ; std::error_condition::operator== _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z _TEXT SEGMENT ___$ReturnUdt$ = 8 ; size = 4 __Errval$ = 12 ; size = 4 ?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z PROC ; std::error_category::default_error_condition, COMDAT ; _this$ = ecx ; 401 : { // make error_condition for error code push ebp mov ebp, esp ; 316 : { // construct from error code and category mov eax, DWORD PTR ___$ReturnUdt$[ebp] mov edx, DWORD PTR __Errval$[ebp] mov DWORD PTR [eax], edx mov DWORD PTR [eax+4], ecx ; 402 : return (error_condition(_Errval, *this)); ; 403 : } pop ebp ret 8 ?default_error_condition@error_category@std@@UBE?AVerror_condition@2@H@Z ENDP ; std::error_category::default_error_condition _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z _TEXT SEGMENT $T1 = -8 ; size = 8 __Errval$ = 8 ; size = 4 __Cond$ = 12 ; size = 4 ?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z PROC ; std::error_category::equivalent, COMDAT ; _this$ = ecx ; 408 : { // test if error code same condition push ebp mov ebp, esp ; 409 : return (default_error_condition(_Errval) == _Cond); mov eax, DWORD PTR [ecx] sub esp, 8 lea edx, DWORD PTR $T1[ebp] push DWORD PTR __Errval$[ebp] push edx call DWORD PTR [eax+12] ; 185 : return (this == &_Right); mov edx, DWORD PTR __Cond$[ebp] mov ecx, DWORD PTR [eax+4] cmp ecx, DWORD PTR [edx+4] ; 186 : } ; 187 : ; 188 : bool operator!=(const error_category& _Right) const _NOEXCEPT ; 189 : { // compare categories for inequality ; 190 : return (!(*this == _Right)); ; 191 : } ; 192 : ; 193 : bool operator<(const error_category& _Right) const _NOEXCEPT ; 194 : { // compare categories for order ; 195 : return (this < &_Right); ; 196 : } ; 197 : ; 198 : private: ; 199 : error_category(const error_category&); // not defined ; 200 : ; 201 : error_category& operator=(const error_category&); // not defined ; 202 : }; ; 203 : ; 204 : // CLASS error_code ; 205 : class error_code ; 206 : { // store an implementation-specific error code and category ; 207 : public: ; 208 : typedef error_code _Myt; ; 209 : ; 210 : error_code() ; 211 : : _Myval(0), ; 212 : _Mycat(&system_category()) ; 213 : { // construct non-error ; 214 : } ; 215 : ; 216 : error_code(int _Val, const error_category& _Cat) ; 217 : : _Myval(_Val), _Mycat(&_Cat) ; 218 : { // construct from error code and category ; 219 : } ; 220 : ; 221 : template ; 222 : error_code(_Enum _Errcode, ; 223 : typename enable_if::value, ; 224 : void>::type ** = 0) ; 225 : : _Myval(0), _Mycat(0) ; 226 : { // construct from enumerated error code ; 227 : *this = make_error_code(_Errcode); // using ADL ; 228 : } ; 229 : ; 230 : void assign(int _Val, const error_category& _Cat) ; 231 : { // assign error code and category ; 232 : _Myval = _Val; ; 233 : _Mycat = &_Cat; ; 234 : } ; 235 : ; 236 : template ; 237 : typename enable_if::value, ; 238 : error_code>::type& operator=(_Enum _Errcode) ; 239 : { // assign enumerated error code ; 240 : *this = make_error_code(_Errcode); // using ADL ; 241 : return (*this); ; 242 : } ; 243 : ; 244 : void clear() _NOEXCEPT ; 245 : { // assign non-error ; 246 : _Myval = 0; ; 247 : _Mycat = &system_category(); ; 248 : } ; 249 : ; 250 : int value() const ; 251 : { // get error code ; 252 : return (_Myval); ; 253 : } ; 254 : ; 255 : const error_category& category() const ; 256 : { // get category ; 257 : return (*_Mycat); ; 258 : } ; 259 : ; 260 : error_condition default_error_condition() const; ; 261 : ; 262 : string message() const ; 263 : { // get name of error code ; 264 : return (category().message(value())); ; 265 : } ; 266 : ; 267 : _TYPEDEF_BOOL_TYPE; ; 268 : ; 269 : _OPERATOR_BOOL() const _NOEXCEPT ; 270 : { // test for actual error ; 271 : return (value() != 0 ? _CONVERTIBLE_TO_TRUE : 0); ; 272 : } ; 273 : ; 274 : bool operator!() const _NOEXCEPT ; 275 : { // test for actual error ; 276 : return (value() == 0); ; 277 : } ; 278 : ; 279 : bool operator==(const error_code& _Right) const _NOEXCEPT ; 280 : { // test if *this == _Right ; 281 : return (category() == _Right.category() ; 282 : && value() == _Right.value()); ; 283 : } ; 284 : ; 285 : bool operator!=(const error_code& _Right) const _NOEXCEPT ; 286 : { // test if *this != _Right ; 287 : return (!(*this == _Right)); ; 288 : } ; 289 : ; 290 : bool operator<(const error_code& _Right) const _NOEXCEPT ; 291 : { // test if *this == _Right ; 292 : return (category() < _Right.category() ; 293 : || category() == _Right.category() ; 294 : && value() < _Right.value()); ; 295 : } ; 296 : ; 297 : private: ; 298 : int _Myval; // the stored error number ; 299 : const error_category *_Mycat; // pointer to error category ; 300 : }; ; 301 : ; 302 : // CLASS error_condition ; 303 : class error_condition ; 304 : { // store an abstract error code and category ; 305 : public: ; 306 : typedef error_condition _Myt; ; 307 : ; 308 : error_condition() _NOEXCEPT ; 309 : : _Myval(0), ; 310 : _Mycat(&generic_category()) ; 311 : { // construct non-error ; 312 : } ; 313 : ; 314 : error_condition(int _Val, const error_category& _Cat) _NOEXCEPT ; 315 : : _Myval(_Val), _Mycat(&_Cat) ; 316 : { // construct from error code and category ; 317 : } ; 318 : ; 319 : template ; 320 : error_condition(_Enum _Errcode, ; 321 : typename enable_if::value, ; 322 : void>::type ** = 0) _NOEXCEPT ; 323 : : _Myval(0), _Mycat(0) ; 324 : { // construct from enumerated error code ; 325 : *this = make_error_condition(_Errcode); // using ADL ; 326 : } ; 327 : ; 328 : void assign(int _Val, const error_category& _Cat) _NOEXCEPT ; 329 : { // assign error code and category ; 330 : _Myval = _Val; ; 331 : _Mycat = &_Cat; ; 332 : } ; 333 : ; 334 : template ; 335 : typename enable_if::value, ; 336 : error_condition>::type& operator=(_Enum _Errcode) _NOEXCEPT ; 337 : { // assign enumerated error code ; 338 : *this = make_error_condition(_Errcode); // using ADL ; 339 : return (*this); ; 340 : } ; 341 : ; 342 : void clear() _NOEXCEPT ; 343 : { // assign non-error ; 344 : _Myval = 0; ; 345 : _Mycat = &generic_category(); ; 346 : } ; 347 : ; 348 : int value() const _NOEXCEPT ; 349 : { // get error code ; 350 : return (_Myval); ; 351 : } ; 352 : ; 353 : const error_category& category() const _NOEXCEPT ; 354 : { // get category ; 355 : return (*_Mycat); ; 356 : } ; 357 : ; 358 : string message() const ; 359 : { // get name of error code ; 360 : return (category().message(value())); ; 361 : } ; 362 : ; 363 : _TYPEDEF_BOOL_TYPE; ; 364 : ; 365 : _OPERATOR_BOOL() const _NOEXCEPT ; 366 : { // test for actual error ; 367 : return (value() != 0 ? _CONVERTIBLE_TO_TRUE : 0); ; 368 : } ; 369 : ; 370 : bool operator!() const _NOEXCEPT ; 371 : { // test for actual error ; 372 : return (value() == 0); ; 373 : } ; 374 : ; 375 : bool operator==(const error_condition& _Right) const _NOEXCEPT ; 376 : { // test if *this == _Right ; 377 : return (category() == _Right.category() ; 378 : && value() == _Right.value()); jne SHORT $LN5@equivalent mov eax, DWORD PTR [eax] cmp eax, DWORD PTR [edx] jne SHORT $LN5@equivalent ; 409 : return (default_error_condition(_Errval) == _Cond); mov al, 1 ; 410 : } mov esp, ebp pop ebp ret 8 $LN5@equivalent: ; 409 : return (default_error_condition(_Errval) == _Cond); xor al, al ; 410 : } mov esp, ebp pop ebp ret 8 ?equivalent@error_category@std@@UBE_NHABVerror_condition@2@@Z ENDP ; std::error_category::equivalent _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z _TEXT SEGMENT __Code$ = 8 ; size = 4 __Errval$ = 12 ; size = 4 ?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z PROC ; std::error_category::equivalent, COMDAT ; _this$ = ecx ; 415 : { // test if conditions same for this category push ebp mov ebp, esp ; 185 : return (this == &_Right); mov eax, DWORD PTR __Code$[ebp] cmp ecx, DWORD PTR [eax+4] ; 416 : return (*this == _Code.category() && _Code.value() == _Errval); jne SHORT $LN3@equivalent mov eax, DWORD PTR [eax] cmp eax, DWORD PTR __Errval$[ebp] jne SHORT $LN3@equivalent mov al, 1 ; 417 : } pop ebp ret 8 $LN3@equivalent: ; 416 : return (*this == _Code.category() && _Code.value() == _Errval); xor al, al ; 417 : } pop ebp ret 8 ?equivalent@error_category@std@@UBE_NABVerror_code@2@H@Z ENDP ; std::error_category::equivalent _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??0_Generic_error_category@std@@QAE@XZ _TEXT SEGMENT ??0_Generic_error_category@std@@QAE@XZ PROC ; std::_Generic_error_category::_Generic_error_category, COMDAT ; _this$ = ecx ; 580 : _Generic_error_category() mov DWORD PTR [ecx], OFFSET ??_7_Generic_error_category@std@@6B@ ; 581 : { // default constructor ; 582 : } mov eax, ecx ret 0 ??0_Generic_error_category@std@@QAE@XZ ENDP ; std::_Generic_error_category::_Generic_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?name@_Generic_error_category@std@@UBEPBDXZ _TEXT SEGMENT ?name@_Generic_error_category@std@@UBEPBDXZ PROC ; std::_Generic_error_category::name, COMDAT ; _this$ = ecx ; 586 : return ("generic"); mov eax, OFFSET ??_C@_07DCLBNMLN@generic?$AA@ ; 587 : } ret 0 ?name@_Generic_error_category@std@@UBEPBDXZ ENDP ; std::_Generic_error_category::name _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z _TEXT SEGMENT $T1 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 __Errcode$ = 12 ; size = 4 ?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z PROC ; std::_Generic_error_category::message, COMDAT ; _this$ = ecx ; 590 : { // convert to name of error push ebp mov ebp, esp push ecx push esi ; 591 : const char *_Name = _Syserror_map(_Errcode); push DWORD PTR __Errcode$[ebp] mov DWORD PTR $T1[ebp], 0 call DWORD PTR __imp_?_Syserror_map@std@@YAPBDH@Z ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov esi, DWORD PTR ___$ReturnUdt$[ebp] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 591 : const char *_Name = _Syserror_map(_Errcode); add esp, 4 ; 592 : return (string(_Name != 0 ? _Name : "unknown error")); test eax, eax mov edx, OFFSET ??_C@_0O@BFJCFAAK@unknown?5error?$AA@ cmovne edx, eax ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [esi], 0 ; 523 : : _CSTD strlen(_First)); cmp BYTE PTR [edx], 0 jne SHORT $LN47@message xor ecx, ecx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push ecx push edx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 592 : return (string(_Name != 0 ? _Name : "unknown error")); mov eax, esi pop esi ; 593 : } mov esp, ebp pop ebp ret 8 $LN47@message: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov ecx, edx push edi lea edi, DWORD PTR [ecx+1] $LL49@message: mov al, BYTE PTR [ecx] inc ecx test al, al jne SHORT $LL49@message sub ecx, edi pop edi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push ecx push edx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 592 : return (string(_Name != 0 ? _Name : "unknown error")); mov eax, esi pop esi ; 593 : } mov esp, ebp pop ebp ret 8 ?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ENDP ; std::_Generic_error_category::message _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??_G_Generic_error_category@std@@UAEPAXI@Z _TEXT SEGMENT ___flags$ = 8 ; size = 4 ??_G_Generic_error_category@std@@UAEPAXI@Z PROC ; std::_Generic_error_category::`scalar deleting destructor', COMDAT ; _this$ = ecx push ebp mov ebp, esp test BYTE PTR ___flags$[ebp], 1 push esi mov esi, ecx ; 167 : { // destroy the object mov DWORD PTR [esi], OFFSET ??_7error_category@std@@6B@ je SHORT $LN8@scalar push esi call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 $LN8@scalar: mov eax, esi pop esi pop ebp ret 4 ??_G_Generic_error_category@std@@UAEPAXI@Z ENDP ; std::_Generic_error_category::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??1_Generic_error_category@std@@UAE@XZ _TEXT SEGMENT ??1_Generic_error_category@std@@UAE@XZ PROC ; std::_Generic_error_category::~_Generic_error_category, COMDAT ; _this$ = ecx ; 167 : { // destroy the object mov DWORD PTR [ecx], OFFSET ??_7error_category@std@@6B@ ret 0 ??1_Generic_error_category@std@@UAE@XZ ENDP ; std::_Generic_error_category::~_Generic_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??0_Iostream_error_category@std@@QAE@XZ _TEXT SEGMENT ??0_Iostream_error_category@std@@QAE@XZ PROC ; std::_Iostream_error_category::_Iostream_error_category, COMDAT ; _this$dead$ = ecx ; 601 : _Iostream_error_category() mov DWORD PTR ?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A, OFFSET ??_7_Iostream_error_category@std@@6B@ ; std::_Error_objects::_Iostream_object ; 602 : { // default constructor ; 603 : } mov eax, OFFSET ?_Iostream_object@?$_Error_objects@H@std@@2V_Iostream_error_category@2@A ; std::_Error_objects::_Iostream_object ret 0 ??0_Iostream_error_category@std@@QAE@XZ ENDP ; std::_Iostream_error_category::_Iostream_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?name@_Iostream_error_category@std@@UBEPBDXZ _TEXT SEGMENT ?name@_Iostream_error_category@std@@UBEPBDXZ PROC ; std::_Iostream_error_category::name, COMDAT ; _this$ = ecx ; 607 : return ("iostream"); mov eax, OFFSET ??_C@_08LLGCOLLL@iostream?$AA@ ; 608 : } ret 0 ?name@_Iostream_error_category@std@@UBEPBDXZ ENDP ; std::_Iostream_error_category::name _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?message@_Iostream_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z _TEXT SEGMENT $T1 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 __Errcode$ = 12 ; size = 4 ?message@_Iostream_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z PROC ; std::_Iostream_error_category::message, COMDAT ; _this$ = ecx ; 611 : { // convert to name of error push ebp mov ebp, esp push ecx ; 612 : if (_Errcode == (int)io_errc::stream) mov eax, DWORD PTR __Errcode$[ebp] push esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov esi, DWORD PTR ___$ReturnUdt$[ebp] mov DWORD PTR $T1[ebp], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 612 : if (_Errcode == (int)io_errc::stream) cmp eax, 1 jne SHORT $LN2@message ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push 21 ; 00000015H ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], 0 ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push OFFSET ??_C@_0BG@PADBLCHM@iostream?5stream?5error?$AA@ mov ecx, esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [esi], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 615 : return (_Generic_error_category::message(_Errcode)); mov eax, esi pop esi ; 616 : } mov esp, ebp pop ebp ret 8 $LN2@message: ; 615 : return (_Generic_error_category::message(_Errcode)); push eax push esi call ?message@_Generic_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ; std::_Generic_error_category::message mov eax, esi pop esi ; 616 : } mov esp, ebp pop ebp ret 8 ?message@_Iostream_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ENDP ; std::_Iostream_error_category::message _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??_G_Iostream_error_category@std@@UAEPAXI@Z _TEXT SEGMENT ___flags$ = 8 ; size = 4 ??_G_Iostream_error_category@std@@UAEPAXI@Z PROC ; std::_Iostream_error_category::`scalar deleting destructor', COMDAT ; _this$ = ecx push ebp mov ebp, esp test BYTE PTR ___flags$[ebp], 1 push esi mov esi, ecx ; 167 : { // destroy the object mov DWORD PTR [esi], OFFSET ??_7error_category@std@@6B@ je SHORT $LN10@scalar push esi call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 $LN10@scalar: mov eax, esi pop esi pop ebp ret 4 ??_G_Iostream_error_category@std@@UAEPAXI@Z ENDP ; std::_Iostream_error_category::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??1_Iostream_error_category@std@@UAE@XZ _TEXT SEGMENT ??1_Iostream_error_category@std@@UAE@XZ PROC ; std::_Iostream_error_category::~_Iostream_error_category, COMDAT ; _this$ = ecx ; 167 : { // destroy the object mov DWORD PTR [ecx], OFFSET ??_7error_category@std@@6B@ ret 0 ??1_Iostream_error_category@std@@UAE@XZ ENDP ; std::_Iostream_error_category::~_Iostream_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??0_System_error_category@std@@QAE@XZ _TEXT SEGMENT ??0_System_error_category@std@@QAE@XZ PROC ; std::_System_error_category::_System_error_category, COMDAT ; _this$dead$ = ecx ; 624 : _System_error_category() mov DWORD PTR ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A, OFFSET ??_7_System_error_category@std@@6B@ ; std::_Error_objects::_System_object ; 625 : { // default constructor ; 626 : } mov eax, OFFSET ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A ; std::_Error_objects::_System_object ret 0 ??0_System_error_category@std@@QAE@XZ ENDP ; std::_System_error_category::_System_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?name@_System_error_category@std@@UBEPBDXZ _TEXT SEGMENT ?name@_System_error_category@std@@UBEPBDXZ PROC ; std::_System_error_category::name, COMDAT ; _this$ = ecx ; 630 : return ("system"); mov eax, OFFSET ??_C@_06FHFOAHML@system?$AA@ ; 631 : } ret 0 ?name@_System_error_category@std@@UBEPBDXZ ENDP ; std::_System_error_category::name _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z _TEXT SEGMENT $T1 = -4 ; size = 4 ___$ReturnUdt$ = 8 ; size = 4 __Errcode$ = 12 ; size = 4 ?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z PROC ; std::_System_error_category::message, COMDAT ; _this$ = ecx ; 634 : { // convert to name of error push ebp mov ebp, esp push ecx push esi ; 635 : const char *_Name = _Winerror_map(_Errcode); push DWORD PTR __Errcode$[ebp] mov DWORD PTR $T1[ebp], 0 call DWORD PTR __imp_?_Winerror_map@std@@YAPBDH@Z ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov esi, DWORD PTR ___$ReturnUdt$[ebp] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 635 : const char *_Name = _Winerror_map(_Errcode); add esp, 4 ; 636 : return (string(_Name != 0 ? _Name : "unknown error")); test eax, eax mov edx, OFFSET ??_C@_0O@BFJCFAAK@unknown?5error?$AA@ cmovne edx, eax ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [esi], 0 ; 523 : : _CSTD strlen(_First)); cmp BYTE PTR [edx], 0 jne SHORT $LN47@message xor ecx, ecx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push ecx push edx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 636 : return (string(_Name != 0 ? _Name : "unknown error")); mov eax, esi pop esi ; 637 : } mov esp, ebp pop ebp ret 8 $LN47@message: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov ecx, edx push edi lea edi, DWORD PTR [ecx+1] $LL49@message: mov al, BYTE PTR [ecx] inc ecx test al, al jne SHORT $LL49@message sub ecx, edi pop edi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push ecx push edx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; 636 : return (string(_Name != 0 ? _Name : "unknown error")); mov eax, esi pop esi ; 637 : } mov esp, ebp pop ebp ret 8 ?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z ENDP ; std::_System_error_category::message _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?default_error_condition@_System_error_category@std@@UBE?AVerror_condition@2@H@Z _TEXT SEGMENT ___$ReturnUdt$ = 8 ; size = 4 __Errval$ = 12 ; size = 4 ?default_error_condition@_System_error_category@std@@UBE?AVerror_condition@2@H@Z PROC ; std::_System_error_category::default_error_condition, COMDAT ; _this$ = ecx ; 641 : { // make error_condition for error code (generic if possible) push ebp mov ebp, esp push esi ; 642 : if (_Syserror_map(_Errval)) mov esi, DWORD PTR __Errval$[ebp] push esi call DWORD PTR __imp_?_Syserror_map@std@@YAPBDH@Z add esp, 4 test eax, eax ; 316 : { // construct from error code and category mov eax, DWORD PTR ___$ReturnUdt$[ebp] mov DWORD PTR [eax], esi ; 642 : if (_Syserror_map(_Errval)) je SHORT $LN2@default_er ; 316 : { // construct from error code and category mov DWORD PTR [eax+4], OFFSET ?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A ; std::_Error_objects::_Generic_object pop esi ; 643 : return (error_condition(_Errval, generic_category())); ; 644 : else ; 645 : return (error_condition(_Errval, system_category())); ; 646 : } pop ebp ret 8 $LN2@default_er: ; 316 : { // construct from error code and category mov DWORD PTR [eax+4], OFFSET ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A ; std::_Error_objects::_System_object pop esi ; 643 : return (error_condition(_Errval, generic_category())); ; 644 : else ; 645 : return (error_condition(_Errval, system_category())); ; 646 : } pop ebp ret 8 ?default_error_condition@_System_error_category@std@@UBE?AVerror_condition@2@H@Z ENDP ; std::_System_error_category::default_error_condition _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??_G_System_error_category@std@@UAEPAXI@Z _TEXT SEGMENT ___flags$ = 8 ; size = 4 ??_G_System_error_category@std@@UAEPAXI@Z PROC ; std::_System_error_category::`scalar deleting destructor', COMDAT ; _this$ = ecx push ebp mov ebp, esp test BYTE PTR ___flags$[ebp], 1 push esi mov esi, ecx ; 167 : { // destroy the object mov DWORD PTR [esi], OFFSET ??_7error_category@std@@6B@ je SHORT $LN10@scalar push esi call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 $LN10@scalar: mov eax, esi pop esi pop ebp ret 4 ??_G_System_error_category@std@@UAEPAXI@Z ENDP ; std::_System_error_category::`scalar deleting destructor' _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ??1_System_error_category@std@@UAE@XZ _TEXT SEGMENT ??1_System_error_category@std@@UAE@XZ PROC ; std::_System_error_category::~_System_error_category, COMDAT ; _this$ = ecx ; 167 : { // destroy the object mov DWORD PTR [ecx], OFFSET ??_7error_category@std@@6B@ ret 0 ??1_System_error_category@std@@UAE@XZ ENDP ; std::_System_error_category::~_System_error_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?generic_category@std@@YAABVerror_category@1@XZ _TEXT SEGMENT ?generic_category@std@@YAABVerror_category@1@XZ PROC ; std::generic_category, COMDAT ; 670 : return (_Error_objects::_Generic_object); mov eax, OFFSET ?_Generic_object@?$_Error_objects@H@std@@2V_Generic_error_category@2@A ; std::_Error_objects::_Generic_object ; 671 : } ret 0 ?generic_category@std@@YAABVerror_category@1@XZ ENDP ; std::generic_category _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\system_error ; COMDAT ?system_category@std@@YAABVerror_category@1@XZ _TEXT SEGMENT ?system_category@std@@YAABVerror_category@1@XZ PROC ; std::system_category, COMDAT ; 680 : return (_Error_objects::_System_object); mov eax, OFFSET ?_System_object@?$_Error_objects@H@std@@2V_System_error_category@2@A ; std::_Error_objects::_System_object ; 681 : } ret 0 ?system_category@std@@YAABVerror_category@1@XZ ENDP ; std::system_category _TEXT ENDS ; Function compile flags: /Ogtp ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File e:\программирование\any\any\any.cpp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File e:\программирование\any\any\any.cpp ; COMDAT _main _TEXT SEGMENT _vec1$ = -64 ; size = 12 _vec2$ = -52 ; size = 12 _res1$ = -40 ; size = 12 _res2$ = -28 ; size = 12 __$EHRec$ = -12 ; size = 12 _main PROC ; COMDAT ; 149 : int main(){ push ebp mov ebp, esp and esp, -8 ; fffffff8H push -1 push __ehhandler$_main mov eax, DWORD PTR fs:0 push eax sub esp, 56 ; 00000038H push ebx push esi push edi mov eax, DWORD PTR ___security_cookie xor eax, esp push eax lea eax, DWORD PTR __$EHRec$[esp+84] mov DWORD PTR fs:0, eax ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 486 : _Myfirst = pointer(); mov DWORD PTR _res1$[esp+84], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR _res1$[esp+88], 0 ; 488 : _Myend = pointer(); mov DWORD PTR _res1$[esp+92], 0 ; File e:\программирование\any\any\any.cpp ; 150 : vectorres1,res2; mov DWORD PTR __$EHRec$[esp+92], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 486 : _Myfirst = pointer(); mov DWORD PTR _res2$[esp+84], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR _res2$[esp+88], 0 ; 488 : _Myend = pointer(); mov DWORD PTR _res2$[esp+92], 0 ; File e:\программирование\any\any\any.cpp ; 150 : vectorres1,res2; mov BYTE PTR __$EHRec$[esp+92], 1 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 696 : resize(_Count); push 1000 ; 000003e8H lea ecx, DWORD PTR _vec1$[esp+88] ; 486 : _Myfirst = pointer(); mov DWORD PTR _vec1$[esp+88], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR _vec1$[esp+92], 0 ; 488 : _Myend = pointer(); mov DWORD PTR _vec1$[esp+96], 0 ; 696 : resize(_Count); call ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z ; std::vector >::resize ; File e:\программирование\any\any\any.cpp ; 151 : vectorvec1(dim),vec2(N1); mov BYTE PTR __$EHRec$[esp+92], 2 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 696 : resize(_Count); push 1000 ; 000003e8H lea ecx, DWORD PTR _vec2$[esp+88] ; 486 : _Myfirst = pointer(); mov DWORD PTR _vec2$[esp+88], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR _vec2$[esp+92], 0 ; 488 : _Myend = pointer(); mov DWORD PTR _vec2$[esp+96], 0 ; 696 : resize(_Count); call ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z ; std::vector >::resize ; File e:\программирование\any\any\any.cpp ; 151 : vectorvec1(dim),vec2(N1); mov BYTE PTR __$EHRec$[esp+92], 3 movsd xmm0, QWORD PTR __real@3ff0000000000000 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 486 : _Myfirst = pointer(); xor ecx, ecx npad 7 $LL105@main: ; File e:\программирование\any\any\any.cpp ; 155 : vec1[k]=1; mov eax, DWORD PTR _vec1$[esp+84] add ecx, 8 movsd QWORD PTR [ecx+eax-8], xmm0 cmp ecx, 8000 ; 00001f40H jl SHORT $LL105@main ; 156 : } ; 157 : ; 158 : t = clock(); mov edi, DWORD PTR __imp__clock call edi ; 159 : ; 160 : #pragma omp parallel shared(vec1) num_threads(4) push 4 mov esi, eax call __vcomp_set_num_threads lea eax, DWORD PTR _vec1$[esp+88] push eax push OFFSET _main$omp$1 push 1 push 1 call __vcomp_fork add esp, 20 ; 00000014H ; 161 : { ; 162 : double temp = 0; ; 163 : int i,j,k; ; 164 : #pragma omp for private(i) ; 165 : for( i = 0; i_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1148 : return (*(this->_Myfirst + _Pos)); mov eax, DWORD PTR _vec1$[esp+84] ; File e:\программирование\any\any\any.cpp ; 184 : vec1[g]+=h; movsd xmm0, QWORD PTR [ecx+eax] addsd xmm0, xmm1 movsd QWORD PTR [ecx+eax], xmm0 dec esi jne $LL3@main ; 182 : for(int h = 0; h_Myfirst != pointer()) mov eax, DWORD PTR _vec2$[esp+84] mov esi, DWORD PTR __imp_??3@YAXPAX@Z test eax, eax je SHORT $LN45@main ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call esi add esp, 4 $LN45@main: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1536 : if (this->_Myfirst != pointer()) mov eax, DWORD PTR _vec1$[esp+84] test eax, eax je SHORT $LN84@main ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call esi add esp, 4 $LN84@main: ; File e:\программирование\any\any\any.cpp ; 191 : } mov ecx, DWORD PTR __$EHRec$[esp+84] mov DWORD PTR fs:0, ecx pop ecx pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 _TEXT ENDS ; COMDAT text$x text$x SEGMENT __unwindfunclet$_main$0: lea ecx, DWORD PTR _res1$[ebp] jmp ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ; std::vector >::~vector > __unwindfunclet$_main$1: lea ecx, DWORD PTR _res2$[ebp] jmp ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ; std::vector >::~vector > __unwindfunclet$_main$2: lea ecx, DWORD PTR _vec1$[ebp] jmp ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ ; std::vector >::~vector > __unwindfunclet$_main$3: lea ecx, DWORD PTR _vec2$[ebp] jmp ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ ; std::vector >::~vector > __ehhandler$_main: mov edx, DWORD PTR [esp+8] lea eax, DWORD PTR [edx-68] mov ecx, DWORD PTR [edx-72] xor ecx, eax call @__security_check_cookie@4 mov eax, OFFSET __ehfuncinfo$_main jmp ___CxxFrameHandler3 text$x ENDS _main ENDP ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z _TEXT SEGMENT __Ptr$ = 8 ; size = 4 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z PROC ; std::basic_string,std::allocator >::basic_string,std::allocator >, COMDAT ; _this$ = ecx ; 791 : { // construct from [_Ptr, ) push ebp mov ebp, esp push esi mov esi, ecx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov ecx, DWORD PTR __Ptr$[ebp] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [esi], 0 ; 523 : : _CSTD strlen(_First)); cmp BYTE PTR [ecx], 0 jne SHORT $LN43@basic_stri xor edx, edx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push edx push ecx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; 792 : _Tidy(); ; 793 : assign(_Ptr); ; 794 : } mov eax, esi pop esi pop ebp ret 4 $LN43@basic_stri: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov edx, ecx push edi lea edi, DWORD PTR [edx+1] $LL45@basic_stri: mov al, BYTE PTR [edx] inc edx test al, al jne SHORT $LL45@basic_stri sub edx, edi pop edi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push edx push ecx mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign ; 792 : _Tidy(); ; 793 : assign(_Ptr); ; 794 : } mov eax, esi pop esi pop ebp ret 4 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ENDP ; std::basic_string,std::allocator >::basic_string,std::allocator > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ _TEXT SEGMENT ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ PROC ; std::basic_string,std::allocator >::~basic_string,std::allocator >, COMDAT ; _this$ = ecx ; 963 : { // destroy the string push esi mov esi, ecx ; 2219 : } ; 2220 : ; 2221 : bool _Grow(size_type _Newsize, ; 2222 : bool _Trim = false) ; 2223 : { // ensure buffer is big enough, trim to size if _Trim is true ; 2224 : if (max_size() < _Newsize) ; 2225 : _Xlen(); // result too long ; 2226 : if (this->_Myres < _Newsize) ; 2227 : _Copy(_Newsize, this->_Mysize); // reallocate to grow ; 2228 : else if (_Trim && _Newsize < this->_BUF_SIZE) ; 2229 : _Tidy(true, // copy and deallocate if trimming to small string ; 2230 : _Newsize < this->_Mysize ? _Newsize : this->_Mysize); ; 2231 : else if (_Newsize == 0) ; 2232 : _Eos(0); // new size is zero, just null terminate ; 2233 : return (0 < _Newsize); // return true only if more work to do ; 2234 : } ; 2235 : ; 2236 : bool _Inside(const _Elem *_Ptr) ; 2237 : { // test if _Ptr points inside string ; 2238 : if (_Ptr == 0 || _Ptr < this->_Myptr() ; 2239 : || this->_Myptr() + this->_Mysize <= _Ptr) ; 2240 : return (false); // don't ask ; 2241 : else ; 2242 : return (true); ; 2243 : } ; 2244 : ; 2245 : static size_type _Pdif(const_iterator _P2, ; 2246 : const_iterator _P1) ; 2247 : { // compute safe iterator difference ; 2248 : return (_STRING_ITER_BASE(_P2) == 0 ? 0 : _P2 - _P1); ; 2249 : } ; 2250 : ; 2251 : void _Tidy(bool _Built = false, ; 2252 : size_type _Newsize = 0) ; 2253 : { // initialize buffer, deallocating any storage ; 2254 : if (!_Built) ; 2255 : ; ; 2256 : else if (this->_BUF_SIZE <= this->_Myres) cmp DWORD PTR [esi+20], 16 ; 00000010H jb SHORT $LN21@basic_stri ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push DWORD PTR [esi] call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 $LN21@basic_stri: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; 966 : ; 967 : _PGLOBAL static const size_type npos; // bad/missing length/position ; 968 : ; 969 : _Myt& operator=(const _Myt& _Right) ; 970 : { // assign _Right ; 971 : if (this != &_Right) ; 972 : { // different, assign it ; 973 : #if _HAS_CPP0X ; 974 : if (this->_Getal() != _Right._Getal() ; 975 : && _Alty::propagate_on_container_copy_assignment::value) ; 976 : { // change allocator before copying ; 977 : _Tidy(true); ; 978 : this->_Change_alloc(_Right._Getal()); ; 979 : } ; 980 : #endif /* _HAS_CPP0X */ ; 981 : ; 982 : assign(_Right); ; 983 : } ; 984 : return (*this); ; 985 : } ; 986 : ; 987 : _Myt& operator=(const _Elem *_Ptr) ; 988 : { // assign [_Ptr, ) ; 989 : return (assign(_Ptr)); ; 990 : } ; 991 : ; 992 : _Myt& operator=(_Elem _Ch) ; 993 : { // assign 1 * _Ch ; 994 : return (assign(1, _Ch)); ; 995 : } ; 996 : ; 997 : _Myt& operator+=(const _Myt& _Right) ; 998 : { // append _Right ; 999 : return (append(_Right)); ; 1000 : } ; 1001 : ; 1002 : _Myt& operator+=(const _Elem *_Ptr) ; 1003 : { // append [_Ptr, ) ; 1004 : return (append(_Ptr)); ; 1005 : } ; 1006 : ; 1007 : _Myt& operator+=(_Elem _Ch) ; 1008 : { // append 1 * _Ch ; 1009 : return (append((size_type)1, _Ch)); ; 1010 : } ; 1011 : ; 1012 : _Myt& append(const _Myt& _Right) ; 1013 : { // append _Right ; 1014 : return (append(_Right, 0, npos)); ; 1015 : } ; 1016 : ; 1017 : _Myt& append(const _Myt& _Right, ; 1018 : size_type _Roff, size_type _Count) ; 1019 : { // append _Right [_Roff, _Roff + _Count) ; 1020 : if (_Right.size() < _Roff) ; 1021 : _Xran(); // _Roff off end ; 1022 : size_type _Num = _Right.size() - _Roff; ; 1023 : if (_Num < _Count) ; 1024 : _Count = _Num; // trim _Count to size ; 1025 : if (npos - this->_Mysize <= _Count) ; 1026 : _Xlen(); // result too long ; 1027 : ; 1028 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1029 : { // make room and append new stuff ; 1030 : _Traits::copy(this->_Myptr() + this->_Mysize, ; 1031 : _Right._Myptr() + _Roff, _Count); ; 1032 : _Eos(_Num); ; 1033 : } ; 1034 : return (*this); ; 1035 : } ; 1036 : ; 1037 : _Myt& append(const _Elem *_Ptr, size_type _Count) ; 1038 : { // append [_Ptr, _Ptr + _Count) ; 1039 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1040 : if (_Count != 0) ; 1041 : _DEBUG_POINTER(_Ptr); ; 1042 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1043 : ; 1044 : if (_Inside(_Ptr)) ; 1045 : return (append(*this, ; 1046 : _Ptr - this->_Myptr(), _Count)); // substring ; 1047 : if (npos - this->_Mysize <= _Count) ; 1048 : _Xlen(); // result too long ; 1049 : ; 1050 : size_type _Num; ; 1051 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1052 : { // make room and append new stuff ; 1053 : _Traits::copy(this->_Myptr() + this->_Mysize, _Ptr, _Count); ; 1054 : _Eos(_Num); ; 1055 : } ; 1056 : return (*this); ; 1057 : } ; 1058 : ; 1059 : _Myt& append(const _Elem *_Ptr) ; 1060 : { // append [_Ptr, ) ; 1061 : _DEBUG_POINTER(_Ptr); ; 1062 : return (append(_Ptr, _Traits::length(_Ptr))); ; 1063 : } ; 1064 : ; 1065 : _Myt& append(size_type _Count, _Elem _Ch) ; 1066 : { // append _Count * _Ch ; 1067 : if (npos - this->_Mysize <= _Count) ; 1068 : _Xlen(); // result too long ; 1069 : ; 1070 : size_type _Num; ; 1071 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1072 : { // make room and append new stuff using assign ; 1073 : _Chassign(this->_Mysize, _Count, _Ch); ; 1074 : _Eos(_Num); ; 1075 : } ; 1076 : return (*this); ; 1077 : } ; 1078 : ; 1079 : template ; 1080 : typename enable_if<_Is_iterator<_Iter>::value, ; 1081 : _Myt&>::type ; 1082 : append(_Iter _First, _Iter _Last) ; 1083 : { // append [_First, _Last), input iterators ; 1084 : return (replace(end(), end(), _First, _Last)); ; 1085 : } ; 1086 : ; 1087 : _Myt& append(const_pointer _First, const_pointer _Last) ; 1088 : { // append [_First, _Last), const pointers ; 1089 : return (replace(end(), end(), _First, _Last)); ; 1090 : } ; 1091 : ; 1092 : _Myt& append(const_iterator _First, const_iterator _Last) ; 1093 : { // append [_First, _Last), const_iterators ; 1094 : return (replace(end(), end(), _First, _Last)); ; 1095 : } ; 1096 : ; 1097 : _Myt& assign(const _Myt& _Right) ; 1098 : { // assign _Right ; 1099 : return (assign(_Right, 0, npos)); ; 1100 : } ; 1101 : ; 1102 : _Myt& assign(const _Myt& _Right, ; 1103 : size_type _Roff, size_type _Count) ; 1104 : { // assign _Right [_Roff, _Roff + _Count) ; 1105 : if (_Right.size() < _Roff) ; 1106 : _Xran(); // _Roff off end ; 1107 : size_type _Num = _Right.size() - _Roff; ; 1108 : if (_Count < _Num) ; 1109 : _Num = _Count; // trim _Num to size ; 1110 : ; 1111 : if (this == &_Right) ; 1112 : erase((size_type)(_Roff + _Num)), erase(0, _Roff); // substring ; 1113 : else if (_Grow(_Num)) ; 1114 : { // make room and assign new stuff ; 1115 : _Traits::copy(this->_Myptr(), ; 1116 : _Right._Myptr() + _Roff, _Num); ; 1117 : _Eos(_Num); ; 1118 : } ; 1119 : return (*this); ; 1120 : } ; 1121 : ; 1122 : _Myt& assign(const _Elem *_Ptr, size_type _Count) ; 1123 : { // assign [_Ptr, _Ptr + _Count) ; 1124 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1125 : if (_Count != 0) ; 1126 : _DEBUG_POINTER(_Ptr); ; 1127 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1128 : ; 1129 : if (_Inside(_Ptr)) ; 1130 : return (assign(*this, ; 1131 : _Ptr - this->_Myptr(), _Count)); // substring ; 1132 : ; 1133 : if (_Grow(_Count)) ; 1134 : { // make room and assign new stuff ; 1135 : _Traits::copy(this->_Myptr(), _Ptr, _Count); ; 1136 : _Eos(_Count); ; 1137 : } ; 1138 : return (*this); ; 1139 : } ; 1140 : ; 1141 : _Myt& assign(const _Elem *_Ptr) ; 1142 : { // assign [_Ptr, ) ; 1143 : _DEBUG_POINTER(_Ptr); ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [esi], 0 pop esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 965 : } ret 0 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ENDP ; std::basic_string,std::allocator >::~basic_string,std::allocator > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??0?$vector@HV?$allocator@H@std@@@std@@QAE@XZ _TEXT SEGMENT ??0?$vector@HV?$allocator@H@std@@@std@@QAE@XZ PROC ; std::vector >::vector >, COMDAT ; _this$ = ecx ; 486 : _Myfirst = pointer(); mov DWORD PTR [ecx], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR [ecx+4], 0 ; 488 : _Myend = pointer(); mov DWORD PTR [ecx+8], 0 ; 686 : } mov eax, ecx ret 0 ??0?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ENDP ; std::vector >::vector > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ _TEXT SEGMENT ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ PROC ; std::vector >::~vector >, COMDAT ; _this$ = ecx ; 899 : { // destroy the object push esi mov esi, ecx ; 902 : ; 903 : _Myt& operator=(const _Myt& _Right) ; 904 : { // assign _Right ; 905 : if (this != &_Right) ; 906 : { // different, assign it ; 907 : #if _HAS_CPP0X ; 908 : if (this->_Getal() != _Right._Getal() ; 909 : && _Alty::propagate_on_container_copy_assignment::value) ; 910 : { // change allocator before copying ; 911 : _Tidy(); ; 912 : this->_Change_alloc(_Right._Getal()); ; 913 : } ; 914 : #endif /* _HAS_CPP0X */ ; 915 : ; 916 : this->_Orphan_all(); ; 917 : ; 918 : if (_Right.empty()) ; 919 : clear(); // new sequence empty, erase existing sequence ; 920 : else if (_Right.size() <= size()) ; 921 : { // enough elements, copy new and destroy old ; 922 : pointer _Ptr = _Copy_impl(_Right._Myfirst, ; 923 : _Right._Mylast, this->_Myfirst); // copy new ; 924 : _Destroy(_Ptr, this->_Mylast); // destroy old ; 925 : this->_Mylast = this->_Myfirst + _Right.size(); ; 926 : } ; 927 : else if (_Right.size() <= capacity()) ; 928 : { // enough room, copy and construct new ; 929 : pointer _Ptr = _Right._Myfirst + size(); ; 930 : _Copy_impl(_Right._Myfirst, ; 931 : _Ptr, this->_Myfirst); ; 932 : this->_Mylast = _Ucopy(_Ptr, _Right._Mylast, this->_Mylast); ; 933 : } ; 934 : else ; 935 : { // not enough room, allocate new array and construct new ; 936 : if (this->_Myfirst != pointer()) ; 937 : { // discard old array ; 938 : _Destroy(this->_Myfirst, this->_Mylast); ; 939 : this->_Getal().deallocate(this->_Myfirst, ; 940 : this->_Myend - this->_Myfirst); ; 941 : } ; 942 : if (_Buy(_Right.size())) ; 943 : _TRY_BEGIN ; 944 : this->_Mylast = _Ucopy(_Right._Myfirst, _Right._Mylast, ; 945 : this->_Myfirst); ; 946 : _CATCH_ALL ; 947 : _Tidy(); ; 948 : _RERAISE; ; 949 : _CATCH_END ; 950 : } ; 951 : } ; 952 : return (*this); ; 953 : } ; 954 : ; 955 : void reserve(size_type _Count) ; 956 : { // determine new minimum length of allocated storage ; 957 : if (capacity() < _Count) ; 958 : { // something to do, check and reallocate ; 959 : if (max_size() < _Count) ; 960 : _Xlen(); ; 961 : _Reallocate(_Count); ; 962 : } ; 963 : } ; 964 : ; 965 : size_type capacity() const _NOEXCEPT ; 966 : { // return current length of allocated storage ; 967 : return (this->_Myend - this->_Myfirst); ; 968 : } ; 969 : ; 970 : size_type _Unused_capacity() const _NOEXCEPT ; 971 : { // micro-optimization for capacity() - size() ; 972 : return (this->_Myend - this->_Mylast); ; 973 : } ; 974 : ; 975 : size_type _Has_unused_capacity() const _NOEXCEPT ; 976 : { // micro-optimization for capacity() != size() ; 977 : return (this->_Myend != this->_Mylast); ; 978 : } ; 979 : ; 980 : iterator begin() _NOEXCEPT ; 981 : { // return iterator for beginning of mutable sequence ; 982 : return (iterator(this->_Myfirst, this)); ; 983 : } ; 984 : ; 985 : const_iterator begin() const _NOEXCEPT ; 986 : { // return iterator for beginning of nonmutable sequence ; 987 : return (const_iterator(this->_Myfirst, this)); ; 988 : } ; 989 : ; 990 : iterator end() _NOEXCEPT ; 991 : { // return iterator for end of mutable sequence ; 992 : return (iterator(this->_Mylast, this)); ; 993 : } ; 994 : ; 995 : const_iterator end() const _NOEXCEPT ; 996 : { // return iterator for end of nonmutable sequence ; 997 : return (const_iterator(this->_Mylast, this)); ; 998 : } ; 999 : ; 1000 : iterator _Make_iter(const_iterator _Where) const ; 1001 : { // make iterator from const_iterator ; 1002 : return (iterator(_Where._Ptr, this)); ; 1003 : } ; 1004 : ; 1005 : reverse_iterator rbegin() _NOEXCEPT ; 1006 : { // return iterator for beginning of reversed mutable sequence ; 1007 : return (reverse_iterator(end())); ; 1008 : } ; 1009 : ; 1010 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1011 : { // return iterator for beginning of reversed nonmutable sequence ; 1012 : return (const_reverse_iterator(end())); ; 1013 : } ; 1014 : ; 1015 : reverse_iterator rend() _NOEXCEPT ; 1016 : { // return iterator for end of reversed mutable sequence ; 1017 : return (reverse_iterator(begin())); ; 1018 : } ; 1019 : ; 1020 : const_reverse_iterator rend() const _NOEXCEPT ; 1021 : { // return iterator for end of reversed nonmutable sequence ; 1022 : return (const_reverse_iterator(begin())); ; 1023 : } ; 1024 : ; 1025 : #if _HAS_CPP0X ; 1026 : const_iterator cbegin() const _NOEXCEPT ; 1027 : { // return iterator for beginning of nonmutable sequence ; 1028 : return (((const _Myt *)this)->begin()); ; 1029 : } ; 1030 : ; 1031 : const_iterator cend() const _NOEXCEPT ; 1032 : { // return iterator for end of nonmutable sequence ; 1033 : return (((const _Myt *)this)->end()); ; 1034 : } ; 1035 : ; 1036 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1037 : { // return iterator for beginning of reversed nonmutable sequence ; 1038 : return (((const _Myt *)this)->rbegin()); ; 1039 : } ; 1040 : ; 1041 : const_reverse_iterator crend() const _NOEXCEPT ; 1042 : { // return iterator for end of reversed nonmutable sequence ; 1043 : return (((const _Myt *)this)->rend()); ; 1044 : } ; 1045 : ; 1046 : void shrink_to_fit() ; 1047 : { // reduce capacity ; 1048 : if (_Has_unused_capacity()) ; 1049 : { // worth shrinking, do it ; 1050 : if (empty()) ; 1051 : _Tidy(); ; 1052 : else ; 1053 : _Reallocate(size()); ; 1054 : } ; 1055 : } ; 1056 : #endif /* _HAS_CPP0X */ ; 1057 : ; 1058 : void resize(size_type _Newsize) ; 1059 : { // determine new length, padding as needed ; 1060 : if (_Newsize < size()) ; 1061 : erase(begin() + _Newsize, end()); ; 1062 : else if (size() < _Newsize) ; 1063 : { // pad as needed ; 1064 : _Alty _Alval(this->_Getal()); ; 1065 : _Reserve(_Newsize - size()); ; 1066 : _TRY_BEGIN ; 1067 : _Uninitialized_default_fill_n(this->_Mylast, _Newsize - size(), ; 1068 : _Alval); ; 1069 : _CATCH_ALL ; 1070 : _Tidy(); ; 1071 : _RERAISE; ; 1072 : _CATCH_END ; 1073 : this->_Mylast += _Newsize - size(); ; 1074 : } ; 1075 : } ; 1076 : ; 1077 : void resize(size_type _Newsize, const value_type& _Val) ; 1078 : { // determine new length, padding with _Val elements as needed ; 1079 : if (_Newsize < size()) ; 1080 : erase(begin() + _Newsize, end()); ; 1081 : else if (size() < _Newsize) ; 1082 : _Insert_n(end(), _Newsize - size(), _Val); ; 1083 : } ; 1084 : ; 1085 : size_type size() const _NOEXCEPT ; 1086 : { // return length of sequence ; 1087 : return (this->_Mylast - this->_Myfirst); ; 1088 : } ; 1089 : ; 1090 : size_type max_size() const _NOEXCEPT ; 1091 : { // return maximum possible length of sequence ; 1092 : return (this->_Getal().max_size()); ; 1093 : } ; 1094 : ; 1095 : bool empty() const _NOEXCEPT ; 1096 : { // test if sequence is empty ; 1097 : return (this->_Myfirst == this->_Mylast); ; 1098 : } ; 1099 : ; 1100 : _Alloc get_allocator() const _NOEXCEPT ; 1101 : { // return allocator object for values ; 1102 : return (this->_Getal()); ; 1103 : } ; 1104 : ; 1105 : const_reference at(size_type _Pos) const ; 1106 : { // subscript nonmutable sequence with checking ; 1107 : if (size() <= _Pos) ; 1108 : _Xran(); ; 1109 : return (*(this->_Myfirst + _Pos)); ; 1110 : } ; 1111 : ; 1112 : reference at(size_type _Pos) ; 1113 : { // subscript mutable sequence with checking ; 1114 : if (size() <= _Pos) ; 1115 : _Xran(); ; 1116 : return (*(this->_Myfirst + _Pos)); ; 1117 : } ; 1118 : ; 1119 : const_reference operator[](size_type _Pos) const ; 1120 : { // subscript nonmutable sequence ; 1121 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1122 : if (size() <= _Pos) ; 1123 : { // report error ; 1124 : _DEBUG_ERROR("vector subscript out of range"); ; 1125 : _SCL_SECURE_OUT_OF_RANGE; ; 1126 : } ; 1127 : ; 1128 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1129 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1130 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1131 : ; 1132 : return (*(this->_Myfirst + _Pos)); ; 1133 : } ; 1134 : ; 1135 : reference operator[](size_type _Pos) ; 1136 : { // subscript mutable sequence ; 1137 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1138 : if (size() <= _Pos) ; 1139 : { // report error ; 1140 : _DEBUG_ERROR("vector subscript out of range"); ; 1141 : _SCL_SECURE_OUT_OF_RANGE; ; 1142 : } ; 1143 : ; 1144 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1145 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1146 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1147 : ; 1148 : return (*(this->_Myfirst + _Pos)); ; 1149 : } ; 1150 : ; 1151 : #if _HAS_CPP0X ; 1152 : pointer data() _NOEXCEPT ; 1153 : { // return address of first element ; 1154 : return (this->_Myfirst); ; 1155 : } ; 1156 : ; 1157 : const_pointer data() const _NOEXCEPT ; 1158 : { // return address of first element ; 1159 : return (this->_Myfirst); ; 1160 : } ; 1161 : #endif /* _HAS_CPP0X */ ; 1162 : ; 1163 : reference front() ; 1164 : { // return first element of mutable sequence ; 1165 : return (*begin()); ; 1166 : } ; 1167 : ; 1168 : const_reference front() const ; 1169 : { // return first element of nonmutable sequence ; 1170 : return (*begin()); ; 1171 : } ; 1172 : ; 1173 : reference back() ; 1174 : { // return last element of mutable sequence ; 1175 : return (*(end() - 1)); ; 1176 : } ; 1177 : ; 1178 : const_reference back() const ; 1179 : { // return last element of nonmutable sequence ; 1180 : return (*(end() - 1)); ; 1181 : } ; 1182 : ; 1183 : void push_back(const value_type& _Val) ; 1184 : { // insert element at end ; 1185 : if (_Inside(_STD addressof(_Val))) ; 1186 : { // push back an element ; 1187 : size_type _Idx = _STD addressof(_Val) - this->_Myfirst; ; 1188 : if (this->_Mylast == this->_Myend) ; 1189 : _Reserve(1); ; 1190 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1191 : this->_Getal().construct(this->_Mylast, ; 1192 : this->_Myfirst[_Idx]); ; 1193 : ++this->_Mylast; ; 1194 : } ; 1195 : else ; 1196 : { // push back a non-element ; 1197 : if (this->_Mylast == this->_Myend) ; 1198 : _Reserve(1); ; 1199 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1200 : this->_Getal().construct(this->_Mylast, ; 1201 : _Val); ; 1202 : ++this->_Mylast; ; 1203 : } ; 1204 : } ; 1205 : ; 1206 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1207 : void pop_back() ; 1208 : { // erase element at end ; 1209 : if (empty()) ; 1210 : _DEBUG_ERROR("vector empty before pop"); ; 1211 : else ; 1212 : { // erase last element ; 1213 : _Orphan_range(this->_Mylast - 1, this->_Mylast); ; 1214 : this->_Getal().destroy(this->_Mylast - 1); ; 1215 : --this->_Mylast; ; 1216 : } ; 1217 : } ; 1218 : ; 1219 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1220 : void pop_back() ; 1221 : { // erase element at end ; 1222 : if (!empty()) ; 1223 : { // erase last element ; 1224 : this->_Getal().destroy(this->_Mylast - 1); ; 1225 : --this->_Mylast; ; 1226 : } ; 1227 : } ; 1228 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1229 : ; 1230 : template ; 1231 : typename enable_if<_Is_iterator<_Iter>::value, ; 1232 : void>::type ; 1233 : assign(_Iter _First, _Iter _Last) ; 1234 : { // assign [_First, _Last), input iterators ; 1235 : erase(begin(), end()); ; 1236 : insert(begin(), _First, _Last); ; 1237 : } ; 1238 : ; 1239 : void assign(size_type _Count, const value_type& _Val) ; 1240 : { // assign _Count * _Val ; 1241 : _Assign_n(_Count, _Val); ; 1242 : } ; 1243 : ; 1244 : iterator insert(const_iterator _Where, const _Ty& _Val) ; 1245 : { // insert _Val at _Where ; 1246 : return (_Insert_n(_Where, (size_type)1, _Val)); ; 1247 : } ; 1248 : ; 1249 : iterator insert(const_iterator _Where, size_type _Count, ; 1250 : const _Ty& _Val) ; 1251 : { // insert _Count * _Val at _Where ; 1252 : return (_Insert_n(_Where, _Count, _Val)); ; 1253 : } ; 1254 : ; 1255 : template ; 1256 : typename enable_if<_Is_iterator<_Iter>::value, ; 1257 : iterator>::type ; 1258 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1259 : { // insert [_First, _Last) at _Where ; 1260 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1261 : _Insert(_Where, _First, _Last, _Iter_cat(_First)); ; 1262 : return (begin() + _Off); ; 1263 : } ; 1264 : ; 1265 : template ; 1266 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1267 : input_iterator_tag) ; 1268 : { // insert [_First, _Last) at _Where, input iterators ; 1269 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1270 : ; 1271 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1272 : if (size() < _Off) ; 1273 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1274 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1275 : ; 1276 : if (_First != _Last) ; 1277 : { // worth doing, gather at end and rotate into place ; 1278 : size_type _Oldsize = size(); ; 1279 : ; 1280 : _TRY_BEGIN ; 1281 : for (; _First != _Last; ++_First) ; 1282 : push_back(*_First); // append ; 1283 : ; 1284 : _CATCH_ALL ; 1285 : erase(begin() + _Oldsize, end()); ; 1286 : _RERAISE; ; 1287 : _CATCH_END ; 1288 : ; 1289 : _STD rotate(begin() + _Off, begin() + _Oldsize, end()); ; 1290 : } ; 1291 : } ; 1292 : ; 1293 : template ; 1294 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1295 : forward_iterator_tag) ; 1296 : { // insert [_First, _Last) at _Where, forward iterators ; 1297 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1298 : if (_VICONT(_Where) != this ; 1299 : || _VIPTR(_Where) < this->_Myfirst ; 1300 : || this->_Mylast < _VIPTR(_Where)) ; 1301 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1302 : _DEBUG_RANGE(_First, _Last); ; 1303 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1304 : ; 1305 : size_type _Count = 0; ; 1306 : _Distance(_First, _Last, _Count); ; 1307 : ; 1308 : if (_Count == 0) ; 1309 : ; ; 1310 : else if (_Unused_capacity() < _Count) ; 1311 : { // not enough room, reallocate ; 1312 : if (max_size() - size() < _Count) ; 1313 : _Xlen(); // result too long ; 1314 : ; 1315 : size_type _Capacity = _Grow_to(size() + _Count); ; 1316 : pointer _Newvec = this->_Getal().allocate(_Capacity); ; 1317 : pointer _Ptr = _Newvec; ; 1318 : ; 1319 : _TRY_BEGIN ; 1320 : _Ptr = _Umove(this->_Myfirst, _VIPTR(_Where), ; 1321 : _Newvec); // copy prefix ; 1322 : _Ptr = _Ucopy(_First, _Last, _Ptr); // add new stuff ; 1323 : _Umove(_VIPTR(_Where), this->_Mylast, ; 1324 : _Ptr); // copy suffix ; 1325 : _CATCH_ALL ; 1326 : _Destroy(_Newvec, _Ptr); ; 1327 : this->_Getal().deallocate(_Newvec, _Capacity); ; 1328 : _RERAISE; ; 1329 : _CATCH_END ; 1330 : ; 1331 : _Count += size(); ; 1332 : if (this->_Myfirst != pointer()) ; 1333 : { // destroy and deallocate old array ; 1334 : _Destroy(this->_Myfirst, this->_Mylast); ; 1335 : this->_Getal().deallocate(this->_Myfirst, ; 1336 : this->_Myend - this->_Myfirst); ; 1337 : } ; 1338 : ; 1339 : this->_Orphan_all(); ; 1340 : this->_Myend = _Newvec + _Capacity; ; 1341 : this->_Mylast = _Newvec + _Count; ; 1342 : this->_Myfirst = _Newvec; ; 1343 : } ; 1344 : else ; 1345 : { // new stuff fits, append and rotate into place ; 1346 : _Ucopy(_First, _Last, this->_Mylast); ; 1347 : _STD rotate(_VIPTR(_Where), this->_Mylast, ; 1348 : this->_Mylast + _Count); ; 1349 : this->_Mylast += _Count; ; 1350 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1351 : } ; 1352 : } ; 1353 : ; 1354 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1355 : iterator erase(const_iterator _Where) ; 1356 : { // erase element at where ; 1357 : if (_VICONT(_Where) != this ; 1358 : || _VIPTR(_Where) < this->_Myfirst ; 1359 : || this->_Mylast <= _VIPTR(_Where)) ; 1360 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1361 : _Move(_VIPTR(_Where) + 1, this->_Mylast, _VIPTR(_Where)); ; 1362 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1363 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1364 : --this->_Mylast; ; 1365 : return (_Make_iter(_Where)); ; 1366 : } ; 1367 : ; 1368 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1369 : iterator erase(const_iterator _Where) ; 1370 : { // erase element at where ; 1371 : _Move(_VIPTR(_Where) + 1, this->_Mylast, ; 1372 : _VIPTR(_Where)); ; 1373 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1374 : --this->_Mylast; ; 1375 : return (_Make_iter(_Where)); ; 1376 : } ; 1377 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1378 : ; 1379 : iterator erase(const_iterator _First_arg, ; 1380 : const_iterator _Last_arg) ; 1381 : { // erase [_First, _Last) ; 1382 : if (_First_arg == begin() && _Last_arg == end()) ; 1383 : clear(); ; 1384 : else if (_First_arg != _Last_arg) ; 1385 : { // clear partial ; 1386 : iterator _First = _Make_iter(_First_arg); ; 1387 : iterator _Last = _Make_iter(_Last_arg); ; 1388 : ; 1389 : if (_First != _Last) ; 1390 : { // worth doing, copy down over hole ; 1391 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1392 : if (_Last < _First || _VICONT(_First) != this ; 1393 : || _VIPTR(_First) < this->_Myfirst ; 1394 : || this->_Mylast < _VIPTR(_Last)) ; 1395 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1396 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1397 : _VIPTR(_First)); ; 1398 : _Orphan_range(_VIPTR(_First), this->_Mylast); ; 1399 : ; 1400 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1401 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1402 : _VIPTR(_First)); ; 1403 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1404 : ; 1405 : _Destroy(_Ptr, this->_Mylast); ; 1406 : this->_Mylast = _Ptr; ; 1407 : } ; 1408 : } ; 1409 : return (_Make_iter(_First_arg)); ; 1410 : } ; 1411 : ; 1412 : void clear() _NOEXCEPT ; 1413 : { // erase all ; 1414 : this->_Orphan_all(); ; 1415 : _Destroy(this->_Myfirst, this->_Mylast); ; 1416 : this->_Mylast = this->_Myfirst; ; 1417 : } ; 1418 : ; 1419 : void swap(_Myt& _Right) ; 1420 : { // exchange contents with _Right ; 1421 : if (this == &_Right) ; 1422 : ; // same object, do nothing ; 1423 : else if (this->_Getal() == _Right._Getal()) ; 1424 : { // same allocator, swap control information ; 1425 : this->_Swap_all(_Right); ; 1426 : _Swap_adl(this->_Myfirst, _Right._Myfirst); ; 1427 : _Swap_adl(this->_Mylast, _Right._Mylast); ; 1428 : _Swap_adl(this->_Myend, _Right._Myend); ; 1429 : } ; 1430 : ; 1431 : #if _HAS_CPP0X ; 1432 : else if (_Alty::propagate_on_container_swap::value) ; 1433 : { // swap allocators and control information ; 1434 : this->_Swap_alloc(_Right); ; 1435 : _Swap_adl(this->_Myfirst, _Right._Myfirst); ; 1436 : _Swap_adl(this->_Mylast, _Right._Mylast); ; 1437 : _Swap_adl(this->_Myend, _Right._Myend); ; 1438 : } ; 1439 : #endif /* _HAS_CPP0X */ ; 1440 : ; 1441 : else ; 1442 : { // different allocator, do multiple moves ; 1443 : _Myt _Ts = _Move(*this); ; 1444 : ; 1445 : *this = _Move(_Right); ; 1446 : _Right = _Move(_Ts); ; 1447 : } ; 1448 : } ; 1449 : ; 1450 : protected: ; 1451 : void _Assign_n(size_type _Count, const value_type& _Val) ; 1452 : { // assign _Count * _Val ; 1453 : value_type _Tmp = _Val; // in case _Val is in sequence ; 1454 : erase(begin(), end()); ; 1455 : insert(begin(), _Count, _Tmp); ; 1456 : } ; 1457 : ; 1458 : bool _Buy(size_type _Capacity) ; 1459 : { // allocate array with _Capacity elements ; 1460 : this->_Myfirst = pointer(); ; 1461 : this->_Mylast = pointer(); ; 1462 : this->_Myend = pointer(); ; 1463 : ; 1464 : if (_Capacity == 0) ; 1465 : return (false); ; 1466 : else if (max_size() < _Capacity) ; 1467 : _Xlen(); // result too long ; 1468 : else ; 1469 : { // nonempty array, allocate storage ; 1470 : this->_Myfirst = this->_Getal().allocate(_Capacity); ; 1471 : this->_Mylast = this->_Myfirst; ; 1472 : this->_Myend = this->_Myfirst + _Capacity; ; 1473 : } ; 1474 : return (true); ; 1475 : } ; 1476 : ; 1477 : void _Destroy(pointer _First, pointer _Last) ; 1478 : { // destroy [_First, _Last) using allocator ; 1479 : _Alty _Alval(this->_Getal()); ; 1480 : _Destroy_range(_First, _Last, _Alval); ; 1481 : } ; 1482 : ; 1483 : size_type _Grow_to(size_type _Count) const ; 1484 : { // grow by 50% or at least to _Count ; 1485 : size_type _Capacity = capacity(); ; 1486 : ; 1487 : _Capacity = max_size() - _Capacity / 2 < _Capacity ; 1488 : ? 0 : _Capacity + _Capacity / 2; // try to grow by 50% ; 1489 : if (_Capacity < _Count) ; 1490 : _Capacity = _Count; ; 1491 : return (_Capacity); ; 1492 : } ; 1493 : ; 1494 : bool _Inside(const value_type *_Ptr) const ; 1495 : { // test if _Ptr points inside vector ; 1496 : return (_Ptr < this->_Mylast && this->_Myfirst <= _Ptr); ; 1497 : } ; 1498 : ; 1499 : void _Reallocate(size_type _Count) ; 1500 : { // move to array of exactly _Count elements ; 1501 : pointer _Ptr = this->_Getal().allocate(_Count); ; 1502 : ; 1503 : _TRY_BEGIN ; 1504 : _Umove(this->_Myfirst, this->_Mylast, _Ptr); ; 1505 : _CATCH_ALL ; 1506 : this->_Getal().deallocate(_Ptr, _Count); ; 1507 : _RERAISE; ; 1508 : _CATCH_END ; 1509 : ; 1510 : size_type _Size = size(); ; 1511 : if (this->_Myfirst != pointer()) ; 1512 : { // destroy and deallocate old array ; 1513 : _Destroy(this->_Myfirst, this->_Mylast); ; 1514 : this->_Getal().deallocate(this->_Myfirst, ; 1515 : this->_Myend - this->_Myfirst); ; 1516 : } ; 1517 : ; 1518 : this->_Orphan_all(); ; 1519 : this->_Myend = _Ptr + _Count; ; 1520 : this->_Mylast = _Ptr + _Size; ; 1521 : this->_Myfirst = _Ptr; ; 1522 : } ; 1523 : ; 1524 : void _Reserve(size_type _Count) ; 1525 : { // ensure room for _Count new elements, grow exponentially ; 1526 : if (_Unused_capacity() < _Count) ; 1527 : { // need more room, try to get it ; 1528 : if (max_size() - size() < _Count) ; 1529 : _Xlen(); ; 1530 : _Reallocate(_Grow_to(size() + _Count)); ; 1531 : } ; 1532 : } ; 1533 : ; 1534 : void _Tidy() ; 1535 : { // free all storage ; 1536 : if (this->_Myfirst != pointer()) mov eax, DWORD PTR [esi] test eax, eax je SHORT $LN3@vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1542 : this->_Myfirst = pointer(); mov DWORD PTR [esi], 0 ; 1543 : this->_Mylast = pointer(); mov DWORD PTR [esi+4], 0 ; 1544 : this->_Myend = pointer(); mov DWORD PTR [esi+8], 0 $LN3@vector: pop esi ; 900 : _Tidy(); ; 901 : } ret 0 ??1?$vector@HV?$allocator@H@std@@@std@@QAE@XZ ENDP ; std::vector >::~vector > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??0?$vector@NV?$allocator@N@std@@@std@@QAE@I@Z _TEXT SEGMENT __Count$ = 8 ; size = 4 ??0?$vector@NV?$allocator@N@std@@@std@@QAE@I@Z PROC ; std::vector >::vector >, COMDAT ; _this$ = ecx ; 695 : { // construct from _Count * value_type() push ebp mov ebp, esp push esi ; 696 : resize(_Count); push DWORD PTR __Count$[ebp] mov esi, ecx ; 486 : _Myfirst = pointer(); mov DWORD PTR [esi], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR [esi+4], 0 ; 488 : _Myend = pointer(); mov DWORD PTR [esi+8], 0 ; 696 : resize(_Count); call ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z ; std::vector >::resize ; 697 : } mov eax, esi pop esi pop ebp ret 4 ??0?$vector@NV?$allocator@N@std@@@std@@QAE@I@Z ENDP ; std::vector >::vector > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ _TEXT SEGMENT ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ PROC ; std::vector >::~vector >, COMDAT ; _this$ = ecx ; 899 : { // destroy the object push esi mov esi, ecx ; 902 : ; 903 : _Myt& operator=(const _Myt& _Right) ; 904 : { // assign _Right ; 905 : if (this != &_Right) ; 906 : { // different, assign it ; 907 : #if _HAS_CPP0X ; 908 : if (this->_Getal() != _Right._Getal() ; 909 : && _Alty::propagate_on_container_copy_assignment::value) ; 910 : { // change allocator before copying ; 911 : _Tidy(); ; 912 : this->_Change_alloc(_Right._Getal()); ; 913 : } ; 914 : #endif /* _HAS_CPP0X */ ; 915 : ; 916 : this->_Orphan_all(); ; 917 : ; 918 : if (_Right.empty()) ; 919 : clear(); // new sequence empty, erase existing sequence ; 920 : else if (_Right.size() <= size()) ; 921 : { // enough elements, copy new and destroy old ; 922 : pointer _Ptr = _Copy_impl(_Right._Myfirst, ; 923 : _Right._Mylast, this->_Myfirst); // copy new ; 924 : _Destroy(_Ptr, this->_Mylast); // destroy old ; 925 : this->_Mylast = this->_Myfirst + _Right.size(); ; 926 : } ; 927 : else if (_Right.size() <= capacity()) ; 928 : { // enough room, copy and construct new ; 929 : pointer _Ptr = _Right._Myfirst + size(); ; 930 : _Copy_impl(_Right._Myfirst, ; 931 : _Ptr, this->_Myfirst); ; 932 : this->_Mylast = _Ucopy(_Ptr, _Right._Mylast, this->_Mylast); ; 933 : } ; 934 : else ; 935 : { // not enough room, allocate new array and construct new ; 936 : if (this->_Myfirst != pointer()) ; 937 : { // discard old array ; 938 : _Destroy(this->_Myfirst, this->_Mylast); ; 939 : this->_Getal().deallocate(this->_Myfirst, ; 940 : this->_Myend - this->_Myfirst); ; 941 : } ; 942 : if (_Buy(_Right.size())) ; 943 : _TRY_BEGIN ; 944 : this->_Mylast = _Ucopy(_Right._Myfirst, _Right._Mylast, ; 945 : this->_Myfirst); ; 946 : _CATCH_ALL ; 947 : _Tidy(); ; 948 : _RERAISE; ; 949 : _CATCH_END ; 950 : } ; 951 : } ; 952 : return (*this); ; 953 : } ; 954 : ; 955 : void reserve(size_type _Count) ; 956 : { // determine new minimum length of allocated storage ; 957 : if (capacity() < _Count) ; 958 : { // something to do, check and reallocate ; 959 : if (max_size() < _Count) ; 960 : _Xlen(); ; 961 : _Reallocate(_Count); ; 962 : } ; 963 : } ; 964 : ; 965 : size_type capacity() const _NOEXCEPT ; 966 : { // return current length of allocated storage ; 967 : return (this->_Myend - this->_Myfirst); ; 968 : } ; 969 : ; 970 : size_type _Unused_capacity() const _NOEXCEPT ; 971 : { // micro-optimization for capacity() - size() ; 972 : return (this->_Myend - this->_Mylast); ; 973 : } ; 974 : ; 975 : size_type _Has_unused_capacity() const _NOEXCEPT ; 976 : { // micro-optimization for capacity() != size() ; 977 : return (this->_Myend != this->_Mylast); ; 978 : } ; 979 : ; 980 : iterator begin() _NOEXCEPT ; 981 : { // return iterator for beginning of mutable sequence ; 982 : return (iterator(this->_Myfirst, this)); ; 983 : } ; 984 : ; 985 : const_iterator begin() const _NOEXCEPT ; 986 : { // return iterator for beginning of nonmutable sequence ; 987 : return (const_iterator(this->_Myfirst, this)); ; 988 : } ; 989 : ; 990 : iterator end() _NOEXCEPT ; 991 : { // return iterator for end of mutable sequence ; 992 : return (iterator(this->_Mylast, this)); ; 993 : } ; 994 : ; 995 : const_iterator end() const _NOEXCEPT ; 996 : { // return iterator for end of nonmutable sequence ; 997 : return (const_iterator(this->_Mylast, this)); ; 998 : } ; 999 : ; 1000 : iterator _Make_iter(const_iterator _Where) const ; 1001 : { // make iterator from const_iterator ; 1002 : return (iterator(_Where._Ptr, this)); ; 1003 : } ; 1004 : ; 1005 : reverse_iterator rbegin() _NOEXCEPT ; 1006 : { // return iterator for beginning of reversed mutable sequence ; 1007 : return (reverse_iterator(end())); ; 1008 : } ; 1009 : ; 1010 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1011 : { // return iterator for beginning of reversed nonmutable sequence ; 1012 : return (const_reverse_iterator(end())); ; 1013 : } ; 1014 : ; 1015 : reverse_iterator rend() _NOEXCEPT ; 1016 : { // return iterator for end of reversed mutable sequence ; 1017 : return (reverse_iterator(begin())); ; 1018 : } ; 1019 : ; 1020 : const_reverse_iterator rend() const _NOEXCEPT ; 1021 : { // return iterator for end of reversed nonmutable sequence ; 1022 : return (const_reverse_iterator(begin())); ; 1023 : } ; 1024 : ; 1025 : #if _HAS_CPP0X ; 1026 : const_iterator cbegin() const _NOEXCEPT ; 1027 : { // return iterator for beginning of nonmutable sequence ; 1028 : return (((const _Myt *)this)->begin()); ; 1029 : } ; 1030 : ; 1031 : const_iterator cend() const _NOEXCEPT ; 1032 : { // return iterator for end of nonmutable sequence ; 1033 : return (((const _Myt *)this)->end()); ; 1034 : } ; 1035 : ; 1036 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1037 : { // return iterator for beginning of reversed nonmutable sequence ; 1038 : return (((const _Myt *)this)->rbegin()); ; 1039 : } ; 1040 : ; 1041 : const_reverse_iterator crend() const _NOEXCEPT ; 1042 : { // return iterator for end of reversed nonmutable sequence ; 1043 : return (((const _Myt *)this)->rend()); ; 1044 : } ; 1045 : ; 1046 : void shrink_to_fit() ; 1047 : { // reduce capacity ; 1048 : if (_Has_unused_capacity()) ; 1049 : { // worth shrinking, do it ; 1050 : if (empty()) ; 1051 : _Tidy(); ; 1052 : else ; 1053 : _Reallocate(size()); ; 1054 : } ; 1055 : } ; 1056 : #endif /* _HAS_CPP0X */ ; 1057 : ; 1058 : void resize(size_type _Newsize) ; 1059 : { // determine new length, padding as needed ; 1060 : if (_Newsize < size()) ; 1061 : erase(begin() + _Newsize, end()); ; 1062 : else if (size() < _Newsize) ; 1063 : { // pad as needed ; 1064 : _Alty _Alval(this->_Getal()); ; 1065 : _Reserve(_Newsize - size()); ; 1066 : _TRY_BEGIN ; 1067 : _Uninitialized_default_fill_n(this->_Mylast, _Newsize - size(), ; 1068 : _Alval); ; 1069 : _CATCH_ALL ; 1070 : _Tidy(); ; 1071 : _RERAISE; ; 1072 : _CATCH_END ; 1073 : this->_Mylast += _Newsize - size(); ; 1074 : } ; 1075 : } ; 1076 : ; 1077 : void resize(size_type _Newsize, const value_type& _Val) ; 1078 : { // determine new length, padding with _Val elements as needed ; 1079 : if (_Newsize < size()) ; 1080 : erase(begin() + _Newsize, end()); ; 1081 : else if (size() < _Newsize) ; 1082 : _Insert_n(end(), _Newsize - size(), _Val); ; 1083 : } ; 1084 : ; 1085 : size_type size() const _NOEXCEPT ; 1086 : { // return length of sequence ; 1087 : return (this->_Mylast - this->_Myfirst); ; 1088 : } ; 1089 : ; 1090 : size_type max_size() const _NOEXCEPT ; 1091 : { // return maximum possible length of sequence ; 1092 : return (this->_Getal().max_size()); ; 1093 : } ; 1094 : ; 1095 : bool empty() const _NOEXCEPT ; 1096 : { // test if sequence is empty ; 1097 : return (this->_Myfirst == this->_Mylast); ; 1098 : } ; 1099 : ; 1100 : _Alloc get_allocator() const _NOEXCEPT ; 1101 : { // return allocator object for values ; 1102 : return (this->_Getal()); ; 1103 : } ; 1104 : ; 1105 : const_reference at(size_type _Pos) const ; 1106 : { // subscript nonmutable sequence with checking ; 1107 : if (size() <= _Pos) ; 1108 : _Xran(); ; 1109 : return (*(this->_Myfirst + _Pos)); ; 1110 : } ; 1111 : ; 1112 : reference at(size_type _Pos) ; 1113 : { // subscript mutable sequence with checking ; 1114 : if (size() <= _Pos) ; 1115 : _Xran(); ; 1116 : return (*(this->_Myfirst + _Pos)); ; 1117 : } ; 1118 : ; 1119 : const_reference operator[](size_type _Pos) const ; 1120 : { // subscript nonmutable sequence ; 1121 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1122 : if (size() <= _Pos) ; 1123 : { // report error ; 1124 : _DEBUG_ERROR("vector subscript out of range"); ; 1125 : _SCL_SECURE_OUT_OF_RANGE; ; 1126 : } ; 1127 : ; 1128 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1129 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1130 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1131 : ; 1132 : return (*(this->_Myfirst + _Pos)); ; 1133 : } ; 1134 : ; 1135 : reference operator[](size_type _Pos) ; 1136 : { // subscript mutable sequence ; 1137 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1138 : if (size() <= _Pos) ; 1139 : { // report error ; 1140 : _DEBUG_ERROR("vector subscript out of range"); ; 1141 : _SCL_SECURE_OUT_OF_RANGE; ; 1142 : } ; 1143 : ; 1144 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1145 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1146 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1147 : ; 1148 : return (*(this->_Myfirst + _Pos)); ; 1149 : } ; 1150 : ; 1151 : #if _HAS_CPP0X ; 1152 : pointer data() _NOEXCEPT ; 1153 : { // return address of first element ; 1154 : return (this->_Myfirst); ; 1155 : } ; 1156 : ; 1157 : const_pointer data() const _NOEXCEPT ; 1158 : { // return address of first element ; 1159 : return (this->_Myfirst); ; 1160 : } ; 1161 : #endif /* _HAS_CPP0X */ ; 1162 : ; 1163 : reference front() ; 1164 : { // return first element of mutable sequence ; 1165 : return (*begin()); ; 1166 : } ; 1167 : ; 1168 : const_reference front() const ; 1169 : { // return first element of nonmutable sequence ; 1170 : return (*begin()); ; 1171 : } ; 1172 : ; 1173 : reference back() ; 1174 : { // return last element of mutable sequence ; 1175 : return (*(end() - 1)); ; 1176 : } ; 1177 : ; 1178 : const_reference back() const ; 1179 : { // return last element of nonmutable sequence ; 1180 : return (*(end() - 1)); ; 1181 : } ; 1182 : ; 1183 : void push_back(const value_type& _Val) ; 1184 : { // insert element at end ; 1185 : if (_Inside(_STD addressof(_Val))) ; 1186 : { // push back an element ; 1187 : size_type _Idx = _STD addressof(_Val) - this->_Myfirst; ; 1188 : if (this->_Mylast == this->_Myend) ; 1189 : _Reserve(1); ; 1190 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1191 : this->_Getal().construct(this->_Mylast, ; 1192 : this->_Myfirst[_Idx]); ; 1193 : ++this->_Mylast; ; 1194 : } ; 1195 : else ; 1196 : { // push back a non-element ; 1197 : if (this->_Mylast == this->_Myend) ; 1198 : _Reserve(1); ; 1199 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1200 : this->_Getal().construct(this->_Mylast, ; 1201 : _Val); ; 1202 : ++this->_Mylast; ; 1203 : } ; 1204 : } ; 1205 : ; 1206 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1207 : void pop_back() ; 1208 : { // erase element at end ; 1209 : if (empty()) ; 1210 : _DEBUG_ERROR("vector empty before pop"); ; 1211 : else ; 1212 : { // erase last element ; 1213 : _Orphan_range(this->_Mylast - 1, this->_Mylast); ; 1214 : this->_Getal().destroy(this->_Mylast - 1); ; 1215 : --this->_Mylast; ; 1216 : } ; 1217 : } ; 1218 : ; 1219 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1220 : void pop_back() ; 1221 : { // erase element at end ; 1222 : if (!empty()) ; 1223 : { // erase last element ; 1224 : this->_Getal().destroy(this->_Mylast - 1); ; 1225 : --this->_Mylast; ; 1226 : } ; 1227 : } ; 1228 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1229 : ; 1230 : template ; 1231 : typename enable_if<_Is_iterator<_Iter>::value, ; 1232 : void>::type ; 1233 : assign(_Iter _First, _Iter _Last) ; 1234 : { // assign [_First, _Last), input iterators ; 1235 : erase(begin(), end()); ; 1236 : insert(begin(), _First, _Last); ; 1237 : } ; 1238 : ; 1239 : void assign(size_type _Count, const value_type& _Val) ; 1240 : { // assign _Count * _Val ; 1241 : _Assign_n(_Count, _Val); ; 1242 : } ; 1243 : ; 1244 : iterator insert(const_iterator _Where, const _Ty& _Val) ; 1245 : { // insert _Val at _Where ; 1246 : return (_Insert_n(_Where, (size_type)1, _Val)); ; 1247 : } ; 1248 : ; 1249 : iterator insert(const_iterator _Where, size_type _Count, ; 1250 : const _Ty& _Val) ; 1251 : { // insert _Count * _Val at _Where ; 1252 : return (_Insert_n(_Where, _Count, _Val)); ; 1253 : } ; 1254 : ; 1255 : template ; 1256 : typename enable_if<_Is_iterator<_Iter>::value, ; 1257 : iterator>::type ; 1258 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1259 : { // insert [_First, _Last) at _Where ; 1260 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1261 : _Insert(_Where, _First, _Last, _Iter_cat(_First)); ; 1262 : return (begin() + _Off); ; 1263 : } ; 1264 : ; 1265 : template ; 1266 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1267 : input_iterator_tag) ; 1268 : { // insert [_First, _Last) at _Where, input iterators ; 1269 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1270 : ; 1271 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1272 : if (size() < _Off) ; 1273 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1274 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1275 : ; 1276 : if (_First != _Last) ; 1277 : { // worth doing, gather at end and rotate into place ; 1278 : size_type _Oldsize = size(); ; 1279 : ; 1280 : _TRY_BEGIN ; 1281 : for (; _First != _Last; ++_First) ; 1282 : push_back(*_First); // append ; 1283 : ; 1284 : _CATCH_ALL ; 1285 : erase(begin() + _Oldsize, end()); ; 1286 : _RERAISE; ; 1287 : _CATCH_END ; 1288 : ; 1289 : _STD rotate(begin() + _Off, begin() + _Oldsize, end()); ; 1290 : } ; 1291 : } ; 1292 : ; 1293 : template ; 1294 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1295 : forward_iterator_tag) ; 1296 : { // insert [_First, _Last) at _Where, forward iterators ; 1297 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1298 : if (_VICONT(_Where) != this ; 1299 : || _VIPTR(_Where) < this->_Myfirst ; 1300 : || this->_Mylast < _VIPTR(_Where)) ; 1301 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1302 : _DEBUG_RANGE(_First, _Last); ; 1303 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1304 : ; 1305 : size_type _Count = 0; ; 1306 : _Distance(_First, _Last, _Count); ; 1307 : ; 1308 : if (_Count == 0) ; 1309 : ; ; 1310 : else if (_Unused_capacity() < _Count) ; 1311 : { // not enough room, reallocate ; 1312 : if (max_size() - size() < _Count) ; 1313 : _Xlen(); // result too long ; 1314 : ; 1315 : size_type _Capacity = _Grow_to(size() + _Count); ; 1316 : pointer _Newvec = this->_Getal().allocate(_Capacity); ; 1317 : pointer _Ptr = _Newvec; ; 1318 : ; 1319 : _TRY_BEGIN ; 1320 : _Ptr = _Umove(this->_Myfirst, _VIPTR(_Where), ; 1321 : _Newvec); // copy prefix ; 1322 : _Ptr = _Ucopy(_First, _Last, _Ptr); // add new stuff ; 1323 : _Umove(_VIPTR(_Where), this->_Mylast, ; 1324 : _Ptr); // copy suffix ; 1325 : _CATCH_ALL ; 1326 : _Destroy(_Newvec, _Ptr); ; 1327 : this->_Getal().deallocate(_Newvec, _Capacity); ; 1328 : _RERAISE; ; 1329 : _CATCH_END ; 1330 : ; 1331 : _Count += size(); ; 1332 : if (this->_Myfirst != pointer()) ; 1333 : { // destroy and deallocate old array ; 1334 : _Destroy(this->_Myfirst, this->_Mylast); ; 1335 : this->_Getal().deallocate(this->_Myfirst, ; 1336 : this->_Myend - this->_Myfirst); ; 1337 : } ; 1338 : ; 1339 : this->_Orphan_all(); ; 1340 : this->_Myend = _Newvec + _Capacity; ; 1341 : this->_Mylast = _Newvec + _Count; ; 1342 : this->_Myfirst = _Newvec; ; 1343 : } ; 1344 : else ; 1345 : { // new stuff fits, append and rotate into place ; 1346 : _Ucopy(_First, _Last, this->_Mylast); ; 1347 : _STD rotate(_VIPTR(_Where), this->_Mylast, ; 1348 : this->_Mylast + _Count); ; 1349 : this->_Mylast += _Count; ; 1350 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1351 : } ; 1352 : } ; 1353 : ; 1354 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1355 : iterator erase(const_iterator _Where) ; 1356 : { // erase element at where ; 1357 : if (_VICONT(_Where) != this ; 1358 : || _VIPTR(_Where) < this->_Myfirst ; 1359 : || this->_Mylast <= _VIPTR(_Where)) ; 1360 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1361 : _Move(_VIPTR(_Where) + 1, this->_Mylast, _VIPTR(_Where)); ; 1362 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1363 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1364 : --this->_Mylast; ; 1365 : return (_Make_iter(_Where)); ; 1366 : } ; 1367 : ; 1368 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1369 : iterator erase(const_iterator _Where) ; 1370 : { // erase element at where ; 1371 : _Move(_VIPTR(_Where) + 1, this->_Mylast, ; 1372 : _VIPTR(_Where)); ; 1373 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1374 : --this->_Mylast; ; 1375 : return (_Make_iter(_Where)); ; 1376 : } ; 1377 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1378 : ; 1379 : iterator erase(const_iterator _First_arg, ; 1380 : const_iterator _Last_arg) ; 1381 : { // erase [_First, _Last) ; 1382 : if (_First_arg == begin() && _Last_arg == end()) ; 1383 : clear(); ; 1384 : else if (_First_arg != _Last_arg) ; 1385 : { // clear partial ; 1386 : iterator _First = _Make_iter(_First_arg); ; 1387 : iterator _Last = _Make_iter(_Last_arg); ; 1388 : ; 1389 : if (_First != _Last) ; 1390 : { // worth doing, copy down over hole ; 1391 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1392 : if (_Last < _First || _VICONT(_First) != this ; 1393 : || _VIPTR(_First) < this->_Myfirst ; 1394 : || this->_Mylast < _VIPTR(_Last)) ; 1395 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1396 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1397 : _VIPTR(_First)); ; 1398 : _Orphan_range(_VIPTR(_First), this->_Mylast); ; 1399 : ; 1400 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1401 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1402 : _VIPTR(_First)); ; 1403 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1404 : ; 1405 : _Destroy(_Ptr, this->_Mylast); ; 1406 : this->_Mylast = _Ptr; ; 1407 : } ; 1408 : } ; 1409 : return (_Make_iter(_First_arg)); ; 1410 : } ; 1411 : ; 1412 : void clear() _NOEXCEPT ; 1413 : { // erase all ; 1414 : this->_Orphan_all(); ; 1415 : _Destroy(this->_Myfirst, this->_Mylast); ; 1416 : this->_Mylast = this->_Myfirst; ; 1417 : } ; 1418 : ; 1419 : void swap(_Myt& _Right) ; 1420 : { // exchange contents with _Right ; 1421 : if (this == &_Right) ; 1422 : ; // same object, do nothing ; 1423 : else if (this->_Getal() == _Right._Getal()) ; 1424 : { // same allocator, swap control information ; 1425 : this->_Swap_all(_Right); ; 1426 : _Swap_adl(this->_Myfirst, _Right._Myfirst); ; 1427 : _Swap_adl(this->_Mylast, _Right._Mylast); ; 1428 : _Swap_adl(this->_Myend, _Right._Myend); ; 1429 : } ; 1430 : ; 1431 : #if _HAS_CPP0X ; 1432 : else if (_Alty::propagate_on_container_swap::value) ; 1433 : { // swap allocators and control information ; 1434 : this->_Swap_alloc(_Right); ; 1435 : _Swap_adl(this->_Myfirst, _Right._Myfirst); ; 1436 : _Swap_adl(this->_Mylast, _Right._Mylast); ; 1437 : _Swap_adl(this->_Myend, _Right._Myend); ; 1438 : } ; 1439 : #endif /* _HAS_CPP0X */ ; 1440 : ; 1441 : else ; 1442 : { // different allocator, do multiple moves ; 1443 : _Myt _Ts = _Move(*this); ; 1444 : ; 1445 : *this = _Move(_Right); ; 1446 : _Right = _Move(_Ts); ; 1447 : } ; 1448 : } ; 1449 : ; 1450 : protected: ; 1451 : void _Assign_n(size_type _Count, const value_type& _Val) ; 1452 : { // assign _Count * _Val ; 1453 : value_type _Tmp = _Val; // in case _Val is in sequence ; 1454 : erase(begin(), end()); ; 1455 : insert(begin(), _Count, _Tmp); ; 1456 : } ; 1457 : ; 1458 : bool _Buy(size_type _Capacity) ; 1459 : { // allocate array with _Capacity elements ; 1460 : this->_Myfirst = pointer(); ; 1461 : this->_Mylast = pointer(); ; 1462 : this->_Myend = pointer(); ; 1463 : ; 1464 : if (_Capacity == 0) ; 1465 : return (false); ; 1466 : else if (max_size() < _Capacity) ; 1467 : _Xlen(); // result too long ; 1468 : else ; 1469 : { // nonempty array, allocate storage ; 1470 : this->_Myfirst = this->_Getal().allocate(_Capacity); ; 1471 : this->_Mylast = this->_Myfirst; ; 1472 : this->_Myend = this->_Myfirst + _Capacity; ; 1473 : } ; 1474 : return (true); ; 1475 : } ; 1476 : ; 1477 : void _Destroy(pointer _First, pointer _Last) ; 1478 : { // destroy [_First, _Last) using allocator ; 1479 : _Alty _Alval(this->_Getal()); ; 1480 : _Destroy_range(_First, _Last, _Alval); ; 1481 : } ; 1482 : ; 1483 : size_type _Grow_to(size_type _Count) const ; 1484 : { // grow by 50% or at least to _Count ; 1485 : size_type _Capacity = capacity(); ; 1486 : ; 1487 : _Capacity = max_size() - _Capacity / 2 < _Capacity ; 1488 : ? 0 : _Capacity + _Capacity / 2; // try to grow by 50% ; 1489 : if (_Capacity < _Count) ; 1490 : _Capacity = _Count; ; 1491 : return (_Capacity); ; 1492 : } ; 1493 : ; 1494 : bool _Inside(const value_type *_Ptr) const ; 1495 : { // test if _Ptr points inside vector ; 1496 : return (_Ptr < this->_Mylast && this->_Myfirst <= _Ptr); ; 1497 : } ; 1498 : ; 1499 : void _Reallocate(size_type _Count) ; 1500 : { // move to array of exactly _Count elements ; 1501 : pointer _Ptr = this->_Getal().allocate(_Count); ; 1502 : ; 1503 : _TRY_BEGIN ; 1504 : _Umove(this->_Myfirst, this->_Mylast, _Ptr); ; 1505 : _CATCH_ALL ; 1506 : this->_Getal().deallocate(_Ptr, _Count); ; 1507 : _RERAISE; ; 1508 : _CATCH_END ; 1509 : ; 1510 : size_type _Size = size(); ; 1511 : if (this->_Myfirst != pointer()) ; 1512 : { // destroy and deallocate old array ; 1513 : _Destroy(this->_Myfirst, this->_Mylast); ; 1514 : this->_Getal().deallocate(this->_Myfirst, ; 1515 : this->_Myend - this->_Myfirst); ; 1516 : } ; 1517 : ; 1518 : this->_Orphan_all(); ; 1519 : this->_Myend = _Ptr + _Count; ; 1520 : this->_Mylast = _Ptr + _Size; ; 1521 : this->_Myfirst = _Ptr; ; 1522 : } ; 1523 : ; 1524 : void _Reserve(size_type _Count) ; 1525 : { // ensure room for _Count new elements, grow exponentially ; 1526 : if (_Unused_capacity() < _Count) ; 1527 : { // need more room, try to get it ; 1528 : if (max_size() - size() < _Count) ; 1529 : _Xlen(); ; 1530 : _Reallocate(_Grow_to(size() + _Count)); ; 1531 : } ; 1532 : } ; 1533 : ; 1534 : void _Tidy() ; 1535 : { // free all storage ; 1536 : if (this->_Myfirst != pointer()) mov eax, DWORD PTR [esi] test eax, eax je SHORT $LN3@vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1542 : this->_Myfirst = pointer(); mov DWORD PTR [esi], 0 ; 1543 : this->_Mylast = pointer(); mov DWORD PTR [esi+4], 0 ; 1544 : this->_Myend = pointer(); mov DWORD PTR [esi+8], 0 $LN3@vector: pop esi ; 900 : _Tidy(); ; 901 : } ret 0 ??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ ENDP ; std::vector >::~vector > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??A?$vector@NV?$allocator@N@std@@@std@@QAEAANI@Z _TEXT SEGMENT __Pos$ = 8 ; size = 4 ??A?$vector@NV?$allocator@N@std@@@std@@QAEAANI@Z PROC ; std::vector >::operator[], COMDAT ; _this$ = ecx ; 1136 : { // subscript mutable sequence push ebp mov ebp, esp ; 1137 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1138 : if (size() <= _Pos) ; 1139 : { // report error ; 1140 : _DEBUG_ERROR("vector subscript out of range"); ; 1141 : _SCL_SECURE_OUT_OF_RANGE; ; 1142 : } ; 1143 : ; 1144 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1145 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1146 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1147 : ; 1148 : return (*(this->_Myfirst + _Pos)); mov ecx, DWORD PTR [ecx] mov eax, DWORD PTR __Pos$[ebp] lea eax, DWORD PTR [ecx+eax*8] ; 1149 : } pop ebp ret 4 ??A?$vector@NV?$allocator@N@std@@@std@@QAEAANI@Z ENDP ; std::vector >::operator[] _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z _TEXT SEGMENT __Ptr$ = 8 ; size = 4 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z PROC ; std::basic_string,std::allocator >::assign, COMDAT ; _this$ = ecx ; 1142 : { // assign [_Ptr, ) push ebp mov ebp, esp push esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov esi, DWORD PTR __Ptr$[ebp] cmp BYTE PTR [esi], 0 jne SHORT $LN5@assign xor edx, edx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push edx push esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign pop esi ; 1145 : } pop ebp ret 4 $LN5@assign: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 523 : : _CSTD strlen(_First)); mov edx, esi push edi lea edi, DWORD PTR [edx+1] $LL7@assign: mov al, BYTE PTR [edx] inc edx test al, al jne SHORT $LL7@assign sub edx, edi pop edi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); push edx push esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string,std::allocator >::assign pop esi ; 1145 : } pop ebp ret 4 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z ENDP ; std::basic_string,std::allocator >::assign _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ _TEXT SEGMENT ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ PROC ; std::basic_string,std::allocator >::size, COMDAT ; _this$ = ecx ; 1733 : return (this->_Mysize); mov eax, DWORD PTR [ecx+16] ; 1734 : } ret 0 ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ ENDP ; std::basic_string,std::allocator >::size _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEX_NI@Z _TEXT SEGMENT __Built$ = 8 ; size = 1 __Newsize$ = 12 ; size = 4 ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEX_NI@Z PROC ; std::basic_string,std::allocator >::_Tidy, COMDAT ; _this$ = ecx ; 2253 : { // initialize buffer, deallocating any storage push ebp mov ebp, esp ; 2254 : if (!_Built) cmp BYTE PTR __Built$[ebp], 0 push esi push edi mov edi, DWORD PTR __Newsize$[ebp] mov esi, ecx je SHORT $LN19@Tidy ; 2255 : ; ; 2256 : else if (this->_BUF_SIZE <= this->_Myres) cmp DWORD PTR [esi+20], 16 ; 00000010H jb SHORT $LN19@Tidy ; 2257 : { // copy any leftovers to small buffer and deallocate ; 2258 : pointer _Ptr = this->_Bx._Ptr; push ebx mov ebx, DWORD PTR [esi] ; 2259 : this->_Getal().destroy(&this->_Bx._Ptr); ; 2260 : if (0 < _Newsize) test edi, edi je SHORT $LN14@Tidy ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 530 : : (_Elem *)_CSTD memcpy(_First1, _First2, _Count)); push edi push ebx push esi call _memcpy add esp, 12 ; 0000000cH $LN14@Tidy: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push ebx call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 pop ebx $LN19@Tidy: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], edi ; 2261 : _Traits::copy(this->_Bx._Buf, ; 2262 : _STD addressof(*_Ptr), _Newsize); ; 2263 : this->_Getal().deallocate(_Ptr, this->_Myres + 1); ; 2264 : } ; 2265 : this->_Myres = this->_BUF_SIZE - 1; mov DWORD PTR [esi+20], 15 ; 0000000fH ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [edi+esi], 0 pop edi pop esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 2267 : } pop ebp ret 8 ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEX_NI@Z ENDP ; std::basic_string,std::allocator >::_Tidy _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; COMDAT ??0?$allocator@D@std@@QAE@XZ _TEXT SEGMENT ??0?$allocator@D@std@@QAE@XZ PROC ; std::allocator::allocator, COMDAT ; _this$ = ecx ; 566 : { // construct default allocator (do nothing) ; 567 : } mov eax, ecx ret 0 ??0?$allocator@D@std@@QAE@XZ ENDP ; std::allocator::allocator _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ??0?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QAE@ABV?$allocator@D@1@@Z _TEXT SEGMENT ___formal$dead$ = 8 ; size = 4 ??0?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QAE@ABV?$allocator@D@1@@Z PROC ; std::_String_alloc<0,std::_String_base_types > >::_String_alloc<0,std::_String_base_types > >, COMDAT ; _this$ = ecx ; 498 : _Mysize = 0; mov DWORD PTR [ecx+16], 0 ; 499 : _Myres = 0; mov DWORD PTR [ecx+20], 0 ; 636 : { // construct allocator from _Al ; 637 : } mov eax, ecx ret 4 ??0?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QAE@ABV?$allocator@D@1@@Z ENDP ; std::_String_alloc<0,std::_String_base_types > >::_String_alloc<0,std::_String_base_types > > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?_Getal@?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@D@std@@@2@XZ _TEXT SEGMENT ___$ReturnUdt$ = 8 ; size = 4 ?_Getal@?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@D@std@@@2@XZ PROC ; std::_String_alloc<0,std::_String_base_types > >::_Getal, COMDAT ; _this$dead$ = ecx ; 688 : { // get reference to allocator push ebp mov ebp, esp ; 689 : return (_Alty()); mov eax, DWORD PTR ___$ReturnUdt$[ebp] ; 690 : } pop ebp ret 4 ?_Getal@?$_String_alloc@$0A@U?$_String_base_types@DV?$allocator@D@std@@@std@@@std@@QBE?AU?$_Wrap_alloc@V?$allocator@D@std@@@2@XZ ENDP ; std::_String_alloc<0,std::_String_base_types > >::_Getal _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QBEPBDXZ _TEXT SEGMENT ?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QBEPBDXZ PROC ; std::_String_val >::_Myptr, COMDAT ; _this$ = ecx ; 522 : return (this->_BUF_SIZE <= this->_Myres ; 523 : ? _STD addressof(*this->_Bx._Ptr) ; 524 : : this->_Bx._Buf); cmp DWORD PTR [ecx+20], 16 ; 00000010H jb SHORT $LN3@Myptr mov eax, DWORD PTR [ecx] ; 525 : } ret 0 $LN3@Myptr: ; 522 : return (this->_BUF_SIZE <= this->_Myres ; 523 : ? _STD addressof(*this->_Bx._Ptr) ; 524 : : this->_Bx._Buf); mov eax, ecx ; 525 : } ret 0 ?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QBEPBDXZ ENDP ; std::_String_val >::_Myptr _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ?_Tidy@?$vector@HV?$allocator@H@std@@@std@@IAEXXZ _TEXT SEGMENT ?_Tidy@?$vector@HV?$allocator@H@std@@@std@@IAEXXZ PROC ; std::vector >::_Tidy, COMDAT ; _this$ = ecx ; 1535 : { // free all storage push esi mov esi, ecx ; 1536 : if (this->_Myfirst != pointer()) mov eax, DWORD PTR [esi] test eax, eax je SHORT $LN1@Tidy ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1542 : this->_Myfirst = pointer(); mov DWORD PTR [esi], 0 ; 1543 : this->_Mylast = pointer(); mov DWORD PTR [esi+4], 0 ; 1544 : this->_Myend = pointer(); mov DWORD PTR [esi+8], 0 $LN1@Tidy: pop esi ; 1545 : } ; 1546 : } ret 0 ?_Tidy@?$vector@HV?$allocator@H@std@@@std@@IAEXXZ ENDP ; std::vector >::_Tidy _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; COMDAT ??0?$allocator@H@std@@QAE@XZ _TEXT SEGMENT ??0?$allocator@H@std@@QAE@XZ PROC ; std::allocator::allocator, COMDAT ; _this$ = ecx ; 566 : { // construct default allocator (do nothing) ; 567 : } mov eax, ecx ret 0 ??0?$allocator@H@std@@QAE@XZ ENDP ; std::allocator::allocator _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@HV?$allocator@H@std@@@std@@@std@@QAE@ABV?$allocator@H@1@@Z _TEXT SEGMENT ___formal$dead$ = 8 ; size = 4 ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@HV?$allocator@H@std@@@std@@@std@@QAE@ABV?$allocator@H@1@@Z PROC ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > >, COMDAT ; _this$ = ecx ; 486 : _Myfirst = pointer(); mov DWORD PTR [ecx], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR [ecx+4], 0 ; 488 : _Myend = pointer(); mov DWORD PTR [ecx+8], 0 ; 594 : { // construct allocator from _Al ; 595 : } mov eax, ecx ret 4 ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@HV?$allocator@H@std@@@std@@@std@@QAE@ABV?$allocator@H@1@@Z ENDP ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z _TEXT SEGMENT __Newsize$ = 8 ; size = 4 ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z PROC ; std::vector >::resize, COMDAT ; _this$ = ecx ; 1059 : { // determine new length, padding as needed push ebp mov ebp, esp push ebx mov ebx, ecx push esi ; 1087 : return (this->_Mylast - this->_Myfirst); mov eax, DWORD PTR [ebx+4] mov edx, DWORD PTR [ebx] ; 1060 : if (_Newsize < size()) mov esi, DWORD PTR __Newsize$[ebp] ; 1087 : return (this->_Mylast - this->_Myfirst); mov ecx, eax sub ecx, edx sar ecx, 3 push edi ; 1060 : if (_Newsize < size()) cmp ecx, esi jbe SHORT $LN135@resize ; 170 : _Ptr += _Off; lea esi, DWORD PTR [edx+esi*8] ; 171 : return (*this); ; 172 : } ; 173 : ; 174 : _Myiter operator+(difference_type _Off) const ; 175 : { // return this + integer ; 176 : _Myiter _Tmp = *this; ; 177 : return (_Tmp += _Off); ; 178 : } ; 179 : ; 180 : _Myiter& operator-=(difference_type _Off) ; 181 : { // decrement by integer ; 182 : return (*this += -_Off); ; 183 : } ; 184 : ; 185 : _Myiter operator-(difference_type _Off) const ; 186 : { // return this - integer ; 187 : _Myiter _Tmp = *this; ; 188 : return (_Tmp -= _Off); ; 189 : } ; 190 : ; 191 : difference_type operator-(const _Myiter& _Right) const ; 192 : { // return difference of iterators ; 193 : _Compat(_Right); ; 194 : return (this->_Ptr - _Right._Ptr); ; 195 : } ; 196 : ; 197 : reference operator[](difference_type _Off) const ; 198 : { // subscript ; 199 : return (*(*this + _Off)); ; 200 : } ; 201 : ; 202 : bool operator==(const _Myiter& _Right) const ; 203 : { // test for iterator equality ; 204 : _Compat(_Right); ; 205 : return (this->_Ptr == _Right._Ptr); cmp esi, edx ; 1088 : } ; 1089 : ; 1090 : size_type max_size() const _NOEXCEPT ; 1091 : { // return maximum possible length of sequence ; 1092 : return (this->_Getal().max_size()); ; 1093 : } ; 1094 : ; 1095 : bool empty() const _NOEXCEPT ; 1096 : { // test if sequence is empty ; 1097 : return (this->_Myfirst == this->_Mylast); ; 1098 : } ; 1099 : ; 1100 : _Alloc get_allocator() const _NOEXCEPT ; 1101 : { // return allocator object for values ; 1102 : return (this->_Getal()); ; 1103 : } ; 1104 : ; 1105 : const_reference at(size_type _Pos) const ; 1106 : { // subscript nonmutable sequence with checking ; 1107 : if (size() <= _Pos) ; 1108 : _Xran(); ; 1109 : return (*(this->_Myfirst + _Pos)); ; 1110 : } ; 1111 : ; 1112 : reference at(size_type _Pos) ; 1113 : { // subscript mutable sequence with checking ; 1114 : if (size() <= _Pos) ; 1115 : _Xran(); ; 1116 : return (*(this->_Myfirst + _Pos)); ; 1117 : } ; 1118 : ; 1119 : const_reference operator[](size_type _Pos) const ; 1120 : { // subscript nonmutable sequence ; 1121 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1122 : if (size() <= _Pos) ; 1123 : { // report error ; 1124 : _DEBUG_ERROR("vector subscript out of range"); ; 1125 : _SCL_SECURE_OUT_OF_RANGE; ; 1126 : } ; 1127 : ; 1128 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1129 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1130 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1131 : ; 1132 : return (*(this->_Myfirst + _Pos)); ; 1133 : } ; 1134 : ; 1135 : reference operator[](size_type _Pos) ; 1136 : { // subscript mutable sequence ; 1137 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1138 : if (size() <= _Pos) ; 1139 : { // report error ; 1140 : _DEBUG_ERROR("vector subscript out of range"); ; 1141 : _SCL_SECURE_OUT_OF_RANGE; ; 1142 : } ; 1143 : ; 1144 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1145 : _SCL_SECURE_VALIDATE_RANGE(_Pos < size()); ; 1146 : #endif /* _ITERATOR_DEBUG_LEVEL */ ; 1147 : ; 1148 : return (*(this->_Myfirst + _Pos)); ; 1149 : } ; 1150 : ; 1151 : #if _HAS_CPP0X ; 1152 : pointer data() _NOEXCEPT ; 1153 : { // return address of first element ; 1154 : return (this->_Myfirst); ; 1155 : } ; 1156 : ; 1157 : const_pointer data() const _NOEXCEPT ; 1158 : { // return address of first element ; 1159 : return (this->_Myfirst); ; 1160 : } ; 1161 : #endif /* _HAS_CPP0X */ ; 1162 : ; 1163 : reference front() ; 1164 : { // return first element of mutable sequence ; 1165 : return (*begin()); ; 1166 : } ; 1167 : ; 1168 : const_reference front() const ; 1169 : { // return first element of nonmutable sequence ; 1170 : return (*begin()); ; 1171 : } ; 1172 : ; 1173 : reference back() ; 1174 : { // return last element of mutable sequence ; 1175 : return (*(end() - 1)); ; 1176 : } ; 1177 : ; 1178 : const_reference back() const ; 1179 : { // return last element of nonmutable sequence ; 1180 : return (*(end() - 1)); ; 1181 : } ; 1182 : ; 1183 : void push_back(const value_type& _Val) ; 1184 : { // insert element at end ; 1185 : if (_Inside(_STD addressof(_Val))) ; 1186 : { // push back an element ; 1187 : size_type _Idx = _STD addressof(_Val) - this->_Myfirst; ; 1188 : if (this->_Mylast == this->_Myend) ; 1189 : _Reserve(1); ; 1190 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1191 : this->_Getal().construct(this->_Mylast, ; 1192 : this->_Myfirst[_Idx]); ; 1193 : ++this->_Mylast; ; 1194 : } ; 1195 : else ; 1196 : { // push back a non-element ; 1197 : if (this->_Mylast == this->_Myend) ; 1198 : _Reserve(1); ; 1199 : _Orphan_range(this->_Mylast, this->_Mylast); ; 1200 : this->_Getal().construct(this->_Mylast, ; 1201 : _Val); ; 1202 : ++this->_Mylast; ; 1203 : } ; 1204 : } ; 1205 : ; 1206 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1207 : void pop_back() ; 1208 : { // erase element at end ; 1209 : if (empty()) ; 1210 : _DEBUG_ERROR("vector empty before pop"); ; 1211 : else ; 1212 : { // erase last element ; 1213 : _Orphan_range(this->_Mylast - 1, this->_Mylast); ; 1214 : this->_Getal().destroy(this->_Mylast - 1); ; 1215 : --this->_Mylast; ; 1216 : } ; 1217 : } ; 1218 : ; 1219 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1220 : void pop_back() ; 1221 : { // erase element at end ; 1222 : if (!empty()) ; 1223 : { // erase last element ; 1224 : this->_Getal().destroy(this->_Mylast - 1); ; 1225 : --this->_Mylast; ; 1226 : } ; 1227 : } ; 1228 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1229 : ; 1230 : template ; 1231 : typename enable_if<_Is_iterator<_Iter>::value, ; 1232 : void>::type ; 1233 : assign(_Iter _First, _Iter _Last) ; 1234 : { // assign [_First, _Last), input iterators ; 1235 : erase(begin(), end()); ; 1236 : insert(begin(), _First, _Last); ; 1237 : } ; 1238 : ; 1239 : void assign(size_type _Count, const value_type& _Val) ; 1240 : { // assign _Count * _Val ; 1241 : _Assign_n(_Count, _Val); ; 1242 : } ; 1243 : ; 1244 : iterator insert(const_iterator _Where, const _Ty& _Val) ; 1245 : { // insert _Val at _Where ; 1246 : return (_Insert_n(_Where, (size_type)1, _Val)); ; 1247 : } ; 1248 : ; 1249 : iterator insert(const_iterator _Where, size_type _Count, ; 1250 : const _Ty& _Val) ; 1251 : { // insert _Count * _Val at _Where ; 1252 : return (_Insert_n(_Where, _Count, _Val)); ; 1253 : } ; 1254 : ; 1255 : template ; 1256 : typename enable_if<_Is_iterator<_Iter>::value, ; 1257 : iterator>::type ; 1258 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1259 : { // insert [_First, _Last) at _Where ; 1260 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1261 : _Insert(_Where, _First, _Last, _Iter_cat(_First)); ; 1262 : return (begin() + _Off); ; 1263 : } ; 1264 : ; 1265 : template ; 1266 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1267 : input_iterator_tag) ; 1268 : { // insert [_First, _Last) at _Where, input iterators ; 1269 : size_type _Off = _VIPTR(_Where) - this->_Myfirst; ; 1270 : ; 1271 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1272 : if (size() < _Off) ; 1273 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1274 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1275 : ; 1276 : if (_First != _Last) ; 1277 : { // worth doing, gather at end and rotate into place ; 1278 : size_type _Oldsize = size(); ; 1279 : ; 1280 : _TRY_BEGIN ; 1281 : for (; _First != _Last; ++_First) ; 1282 : push_back(*_First); // append ; 1283 : ; 1284 : _CATCH_ALL ; 1285 : erase(begin() + _Oldsize, end()); ; 1286 : _RERAISE; ; 1287 : _CATCH_END ; 1288 : ; 1289 : _STD rotate(begin() + _Off, begin() + _Oldsize, end()); ; 1290 : } ; 1291 : } ; 1292 : ; 1293 : template ; 1294 : void _Insert(const_iterator _Where, _Iter _First, _Iter _Last, ; 1295 : forward_iterator_tag) ; 1296 : { // insert [_First, _Last) at _Where, forward iterators ; 1297 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1298 : if (_VICONT(_Where) != this ; 1299 : || _VIPTR(_Where) < this->_Myfirst ; 1300 : || this->_Mylast < _VIPTR(_Where)) ; 1301 : _DEBUG_ERROR("vector insert iterator outside range"); ; 1302 : _DEBUG_RANGE(_First, _Last); ; 1303 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1304 : ; 1305 : size_type _Count = 0; ; 1306 : _Distance(_First, _Last, _Count); ; 1307 : ; 1308 : if (_Count == 0) ; 1309 : ; ; 1310 : else if (_Unused_capacity() < _Count) ; 1311 : { // not enough room, reallocate ; 1312 : if (max_size() - size() < _Count) ; 1313 : _Xlen(); // result too long ; 1314 : ; 1315 : size_type _Capacity = _Grow_to(size() + _Count); ; 1316 : pointer _Newvec = this->_Getal().allocate(_Capacity); ; 1317 : pointer _Ptr = _Newvec; ; 1318 : ; 1319 : _TRY_BEGIN ; 1320 : _Ptr = _Umove(this->_Myfirst, _VIPTR(_Where), ; 1321 : _Newvec); // copy prefix ; 1322 : _Ptr = _Ucopy(_First, _Last, _Ptr); // add new stuff ; 1323 : _Umove(_VIPTR(_Where), this->_Mylast, ; 1324 : _Ptr); // copy suffix ; 1325 : _CATCH_ALL ; 1326 : _Destroy(_Newvec, _Ptr); ; 1327 : this->_Getal().deallocate(_Newvec, _Capacity); ; 1328 : _RERAISE; ; 1329 : _CATCH_END ; 1330 : ; 1331 : _Count += size(); ; 1332 : if (this->_Myfirst != pointer()) ; 1333 : { // destroy and deallocate old array ; 1334 : _Destroy(this->_Myfirst, this->_Mylast); ; 1335 : this->_Getal().deallocate(this->_Myfirst, ; 1336 : this->_Myend - this->_Myfirst); ; 1337 : } ; 1338 : ; 1339 : this->_Orphan_all(); ; 1340 : this->_Myend = _Newvec + _Capacity; ; 1341 : this->_Mylast = _Newvec + _Count; ; 1342 : this->_Myfirst = _Newvec; ; 1343 : } ; 1344 : else ; 1345 : { // new stuff fits, append and rotate into place ; 1346 : _Ucopy(_First, _Last, this->_Mylast); ; 1347 : _STD rotate(_VIPTR(_Where), this->_Mylast, ; 1348 : this->_Mylast + _Count); ; 1349 : this->_Mylast += _Count; ; 1350 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1351 : } ; 1352 : } ; 1353 : ; 1354 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1355 : iterator erase(const_iterator _Where) ; 1356 : { // erase element at where ; 1357 : if (_VICONT(_Where) != this ; 1358 : || _VIPTR(_Where) < this->_Myfirst ; 1359 : || this->_Mylast <= _VIPTR(_Where)) ; 1360 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1361 : _Move(_VIPTR(_Where) + 1, this->_Mylast, _VIPTR(_Where)); ; 1362 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1363 : _Orphan_range(_VIPTR(_Where), this->_Mylast); ; 1364 : --this->_Mylast; ; 1365 : return (_Make_iter(_Where)); ; 1366 : } ; 1367 : ; 1368 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1369 : iterator erase(const_iterator _Where) ; 1370 : { // erase element at where ; 1371 : _Move(_VIPTR(_Where) + 1, this->_Mylast, ; 1372 : _VIPTR(_Where)); ; 1373 : _Destroy(this->_Mylast - 1, this->_Mylast); ; 1374 : --this->_Mylast; ; 1375 : return (_Make_iter(_Where)); ; 1376 : } ; 1377 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1378 : ; 1379 : iterator erase(const_iterator _First_arg, ; 1380 : const_iterator _Last_arg) ; 1381 : { // erase [_First, _Last) ; 1382 : if (_First_arg == begin() && _Last_arg == end()) jne SHORT $LN38@resize pop edi pop esi ; 1385 : { // clear partial ; 1386 : iterator _First = _Make_iter(_First_arg); ; 1387 : iterator _Last = _Make_iter(_Last_arg); ; 1388 : ; 1389 : if (_First != _Last) ; 1390 : { // worth doing, copy down over hole ; 1391 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1392 : if (_Last < _First || _VICONT(_First) != this ; 1393 : || _VIPTR(_First) < this->_Myfirst ; 1394 : || this->_Mylast < _VIPTR(_Last)) ; 1395 : _DEBUG_ERROR("vector erase iterator outside range"); ; 1396 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1397 : _VIPTR(_First)); ; 1398 : _Orphan_range(_VIPTR(_First), this->_Mylast); ; 1399 : ; 1400 : #else /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1401 : pointer _Ptr = _Move(_VIPTR(_Last), this->_Mylast, ; 1402 : _VIPTR(_First)); ; 1403 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1404 : ; 1405 : _Destroy(_Ptr, this->_Mylast); ; 1406 : this->_Mylast = _Ptr; ; 1407 : } ; 1408 : } ; 1409 : return (_Make_iter(_First_arg)); ; 1410 : } ; 1411 : ; 1412 : void clear() _NOEXCEPT ; 1413 : { // erase all ; 1414 : this->_Orphan_all(); ; 1415 : _Destroy(this->_Myfirst, this->_Mylast); ; 1416 : this->_Mylast = this->_Myfirst; mov DWORD PTR [ebx+4], edx pop ebx ; 1074 : } ; 1075 : } pop ebp ret 4 $LN38@resize: ; 171 : return (*this); ; 172 : } ; 173 : ; 174 : _Myiter operator+(difference_type _Off) const ; 175 : { // return this + integer ; 176 : _Myiter _Tmp = *this; ; 177 : return (_Tmp += _Off); ; 178 : } ; 179 : ; 180 : _Myiter& operator-=(difference_type _Off) ; 181 : { // decrement by integer ; 182 : return (*this += -_Off); ; 183 : } ; 184 : ; 185 : _Myiter operator-(difference_type _Off) const ; 186 : { // return this - integer ; 187 : _Myiter _Tmp = *this; ; 188 : return (_Tmp -= _Off); ; 189 : } ; 190 : ; 191 : difference_type operator-(const _Myiter& _Right) const ; 192 : { // return difference of iterators ; 193 : _Compat(_Right); ; 194 : return (this->_Ptr - _Right._Ptr); ; 195 : } ; 196 : ; 197 : reference operator[](difference_type _Off) const ; 198 : { // subscript ; 199 : return (*(*this + _Off)); ; 200 : } ; 201 : ; 202 : bool operator==(const _Myiter& _Right) const ; 203 : { // test for iterator equality ; 204 : _Compat(_Right); ; 205 : return (this->_Ptr == _Right._Ptr); cmp esi, eax ; 1383 : clear(); ; 1384 : else if (_First_arg != _Last_arg) je SHORT $LN2@resize ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility ; 2475 : ptrdiff_t _Count = _Last - _First; mov ecx, eax sub ecx, eax sar ecx, 3 ; 2476 : _CSTD memmove(&*_Dest, &*_First, ; 2477 : _Count * sizeof (*_First)); lea edi, DWORD PTR [ecx*8] push edi push eax push esi call DWORD PTR __imp__memmove add esp, 12 ; 0000000cH ; 2478 : return (_Dest + _Count); lea eax, DWORD PTR [edi+esi] pop edi pop esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1073 : this->_Mylast += _Newsize - size(); mov DWORD PTR [ebx+4], eax pop ebx ; 1074 : } ; 1075 : } pop ebp ret 4 $LN135@resize: ; 1061 : erase(begin() + _Newsize, end()); ; 1062 : else if (size() < _Newsize) jae SHORT $LN2@resize ; 1063 : { // pad as needed ; 1064 : _Alty _Alval(this->_Getal()); ; 1065 : _Reserve(_Newsize - size()); mov eax, esi sub eax, ecx push eax mov ecx, ebx call ?_Reserve@?$vector@NV?$allocator@N@std@@@std@@IAEXI@Z ; std::vector >::_Reserve ; 1087 : return (this->_Mylast - this->_Myfirst); mov edi, DWORD PTR [ebx+4] mov eax, edi sub eax, DWORD PTR [ebx] ; 1066 : _TRY_BEGIN ; 1067 : _Uninitialized_default_fill_n(this->_Mylast, _Newsize - size(), ; 1068 : _Alval); mov ecx, esi ; 1087 : return (this->_Mylast - this->_Myfirst); sar eax, 3 ; 1066 : _TRY_BEGIN ; 1067 : _Uninitialized_default_fill_n(this->_Mylast, _Newsize - size(), ; 1068 : _Alval); sub ecx, eax ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility ; 2678 : for (; 0 < _Count; --_Count, ++_Dest) je SHORT $LN127@resize ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1087 : return (this->_Mylast - this->_Myfirst); and ecx, 536870911 ; 1fffffffH add ecx, ecx xor eax, eax rep stosd $LN127@resize: mov ecx, DWORD PTR [ebx+4] mov eax, ecx sub eax, DWORD PTR [ebx] sar eax, 3 ; 1073 : this->_Mylast += _Newsize - size(); sub esi, eax lea eax, DWORD PTR [ecx+esi*8] mov DWORD PTR [ebx+4], eax $LN2@resize: pop edi pop esi pop ebx ; 1074 : } ; 1075 : } pop ebp ret 4 ?resize@?$vector@NV?$allocator@N@std@@@std@@QAEXI@Z ENDP ; std::vector >::resize _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ?_Tidy@?$vector@NV?$allocator@N@std@@@std@@IAEXXZ _TEXT SEGMENT ?_Tidy@?$vector@NV?$allocator@N@std@@@std@@IAEXXZ PROC ; std::vector >::_Tidy, COMDAT ; _this$ = ecx ; 1535 : { // free all storage push esi mov esi, ecx ; 1536 : if (this->_Myfirst != pointer()) mov eax, DWORD PTR [esi] test eax, eax je SHORT $LN1@Tidy ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; 586 : ::operator delete(_Ptr); push eax call DWORD PTR __imp_??3@YAXPAX@Z add esp, 4 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; 1542 : this->_Myfirst = pointer(); mov DWORD PTR [esi], 0 ; 1543 : this->_Mylast = pointer(); mov DWORD PTR [esi+4], 0 ; 1544 : this->_Myend = pointer(); mov DWORD PTR [esi+8], 0 $LN1@Tidy: pop esi ; 1545 : } ; 1546 : } ret 0 ?_Tidy@?$vector@NV?$allocator@N@std@@@std@@IAEXXZ ENDP ; std::vector >::_Tidy _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 ; COMDAT ??0?$allocator@N@std@@QAE@XZ _TEXT SEGMENT ??0?$allocator@N@std@@QAE@XZ PROC ; std::allocator::allocator, COMDAT ; _this$ = ecx ; 566 : { // construct default allocator (do nothing) ; 567 : } mov eax, ecx ret 0 ??0?$allocator@N@std@@QAE@XZ ENDP ; std::allocator::allocator _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector ; COMDAT ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@NV?$allocator@N@std@@@std@@@std@@QAE@ABV?$allocator@N@1@@Z _TEXT SEGMENT ___formal$dead$ = 8 ; size = 4 ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@NV?$allocator@N@std@@@std@@@std@@QAE@ABV?$allocator@N@1@@Z PROC ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > >, COMDAT ; _this$ = ecx ; 486 : _Myfirst = pointer(); mov DWORD PTR [ecx], 0 ; 487 : _Mylast = pointer(); mov DWORD PTR [ecx+4], 0 ; 488 : _Myend = pointer(); mov DWORD PTR [ecx+8], 0 ; 594 : { // construct allocator from _Al ; 595 : } mov eax, ecx ret 4 ??0?$_Vector_alloc@$0A@U?$_Vec_base_types@NV?$allocator@N@std@@@std@@@std@@QAE@ABV?$allocator@N@1@@Z ENDP ; std::_Vector_alloc<0,std::_Vec_base_types > >::_Vector_alloc<0,std::_Vec_base_types > > _TEXT ENDS ; Function compile flags: /Ogtp ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; COMDAT ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z _TEXT SEGMENT __Ptr$ = 8 ; size = 4 __Count$ = 12 ; size = 4 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z PROC ; std::basic_string,std::allocator >::assign, COMDAT ; _this$ = ecx ; 1123 : { // assign [_Ptr, _Ptr + _Count) push ebp mov ebp, esp push ebx ; 2234 : } ; 2235 : ; 2236 : bool _Inside(const _Elem *_Ptr) ; 2237 : { // test if _Ptr points inside string ; 2238 : if (_Ptr == 0 || _Ptr < this->_Myptr() ; 2239 : || this->_Myptr() + this->_Mysize <= _Ptr) mov ebx, DWORD PTR __Ptr$[ebp] push esi ; 1123 : { // assign [_Ptr, _Ptr + _Count) mov esi, ecx ; 2234 : } ; 2235 : ; 2236 : bool _Inside(const _Elem *_Ptr) ; 2237 : { // test if _Ptr points inside string ; 2238 : if (_Ptr == 0 || _Ptr < this->_Myptr() ; 2239 : || this->_Myptr() + this->_Mysize <= _Ptr) test ebx, ebx je SHORT $LN2@assign ; 517 : : this->_Bx._Buf); mov ecx, DWORD PTR [esi+20] cmp ecx, 16 ; 00000010H jb SHORT $LN12@assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; 88 : reinterpret_cast(_Val))))); mov eax, DWORD PTR [esi] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 517 : : this->_Bx._Buf); jmp SHORT $LN13@assign $LN12@assign: mov eax, esi $LN13@assign: ; 2234 : } ; 2235 : ; 2236 : bool _Inside(const _Elem *_Ptr) ; 2237 : { // test if _Ptr points inside string ; 2238 : if (_Ptr == 0 || _Ptr < this->_Myptr() ; 2239 : || this->_Myptr() + this->_Mysize <= _Ptr) cmp ebx, eax jb SHORT $LN2@assign ; 517 : : this->_Bx._Buf); cmp ecx, 16 ; 00000010H jb SHORT $LN18@assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; 88 : reinterpret_cast(_Val))))); mov edx, DWORD PTR [esi] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 517 : : this->_Bx._Buf); jmp SHORT $LN19@assign $LN18@assign: mov edx, esi $LN19@assign: ; 2234 : } ; 2235 : ; 2236 : bool _Inside(const _Elem *_Ptr) ; 2237 : { // test if _Ptr points inside string ; 2238 : if (_Ptr == 0 || _Ptr < this->_Myptr() ; 2239 : || this->_Myptr() + this->_Mysize <= _Ptr) mov eax, DWORD PTR [esi+16] add eax, edx cmp eax, ebx jbe SHORT $LN2@assign ; 517 : : this->_Bx._Buf); cmp ecx, 16 ; 00000010H jb SHORT $LN24@assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; 88 : reinterpret_cast(_Val))))); mov eax, DWORD PTR [esi] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1131 : _Ptr - this->_Myptr(), _Count)); // substring push DWORD PTR __Count$[ebp] sub ebx, eax push ebx push esi mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z ; std::basic_string,std::allocator >::assign pop esi pop ebx ; 1139 : } pop ebp ret 8 $LN24@assign: ; 1131 : _Ptr - this->_Myptr(), _Count)); // substring push DWORD PTR __Count$[ebp] ; 517 : : this->_Bx._Buf); mov eax, esi ; 1131 : _Ptr - this->_Myptr(), _Count)); // substring sub ebx, eax push ebx push esi mov ecx, esi call ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z ; std::basic_string,std::allocator >::assign pop esi pop ebx ; 1139 : } pop ebp ret 8 $LN2@assign: push edi ; 2219 : } ; 2220 : ; 2221 : bool _Grow(size_type _Newsize, ; 2222 : bool _Trim = false) ; 2223 : { // ensure buffer is big enough, trim to size if _Trim is true ; 2224 : if (max_size() < _Newsize) mov edi, DWORD PTR __Count$[ebp] cmp edi, -2 ; fffffffeH jbe SHORT $LN33@assign ; 2240 : return (false); // don't ask ; 2241 : else ; 2242 : return (true); ; 2243 : } ; 2244 : ; 2245 : static size_type _Pdif(const_iterator _P2, ; 2246 : const_iterator _P1) ; 2247 : { // compute safe iterator difference ; 2248 : return (_STRING_ITER_BASE(_P2) == 0 ? 0 : _P2 - _P1); ; 2249 : } ; 2250 : ; 2251 : void _Tidy(bool _Built = false, ; 2252 : size_type _Newsize = 0) ; 2253 : { // initialize buffer, deallocating any storage ; 2254 : if (!_Built) ; 2255 : ; ; 2256 : else if (this->_BUF_SIZE <= this->_Myres) ; 2257 : { // copy any leftovers to small buffer and deallocate ; 2258 : pointer _Ptr = this->_Bx._Ptr; ; 2259 : this->_Getal().destroy(&this->_Bx._Ptr); ; 2260 : if (0 < _Newsize) ; 2261 : _Traits::copy(this->_Bx._Buf, ; 2262 : _STD addressof(*_Ptr), _Newsize); ; 2263 : this->_Getal().deallocate(_Ptr, this->_Myres + 1); ; 2264 : } ; 2265 : this->_Myres = this->_BUF_SIZE - 1; ; 2266 : _Eos(_Newsize); ; 2267 : } ; 2268 : ; 2269 : __declspec(noreturn) void _Xlen() const ; 2270 : { // report a length_error ; 2271 : _Xlength_error("string too long"); push OFFSET ??_C@_0BA@JFNIOLAK@string?5too?5long?$AA@ call DWORD PTR __imp_?_Xlength_error@std@@YAXPBD@Z $LN119@assign: $LN33@assign: ; 2225 : _Xlen(); // result too long ; 2226 : if (this->_Myres < _Newsize) mov eax, DWORD PTR [esi+20] cmp eax, edi jae SHORT $LN32@assign ; 2227 : _Copy(_Newsize, this->_Mysize); // reallocate to grow push DWORD PTR [esi+16] mov ecx, esi push edi call ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXII@Z ; std::basic_string,std::allocator >::_Copy ; 2232 : _Eos(0); // new size is zero, just null terminate ; 2233 : return (0 < _Newsize); // return true only if more work to do test edi, edi ; 1132 : ; 1133 : if (_Grow(_Count)) je SHORT $LN112@assign $LN117@assign: ; 517 : : this->_Bx._Buf); cmp DWORD PTR [esi+20], 16 ; 00000010H jb SHORT $LN96@assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; 88 : reinterpret_cast(_Val))))); mov eax, DWORD PTR [esi] ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 517 : : this->_Bx._Buf); jmp SHORT $LN97@assign $LN32@assign: ; 2228 : else if (_Trim && _Newsize < this->_BUF_SIZE) ; 2229 : _Tidy(true, // copy and deallocate if trimming to small string ; 2230 : _Newsize < this->_Mysize ? _Newsize : this->_Mysize); ; 2231 : else if (_Newsize == 0) test edi, edi jne SHORT $LN117@assign ; 1140 : ; 1141 : _Myt& assign(const _Elem *_Ptr) ; 1142 : { // assign [_Ptr, ) ; 1143 : _DEBUG_POINTER(_Ptr); ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem()); mov DWORD PTR [esi+16], edi ; 517 : : this->_Bx._Buf); cmp eax, 16 ; 00000010H jb SHORT $LN87@assign ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef ; 88 : reinterpret_cast(_Val))))); mov eax, DWORD PTR [esi] pop edi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [eax], 0 ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1138 : return (*this); mov eax, esi pop esi pop ebx ; 1139 : } pop ebp ret 8 $LN87@assign: pop edi ; 517 : : this->_Bx._Buf); mov eax, esi pop esi ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 564 : _Left = _Right; mov BYTE PTR [eax], 0 pop ebx ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 1139 : } pop ebp ret 8 $LN96@assign: ; 517 : : this->_Bx._Buf); mov eax, esi $LN97@assign: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\iosfwd ; 530 : : (_Elem *)_CSTD memcpy(_First1, _First2, _Count)); test edi, edi je SHORT $LN103@assign push edi push ebx push eax call _memcpy add esp, 12 ; 0000000cH $LN103@assign: ; File c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring ; 517 : : this->_Bx._Buf); cmp DWORD PTR [esi+20], 16 ; 00000010H ; 1140 : ; 1141 : _Myt& assign(const _Elem *_Ptr) ; 1142 : { // assign [_Ptr, ) ; 1143 : _DEBUG_POINTER(_Ptr); ; 1144 : return (assign(_Ptr, _Traits::length(_Ptr))); ; 1145 : } ; 1146 : ; 1147 : _Myt& assign(size_type _Count, _Elem _Ch) ; 1148 : { // assign _Count * _Ch ; 1149 : if (_Count == npos) ; 1150 : _Xlen(); // result too long ; 1151 : ; 1152 : if (_Grow(_Count)) ; 1153 : { // make room and assign new stuff ; 1154 : _Chassign(0, _Count, _Ch); ; 1155 : _Eos(_Count); ; 1156 : } ; 1157 : return (*this); ; 1158 : } ; 1159 : ; 1160 : template ; 1161 : typename enable_if<_Is_iterator<_Iter>::value, ; 1162 : _Myt&>::type ; 1163 : assign(_Iter _First, _Iter _Last) ; 1164 : { // assign [First, _Last), input iterators ; 1165 : return (replace(begin(), end(), _First, _Last)); ; 1166 : } ; 1167 : ; 1168 : _Myt& assign(const_pointer _First, const_pointer _Last) ; 1169 : { // assign [First, _Last), const pointers ; 1170 : return (replace(begin(), end(), _First, _Last)); ; 1171 : } ; 1172 : ; 1173 : _Myt& assign(const_iterator _First, const_iterator _Last) ; 1174 : { // assign [First, _Last), const_iterators ; 1175 : return (replace(begin(), end(), _First, _Last)); ; 1176 : } ; 1177 : ; 1178 : _Myt& insert(size_type _Off, const _Myt& _Right) ; 1179 : { // insert _Right at _Off ; 1180 : return (insert(_Off, _Right, 0, npos)); ; 1181 : } ; 1182 : ; 1183 : _Myt& insert(size_type _Off, ; 1184 : const _Myt& _Right, size_type _Roff, size_type _Count) ; 1185 : { // insert _Right [_Roff, _Roff + _Count) at _Off ; 1186 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1187 : _Xran(); // _Off or _Roff off end ; 1188 : size_type _Num = _Right.size() - _Roff; ; 1189 : if (_Num < _Count) ; 1190 : _Count = _Num; // trim _Count to size ; 1191 : if (npos - this->_Mysize <= _Count) ; 1192 : _Xlen(); // result too long ; 1193 : ; 1194 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1195 : { // make room and insert new stuff ; 1196 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1197 : this->_Myptr() + _Off, ; 1198 : this->_Mysize - _Off); // empty out hole ; 1199 : if (this == &_Right) ; 1200 : _Traits::move(this->_Myptr() + _Off, ; 1201 : this->_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff), ; 1202 : _Count); // substring ; 1203 : else ; 1204 : _Traits::copy(this->_Myptr() + _Off, ; 1205 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1206 : _Eos(_Num); ; 1207 : } ; 1208 : return (*this); ; 1209 : } ; 1210 : ; 1211 : _Myt& insert(size_type _Off, ; 1212 : const _Elem *_Ptr, size_type _Count) ; 1213 : { // insert [_Ptr, _Ptr + _Count) at _Off ; 1214 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1215 : if (_Count != 0) ; 1216 : _DEBUG_POINTER(_Ptr); ; 1217 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1218 : ; 1219 : if (_Inside(_Ptr)) ; 1220 : return (insert(_Off, *this, ; 1221 : _Ptr - this->_Myptr(), _Count)); // substring ; 1222 : if (this->_Mysize < _Off) ; 1223 : _Xran(); // _Off off end ; 1224 : if (npos - this->_Mysize <= _Count) ; 1225 : _Xlen(); // result too long ; 1226 : size_type _Num; ; 1227 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1228 : { // make room and insert new stuff ; 1229 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1230 : this->_Myptr() + _Off, ; 1231 : this->_Mysize - _Off); // empty out hole ; 1232 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1233 : _Eos(_Num); ; 1234 : } ; 1235 : return (*this); ; 1236 : } ; 1237 : ; 1238 : _Myt& insert(size_type _Off, const _Elem *_Ptr) ; 1239 : { // insert [_Ptr, ) at _Off ; 1240 : _DEBUG_POINTER(_Ptr); ; 1241 : return (insert(_Off, _Ptr, _Traits::length(_Ptr))); ; 1242 : } ; 1243 : ; 1244 : _Myt& insert(size_type _Off, ; 1245 : size_type _Count, _Elem _Ch) ; 1246 : { // insert _Count * _Ch at _Off ; 1247 : if (this->_Mysize < _Off) ; 1248 : _Xran(); // _Off off end ; 1249 : if (npos - this->_Mysize <= _Count) ; 1250 : _Xlen(); // result too long ; 1251 : size_type _Num; ; 1252 : if (0 < _Count && _Grow(_Num = this->_Mysize + _Count)) ; 1253 : { // make room and insert new stuff ; 1254 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1255 : this->_Myptr() + _Off, ; 1256 : this->_Mysize - _Off); // empty out hole ; 1257 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1258 : _Eos(_Num); ; 1259 : } ; 1260 : return (*this); ; 1261 : } ; 1262 : ; 1263 : iterator insert(const_iterator _Where) ; 1264 : { // insert at _Where ; 1265 : return (insert(_Where, _Elem())); ; 1266 : } ; 1267 : ; 1268 : iterator insert(const_iterator _Where, _Elem _Ch) ; 1269 : { // insert _Ch at _Where ; 1270 : size_type _Off = _Pdif(_Where, begin()); ; 1271 : insert(_Off, 1, _Ch); ; 1272 : return (begin() + _Off); ; 1273 : } ; 1274 : ; 1275 : iterator insert(const_iterator _Where, size_type _Count, _Elem _Ch) ; 1276 : { // insert _Count * _Elem at _Where ; 1277 : size_type _Off = _Pdif(_Where, begin()); ; 1278 : insert(_Off, _Count, _Ch); ; 1279 : return (begin() + _Off); ; 1280 : } ; 1281 : ; 1282 : template ; 1283 : typename enable_if<_Is_iterator<_Iter>::value, ; 1284 : iterator>::type ; 1285 : insert(const_iterator _Where, _Iter _First, _Iter _Last) ; 1286 : { // insert [_First, _Last) at _Where, input iterators ; 1287 : size_type _Off = _Pdif(_Where, begin()); ; 1288 : replace(_Where, _Where, _First, _Last); ; 1289 : return (begin() + _Off); ; 1290 : } ; 1291 : ; 1292 : iterator insert(const_iterator _Where, ; 1293 : const_pointer _First, const_pointer _Last) ; 1294 : { // insert [_First, _Last) at _Where, const pointers ; 1295 : size_type _Off = _Pdif(_Where, begin()); ; 1296 : replace(_Where, _Where, _First, _Last); ; 1297 : return (begin() + _Off); ; 1298 : } ; 1299 : ; 1300 : iterator insert(const_iterator _Where, ; 1301 : const_iterator _First, const_iterator _Last) ; 1302 : { // insert [_First, _Last) at _Where, const_iterators ; 1303 : size_type _Off = _Pdif(_Where, begin()); ; 1304 : replace(_Where, _Where, _First, _Last); ; 1305 : return (begin() + _Off); ; 1306 : } ; 1307 : ; 1308 : _Myt& erase(size_type _Off = 0) ; 1309 : { // erase elements [_Off, ...) ; 1310 : if (this->_Mysize < _Off) ; 1311 : _Xran(); // _Off off end ; 1312 : _Eos(_Off); ; 1313 : return (*this); ; 1314 : } ; 1315 : ; 1316 : _Myt& erase(size_type _Off, size_type _Count) ; 1317 : { // erase elements [_Off, _Off + _Count) ; 1318 : if (this->_Mysize < _Off) ; 1319 : _Xran(); // _Off off end ; 1320 : if (this->_Mysize - _Off <= _Count) ; 1321 : _Eos(_Off); // erase elements [_Off, ...) ; 1322 : else if (0 < _Count) ; 1323 : { // move elements down ; 1324 : value_type *_Ptr = this->_Myptr() + _Off; ; 1325 : size_type _Newsize = this->_Mysize - _Count; ; 1326 : _Traits::move(_Ptr, _Ptr + _Count, _Newsize - _Off); ; 1327 : _Eos(_Newsize); ; 1328 : } ; 1329 : return (*this); ; 1330 : } ; 1331 : ; 1332 : iterator erase(const_iterator _Where) ; 1333 : { // erase element at _Where ; 1334 : size_type _Count = _Pdif(_Where, begin()); ; 1335 : erase(_Count, 1); ; 1336 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1337 : } ; 1338 : ; 1339 : iterator erase(const_iterator _First, const_iterator _Last) ; 1340 : { // erase substring [_First, _Last) ; 1341 : _DEBUG_RANGE(_First, _Last); ; 1342 : size_type _Count = _Pdif(_First, begin()); ; 1343 : erase(_Count, _Pdif(_Last, _First)); ; 1344 : return (_STRING_ITERATOR(this->_Myptr() + _Count)); ; 1345 : } ; 1346 : ; 1347 : void clear() _NOEXCEPT ; 1348 : { // erase all ; 1349 : _Eos(0); ; 1350 : } ; 1351 : ; 1352 : _Myt& replace(size_type _Off, size_type _N0, const _Myt& _Right) ; 1353 : { // replace [_Off, _Off + _N0) with _Right ; 1354 : return (replace(_Off, _N0, _Right, 0, npos)); ; 1355 : } ; 1356 : ; 1357 : _Myt& replace(size_type _Off, ; 1358 : size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count) ; 1359 : { // replace [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 1360 : if (this->_Mysize < _Off || _Right.size() < _Roff) ; 1361 : _Xran(); // _Off or _Roff off end ; 1362 : if (this->_Mysize - _Off < _N0) ; 1363 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1364 : size_type _Num = _Right.size() - _Roff; ; 1365 : if (_Num < _Count) ; 1366 : _Count = _Num; // trim _Count to size ; 1367 : if (npos - _Count <= this->_Mysize - _N0) ; 1368 : _Xlen(); // result too long ; 1369 : ; 1370 : size_type _Nm = this->_Mysize - _N0 - _Off; // length of kept tail ; 1371 : size_type _Newsize = this->_Mysize + _Count - _N0; ; 1372 : if (this->_Mysize < _Newsize) ; 1373 : _Grow(_Newsize); ; 1374 : ; 1375 : if (this != &_Right) ; 1376 : { // no overlap, just move down and copy in new stuff ; 1377 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1378 : this->_Myptr() + _Off + _N0, _Nm); // empty hole ; 1379 : _Traits::copy(this->_Myptr() + _Off, ; 1380 : _Right._Myptr() + _Roff, _Count); // fill hole ; 1381 : } ; 1382 : else if (_Count <= _N0) ; 1383 : { // hole doesn't get larger, just copy in substring ; 1384 : _Traits::move(this->_Myptr() + _Off, ; 1385 : this->_Myptr() + _Roff, _Count); // fill hole ; 1386 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1387 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1388 : } ; 1389 : else if (_Roff <= _Off) ; 1390 : { // hole gets larger, substring begins before hole ; 1391 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1392 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1393 : _Traits::move(this->_Myptr() + _Off, ; 1394 : this->_Myptr() + _Roff, _Count); // fill hole ; 1395 : } ; 1396 : else if (_Off + _N0 <= _Roff) ; 1397 : { // hole gets larger, substring begins after hole ; 1398 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1399 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1400 : _Traits::move(this->_Myptr() + _Off, ; 1401 : this->_Myptr() + (_Roff + _Count - _N0), ; 1402 : _Count); // fill hole ; 1403 : } ; 1404 : else ; 1405 : { // hole gets larger, substring begins in hole ; 1406 : _Traits::move(this->_Myptr() + _Off, ; 1407 : this->_Myptr() + _Roff, _N0); // fill old hole ; 1408 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1409 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1410 : _Traits::move(this->_Myptr() + _Off + _N0, ; 1411 : this->_Myptr() + _Roff + _Count, ; 1412 : _Count - _N0); // fill rest of new hole ; 1413 : } ; 1414 : ; 1415 : _Eos(_Newsize); ; 1416 : return (*this); ; 1417 : } ; 1418 : ; 1419 : _Myt& replace(size_type _Off, ; 1420 : size_type _N0, const _Elem *_Ptr, size_type _Count) ; 1421 : { // replace [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 1422 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1423 : if (_Count != 0) ; 1424 : _DEBUG_POINTER(_Ptr); ; 1425 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1426 : ; 1427 : if (_Inside(_Ptr)) ; 1428 : return (replace(_Off, _N0, *this, ; 1429 : _Ptr - this->_Myptr(), ; 1430 : _Count)); // substring, replace carefully ; 1431 : if (this->_Mysize < _Off) ; 1432 : _Xran(); // _Off off end ; 1433 : if (this->_Mysize - _Off < _N0) ; 1434 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1435 : if (npos - _Count <= this->_Mysize - _N0) ; 1436 : _Xlen(); // result too long ; 1437 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1438 : ; 1439 : if (_Count < _N0) ; 1440 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1441 : this->_Myptr() + _Off + _N0, ; 1442 : _Nm); // smaller hole, move tail up ; 1443 : size_type _Num; ; 1444 : if ((0 < _Count || 0 < _N0) ; 1445 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1446 : { // make room and rearrange ; 1447 : if (_N0 < _Count) ; 1448 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1449 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1450 : _Traits::copy(this->_Myptr() + _Off, _Ptr, _Count); // fill hole ; 1451 : _Eos(_Num); ; 1452 : } ; 1453 : return (*this); ; 1454 : } ; 1455 : ; 1456 : _Myt& replace(size_type _Off, size_type _N0, const _Elem *_Ptr) ; 1457 : { // replace [_Off, _Off + _N0) with [_Ptr, ) ; 1458 : _DEBUG_POINTER(_Ptr); ; 1459 : return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 1460 : } ; 1461 : ; 1462 : _Myt& replace(size_type _Off, ; 1463 : size_type _N0, size_type _Count, _Elem _Ch) ; 1464 : { // replace [_Off, _Off + _N0) with _Count * _Ch ; 1465 : if (this->_Mysize < _Off) ; 1466 : _Xran(); // _Off off end ; 1467 : if (this->_Mysize - _Off < _N0) ; 1468 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 1469 : if (npos - _Count <= this->_Mysize - _N0) ; 1470 : _Xlen(); // result too long ; 1471 : size_type _Nm = this->_Mysize - _N0 - _Off; ; 1472 : ; 1473 : if (_Count < _N0) ; 1474 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1475 : this->_Myptr() + _Off + _N0, ; 1476 : _Nm); // smaller hole, move tail up ; 1477 : size_type _Num; ; 1478 : if ((0 < _Count || 0 < _N0) ; 1479 : && _Grow(_Num = this->_Mysize + _Count - _N0)) ; 1480 : { // make room and rearrange ; 1481 : if (_N0 < _Count) ; 1482 : _Traits::move(this->_Myptr() + _Off + _Count, ; 1483 : this->_Myptr() + _Off + _N0, _Nm); // move tail down ; 1484 : _Chassign(_Off, _Count, _Ch); // fill hole ; 1485 : _Eos(_Num); ; 1486 : } ; 1487 : return (*this); ; 1488 : } ; 1489 : ; 1490 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1491 : const _Myt& _Right) ; 1492 : { // replace [_First, _Last) with _Right ; 1493 : return (replace( ; 1494 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Right)); ; 1495 : } ; 1496 : ; 1497 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1498 : const _Elem *_Ptr, size_type _Count) ; 1499 : { // replace [_First, _Last) with [_Ptr, _Ptr + _Count) ; 1500 : return (replace( ; 1501 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count)); ; 1502 : } ; 1503 : ; 1504 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1505 : const _Elem *_Ptr) ; 1506 : { // replace [_First, _Last) with [_Ptr, ) ; 1507 : return (replace( ; 1508 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr)); ; 1509 : } ; 1510 : ; 1511 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1512 : size_type _Count, _Elem _Ch) ; 1513 : { // replace [_First, _Last) with _Count * _Ch ; 1514 : return (replace( ; 1515 : _Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch)); ; 1516 : } ; 1517 : ; 1518 : template ; 1519 : typename enable_if<_Is_iterator<_Iter>::value, ; 1520 : _Myt&>::type ; 1521 : replace(const_iterator _First, const_iterator _Last, ; 1522 : _Iter _First2, _Iter _Last2) ; 1523 : { // replace [_First, _Last) with [_First2, _Last2), input iterators ; 1524 : _Myt _Right(_First2, _Last2); ; 1525 : replace(_First, _Last, _Right); ; 1526 : return (*this); ; 1527 : } ; 1528 : ; 1529 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1530 : const_pointer _First2, const_pointer _Last2) ; 1531 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1532 : if (_First2 == _Last2) ; 1533 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1534 : else ; 1535 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1536 : &*_First2, _Last2 - _First2); ; 1537 : return (*this); ; 1538 : } ; 1539 : ; 1540 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1541 : pointer _First2, pointer _Last2) ; 1542 : { // replace [_First, _Last) with [_First2, _Last2), const pointers ; 1543 : if (_First2 == _Last2) ; 1544 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1545 : else ; 1546 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1547 : &*_First2, _Last2 - _First2); ; 1548 : return (*this); ; 1549 : } ; 1550 : ; 1551 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1552 : const_iterator _First2, const_iterator _Last2) ; 1553 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1554 : if (_First2 == _Last2) ; 1555 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1556 : else ; 1557 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1558 : &*_First2, _Last2 - _First2); ; 1559 : return (*this); ; 1560 : } ; 1561 : ; 1562 : _Myt& replace(const_iterator _First, const_iterator _Last, ; 1563 : iterator _First2, iterator _Last2) ; 1564 : { // replace [_First, _Last) with [_First2, _Last2), const_iterators ; 1565 : if (_First2 == _Last2) ; 1566 : erase(_Pdif(_First, begin()), _Pdif(_Last, _First)); ; 1567 : else ; 1568 : replace(_Pdif(_First, begin()), _Pdif(_Last, _First), ; 1569 : &*_First2, _Last2 - _First2); ; 1570 : return (*this); ; 1571 : } ; 1572 : ; 1573 : iterator begin() _NOEXCEPT ; 1574 : { // return iterator for beginning of mutable sequence ; 1575 : return (_STRING_ITERATOR(this->_Myptr())); ; 1576 : } ; 1577 : ; 1578 : const_iterator begin() const _NOEXCEPT ; 1579 : { // return iterator for beginning of nonmutable sequence ; 1580 : return (_STRING_CONST_ITERATOR(this->_Myptr())); ; 1581 : } ; 1582 : ; 1583 : iterator end() _NOEXCEPT ; 1584 : { // return iterator for end of mutable sequence ; 1585 : return (_STRING_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1586 : } ; 1587 : ; 1588 : const_iterator end() const _NOEXCEPT ; 1589 : { // return iterator for end of nonmutable sequence ; 1590 : return (_STRING_CONST_ITERATOR(this->_Myptr() + this->_Mysize)); ; 1591 : } ; 1592 : ; 1593 : reverse_iterator rbegin() _NOEXCEPT ; 1594 : { // return iterator for beginning of reversed mutable sequence ; 1595 : return (reverse_iterator(end())); ; 1596 : } ; 1597 : ; 1598 : const_reverse_iterator rbegin() const _NOEXCEPT ; 1599 : { // return iterator for beginning of reversed nonmutable sequence ; 1600 : return (const_reverse_iterator(end())); ; 1601 : } ; 1602 : ; 1603 : reverse_iterator rend() _NOEXCEPT ; 1604 : { // return iterator for end of reversed mutable sequence ; 1605 : return (reverse_iterator(begin())); ; 1606 : } ; 1607 : ; 1608 : const_reverse_iterator rend() const _NOEXCEPT ; 1609 : { // return iterator for end of reversed nonmutable sequence ; 1610 : return (const_reverse_iterator(begin())); ; 1611 : } ; 1612 : ; 1613 : #if _HAS_CPP0X ; 1614 : const_iterator cbegin() const _NOEXCEPT ; 1615 : { // return iterator for beginning of nonmutable sequence ; 1616 : return (((const _Myt *)this)->begin()); ; 1617 : } ; 1618 : ; 1619 : const_iterator cend() const _NOEXCEPT ; 1620 : { // return iterator for end of nonmutable sequence ; 1621 : return (((const _Myt *)this)->end()); ; 1622 : } ; 1623 : ; 1624 : const_reverse_iterator crbegin() const _NOEXCEPT ; 1625 : { // return iterator for beginning of reversed nonmutable sequence ; 1626 : return (((const _Myt *)this)->rbegin()); ; 1627 : } ; 1628 : ; 1629 : const_reverse_iterator crend() const _NOEXCEPT ; 1630 : { // return iterator for end of reversed nonmutable sequence ; 1631 : return (((const _Myt *)this)->rend()); ; 1632 : } ; 1633 : ; 1634 : void shrink_to_fit() ; 1635 : { // reduce capacity ; 1636 : if ((size() | this->_ALLOC_MASK) < capacity()) ; 1637 : { // worth shrinking, do it ; 1638 : _Myt _Tmp(*this); ; 1639 : swap(_Tmp); ; 1640 : } ; 1641 : } ; 1642 : #endif /* _HAS_CPP0X */ ; 1643 : ; 1644 : reference at(size_type _Off) ; 1645 : { // subscript mutable sequence with checking ; 1646 : if (this->_Mysize <= _Off) ; 1647 : _Xran(); // _Off off end ; 1648 : return (this->_Myptr()[_Off]); ; 1649 : } ; 1650 : ; 1651 : const_reference at(size_type _Off) const ; 1652 : { // subscript nonmutable sequence with checking ; 1653 : if (this->_Mysize <= _Off) ; 1654 : _Xran(); // _Off off end ; 1655 : return (this->_Myptr()[_Off]); ; 1656 : } ; 1657 : ; 1658 : reference operator[](size_type _Off) ; 1659 : { // subscript mutable sequence ; 1660 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1661 : if (this->_Mysize < _Off) // sic ; 1662 : _DEBUG_ERROR("string subscript out of range"); ; 1663 : ; 1664 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1665 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1666 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1667 : ; 1668 : return (this->_Myptr()[_Off]); ; 1669 : } ; 1670 : ; 1671 : const_reference operator[](size_type _Off) const ; 1672 : { // subscript nonmutable sequence ; 1673 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1674 : if (this->_Mysize < _Off) // sic ; 1675 : _DEBUG_ERROR("string subscript out of range"); ; 1676 : ; 1677 : #elif _ITERATOR_DEBUG_LEVEL == 1 ; 1678 : _SCL_SECURE_VALIDATE_RANGE(_Off <= this->_Mysize); // sic ; 1679 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1680 : ; 1681 : return (this->_Myptr()[_Off]); ; 1682 : } ; 1683 : ; 1684 : void push_back(_Elem _Ch) ; 1685 : { // insert element at end ; 1686 : insert(end(), _Ch); ; 1687 : } ; 1688 : ; 1689 : #if _HAS_CPP0X ; 1690 : void pop_back() ; 1691 : { // erase element at end ; 1692 : erase(this->_Mysize - 1); // throws if _Mysize == 0 ; 1693 : } ; 1694 : ; 1695 : reference front() ; 1696 : { // return first element of mutable sequence ; 1697 : return (*begin()); ; 1698 : } ; 1699 : ; 1700 : const_reference front() const ; 1701 : { // return first element of nonmutable sequence ; 1702 : return (*begin()); ; 1703 : } ; 1704 : ; 1705 : reference back() ; 1706 : { // return last element of mutable sequence ; 1707 : return (*(end() - 1)); ; 1708 : } ; 1709 : ; 1710 : const_reference back() const ; 1711 : { // return last element of nonmutable sequence ; 1712 : return (*(end() - 1)); ; 1713 : } ; 1714 : #endif /* _HAS_CPP0X */ ; 1715 : ; 1716 : const _Elem *c_str() const _NOEXCEPT ; 1717 : { // return pointer to null-terminated nonmutable array ; 1718 : return (this->_Myptr()); ; 1719 : } ; 1720 : ; 1721 : const _Elem *data() const _NOEXCEPT ; 1722 : { // return pointer to nonmutable array ; 1723 : return (c_str()); ; 1724 : } ; 1725 : ; 1726 : size_type length() const _NOEXCEPT ; 1727 : { // return length of sequence ; 1728 : return (this->_Mysize); ; 1729 : } ; 1730 : ; 1731 : size_type size() const _NOEXCEPT ; 1732 : { // return length of sequence ; 1733 : return (this->_Mysize); ; 1734 : } ; 1735 : ; 1736 : size_type max_size() const _NOEXCEPT ; 1737 : { // return maximum possible length of sequence ; 1738 : size_type _Num = this->_Getal().max_size(); ; 1739 : return (_Num <= 1 ? 1 : _Num - 1); ; 1740 : } ; 1741 : ; 1742 : void resize(size_type _Newsize) ; 1743 : { // determine new length, padding with null elements as needed ; 1744 : resize(_Newsize, _Elem()); ; 1745 : } ; 1746 : ; 1747 : void resize(size_type _Newsize, _Elem _Ch) ; 1748 : { // determine new length, padding with _Ch elements as needed ; 1749 : if (_Newsize <= this->_Mysize) ; 1750 : _Eos(_Newsize); ; 1751 : else ; 1752 : append(_Newsize - this->_Mysize, _Ch); ; 1753 : } ; 1754 : ; 1755 : size_type capacity() const _NOEXCEPT ; 1756 : { // return current length of allocated storage ; 1757 : return (this->_Myres); ; 1758 : } ; 1759 : ; 1760 : void reserve(size_type _Newcap = 0) ; 1761 : { // determine new minimum length of allocated storage ; 1762 : if (this->_Mysize <= _Newcap && this->_Myres != _Newcap) ; 1763 : { // change reservation ; 1764 : size_type _Size = this->_Mysize; ; 1765 : if (_Grow(_Newcap, true)) ; 1766 : _Eos(_Size); ; 1767 : } ; 1768 : } ; 1769 : ; 1770 : bool empty() const _NOEXCEPT ; 1771 : { // test if sequence is empty ; 1772 : return (this->_Mysize == 0); ; 1773 : } ; 1774 : ; 1775 : _SCL_INSECURE_DEPRECATE ; 1776 : ; 1777 : size_type copy(_Elem *_Ptr, ; 1778 : size_type _Count, size_type _Off = 0) const ; 1779 : { // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count) ; 1780 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1781 : if (_Count != 0) ; 1782 : _DEBUG_POINTER(_Ptr); ; 1783 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1784 : ; 1785 : if (this->_Mysize < _Off) ; 1786 : _Xran(); // _Off off end ; 1787 : if (this->_Mysize - _Off < _Count) ; 1788 : _Count = this->_Mysize - _Off; ; 1789 : _Traits::copy(_Ptr, this->_Myptr() + _Off, _Count); ; 1790 : return (_Count); ; 1791 : } ; 1792 : ; 1793 : size_type _Copy_s(_Elem *_Dest, size_type _Dest_size, ; 1794 : size_type _Count, size_type _Off = 0) const ; 1795 : { // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count) ; 1796 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1797 : if (_Count != 0) ; 1798 : _DEBUG_POINTER(_Dest); ; 1799 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1800 : ; 1801 : if (this->_Mysize < _Off) ; 1802 : _Xran(); // _Off off end ; 1803 : if (this->_Mysize - _Off < _Count) ; 1804 : _Count = this->_Mysize - _Off; ; 1805 : _Traits::_Copy_s(_Dest, _Dest_size, this->_Myptr() + _Off, _Count); ; 1806 : return (_Count); ; 1807 : } ; 1808 : ; 1809 : void _Swap_bx(_Myt& _Right) ; 1810 : { // exchange _Bx with _Right._Bx ; 1811 : if (this->_BUF_SIZE <= this->_Myres) ; 1812 : if (this->_BUF_SIZE <= _Right._Myres) ; 1813 : _Swap_adl(this->_Bx._Ptr, _Right._Bx._Ptr); ; 1814 : else ; 1815 : { // swap large with small ; 1816 : pointer _Ptr = this->_Bx._Ptr; ; 1817 : this->_Getal().destroy(&this->_Bx._Ptr); ; 1818 : _Traits::copy(this->_Bx._Buf, ; 1819 : _Right._Bx._Buf, _Right._Mysize + 1); ; 1820 : this->_Getal().construct(&_Right._Bx._Ptr, _Ptr); ; 1821 : } ; 1822 : else ; 1823 : if (_Right._Myres < this->_BUF_SIZE) ; 1824 : _STD swap(this->_Bx._Buf, _Right._Bx._Buf); ; 1825 : else ; 1826 : { // swap small with large ; 1827 : pointer _Ptr = _Right._Bx._Ptr; ; 1828 : this->_Getal().destroy(&_Right._Bx._Ptr); ; 1829 : _Traits::copy(_Right._Bx._Buf, ; 1830 : this->_Bx._Buf, this->_Mysize + 1); ; 1831 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 1832 : } ; 1833 : } ; 1834 : ; 1835 : void swap(_Myt& _Right) ; 1836 : { // exchange contents with _Right ; 1837 : if (this == &_Right) ; 1838 : ; // same object, do nothing ; 1839 : else if (this->_Getal() == _Right._Getal()) ; 1840 : { // same allocator, swap control information ; 1841 : this->_Swap_all(_Right); ; 1842 : _Swap_bx(_Right); ; 1843 : _STD swap(this->_Mysize, _Right._Mysize); ; 1844 : _STD swap(this->_Myres, _Right._Myres); ; 1845 : } ; 1846 : ; 1847 : #if _HAS_CPP0X ; 1848 : else if (_Alty::propagate_on_container_swap::value) ; 1849 : { // swap allocators and control information ; 1850 : this->_Swap_alloc(_Right); ; 1851 : _Swap_bx(_Right); ; 1852 : _STD swap(this->_Bx, _Right._Bx); // pointer bitwise copyable? ; 1853 : _STD swap(this->_Mysize, _Right._Mysize); ; 1854 : _STD swap(this->_Myres, _Right._Myres); ; 1855 : } ; 1856 : #endif /* _HAS_CPP0X */ ; 1857 : ; 1858 : else ; 1859 : { // different allocator, do multiple assigns ; 1860 : _Myt _Tmp = *this; ; 1861 : ; 1862 : *this = _Right; ; 1863 : _Right = _Tmp; ; 1864 : } ; 1865 : } ; 1866 : ; 1867 : size_type find(const _Myt& _Right, size_type _Off = 0) const _NOEXCEPT ; 1868 : { // look for _Right beginning at or after _Off ; 1869 : return (find(_Right._Myptr(), _Off, _Right.size())); ; 1870 : } ; 1871 : ; 1872 : size_type find(const _Elem *_Ptr, ; 1873 : size_type _Off, size_type _Count) const ; 1874 : { // look for [_Ptr, _Ptr + _Count) beginning at or after _Off ; 1875 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1876 : if (_Count != 0) ; 1877 : _DEBUG_POINTER(_Ptr); ; 1878 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1879 : ; 1880 : if (_Count == 0 && _Off <= this->_Mysize) ; 1881 : return (_Off); // null string always matches (if inside string) ; 1882 : ; 1883 : size_type _Nm; ; 1884 : if (_Off < this->_Mysize && _Count <= (_Nm = this->_Mysize - _Off)) ; 1885 : { // room for match, look for it ; 1886 : const _Elem *_Uptr, *_Vptr; ; 1887 : for (_Nm -= _Count - 1, _Vptr = this->_Myptr() + _Off; ; 1888 : (_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0; ; 1889 : _Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1) ; 1890 : if (_Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1891 : return (_Uptr - this->_Myptr()); // found a match ; 1892 : } ; 1893 : ; 1894 : return (npos); // no match ; 1895 : } ; 1896 : ; 1897 : size_type find(const _Elem *_Ptr, size_type _Off = 0) const ; 1898 : { // look for [_Ptr, ) beginning at or after _Off ; 1899 : _DEBUG_POINTER(_Ptr); ; 1900 : return (find(_Ptr, _Off, _Traits::length(_Ptr))); ; 1901 : } ; 1902 : ; 1903 : size_type find(_Elem _Ch, size_type _Off = 0) const ; 1904 : { // look for _Ch at or after _Off ; 1905 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1906 : } ; 1907 : ; 1908 : size_type rfind(const _Myt& _Right, size_type _Off = npos) const _NOEXCEPT ; 1909 : { // look for _Right beginning before _Off ; 1910 : return (rfind(_Right._Myptr(), _Off, _Right.size())); ; 1911 : } ; 1912 : ; 1913 : size_type rfind(const _Elem *_Ptr, ; 1914 : size_type _Off, size_type _Count) const ; 1915 : { // look for [_Ptr, _Ptr + _Count) beginning before _Off ; 1916 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1917 : if (_Count != 0) ; 1918 : _DEBUG_POINTER(_Ptr); ; 1919 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1920 : ; 1921 : if (_Count == 0) ; 1922 : return (_Off < this->_Mysize ? _Off ; 1923 : : this->_Mysize); // null always matches ; 1924 : if (_Count <= this->_Mysize) ; 1925 : { // room for match, look for it ; 1926 : const _Elem *_Uptr = this->_Myptr() + ; 1927 : (_Off < this->_Mysize - _Count ? _Off ; 1928 : : this->_Mysize - _Count); ; 1929 : for (; ; --_Uptr) ; 1930 : if (_Traits::eq(*_Uptr, *_Ptr) ; 1931 : && _Traits::compare(_Uptr, _Ptr, _Count) == 0) ; 1932 : return (_Uptr - this->_Myptr()); // found a match ; 1933 : else if (_Uptr == this->_Myptr()) ; 1934 : break; // at beginning, no more chance for match ; 1935 : } ; 1936 : ; 1937 : return (npos); // no match ; 1938 : } ; 1939 : ; 1940 : size_type rfind(const _Elem *_Ptr, size_type _Off = npos) const ; 1941 : { // look for [_Ptr, ) beginning before _Off ; 1942 : _DEBUG_POINTER(_Ptr); ; 1943 : return (rfind(_Ptr, _Off, _Traits::length(_Ptr))); ; 1944 : } ; 1945 : ; 1946 : size_type rfind(_Elem _Ch, size_type _Off = npos) const ; 1947 : { // look for _Ch before _Off ; 1948 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 1949 : } ; 1950 : ; 1951 : size_type find_first_of(const _Myt& _Right, ; 1952 : size_type _Off = 0) const _NOEXCEPT ; 1953 : { // look for one of _Right at or after _Off ; 1954 : return (find_first_of(_Right._Myptr(), _Off, _Right.size())); ; 1955 : } ; 1956 : ; 1957 : size_type find_first_of(const _Elem *_Ptr, ; 1958 : size_type _Off, size_type _Count) const ; 1959 : { // look for one of [_Ptr, _Ptr + _Count) at or after _Off ; 1960 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 1961 : if (_Count != 0) ; 1962 : _DEBUG_POINTER(_Ptr); ; 1963 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 1964 : ; 1965 : if (0 < _Count && _Off < this->_Mysize) ; 1966 : { // room for match, look for it ; 1967 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 1968 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 1969 : _Uptr < _Vptr; ++_Uptr) ; 1970 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 1971 : return (_Uptr - this->_Myptr()); // found a match ; 1972 : } ; 1973 : ; 1974 : return (npos); // no match ; 1975 : } ; 1976 : ; 1977 : size_type find_first_of(const _Elem *_Ptr, ; 1978 : size_type _Off = 0) const ; 1979 : { // look for one of [_Ptr, ) at or after _Off ; 1980 : _DEBUG_POINTER(_Ptr); ; 1981 : return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 1982 : } ; 1983 : ; 1984 : size_type find_first_of(_Elem _Ch, ; 1985 : size_type _Off = 0) const ; 1986 : { // look for _Ch at or after _Off ; 1987 : return (find((const _Elem *)&_Ch, _Off, 1)); ; 1988 : } ; 1989 : ; 1990 : size_type find_last_of(const _Myt& _Right, ; 1991 : size_type _Off = npos) const _NOEXCEPT ; 1992 : { // look for one of _Right before _Off ; 1993 : return (find_last_of(_Right._Myptr(), _Off, _Right.size())); ; 1994 : } ; 1995 : ; 1996 : size_type find_last_of(const _Elem *_Ptr, ; 1997 : size_type _Off, size_type _Count) const ; 1998 : { // look for one of [_Ptr, _Ptr + _Count) before _Off ; 1999 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2000 : if (_Count != 0) ; 2001 : _DEBUG_POINTER(_Ptr); ; 2002 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2003 : ; 2004 : if (0 < _Count && 0 < this->_Mysize) ; 2005 : { // worth searching, do it ; 2006 : const _Elem *_Uptr = this->_Myptr() ; 2007 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2008 : for (; ; --_Uptr) ; 2009 : if (_Traits::find(_Ptr, _Count, *_Uptr) != 0) ; 2010 : return (_Uptr - this->_Myptr()); // found a match ; 2011 : else if (_Uptr == this->_Myptr()) ; 2012 : break; // at beginning, no more chance for match ; 2013 : } ; 2014 : ; 2015 : return (npos); // no match ; 2016 : } ; 2017 : ; 2018 : size_type find_last_of(const _Elem *_Ptr, ; 2019 : size_type _Off = npos) const ; 2020 : { // look for one of [_Ptr, ) before _Off ; 2021 : _DEBUG_POINTER(_Ptr); ; 2022 : return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2023 : } ; 2024 : ; 2025 : size_type find_last_of(_Elem _Ch, ; 2026 : size_type _Off = npos) const ; 2027 : { // look for _Ch before _Off ; 2028 : return (rfind((const _Elem *)&_Ch, _Off, 1)); ; 2029 : } ; 2030 : ; 2031 : size_type find_first_not_of(const _Myt& _Right, ; 2032 : size_type _Off = 0) const _NOEXCEPT ; 2033 : { // look for none of _Right at or after _Off ; 2034 : return (find_first_not_of(_Right._Myptr(), _Off, ; 2035 : _Right.size())); ; 2036 : } ; 2037 : ; 2038 : size_type find_first_not_of(const _Elem *_Ptr, ; 2039 : size_type _Off, size_type _Count) const ; 2040 : { // look for none of [_Ptr, _Ptr + _Count) at or after _Off ; 2041 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2042 : if (_Count != 0) ; 2043 : _DEBUG_POINTER(_Ptr); ; 2044 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2045 : ; 2046 : if (_Off < this->_Mysize) ; 2047 : { // room for match, look for it ; 2048 : const _Elem *const _Vptr = this->_Myptr() + this->_Mysize; ; 2049 : for (const _Elem *_Uptr = this->_Myptr() + _Off; ; 2050 : _Uptr < _Vptr; ++_Uptr) ; 2051 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2052 : return (_Uptr - this->_Myptr()); ; 2053 : } ; 2054 : return (npos); ; 2055 : } ; 2056 : ; 2057 : size_type find_first_not_of(const _Elem *_Ptr, ; 2058 : size_type _Off = 0) const ; 2059 : { // look for one of [_Ptr, ) at or after _Off ; 2060 : _DEBUG_POINTER(_Ptr); ; 2061 : return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2062 : } ; 2063 : ; 2064 : size_type find_first_not_of(_Elem _Ch, ; 2065 : size_type _Off = 0) const ; 2066 : { // look for non _Ch at or after _Off ; 2067 : return (find_first_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2068 : } ; 2069 : ; 2070 : size_type find_last_not_of(const _Myt& _Right, ; 2071 : size_type _Off = npos) const _NOEXCEPT ; 2072 : { // look for none of _Right before _Off ; 2073 : return (find_last_not_of(_Right._Myptr(), _Off, _Right.size())); ; 2074 : } ; 2075 : ; 2076 : size_type find_last_not_of(const _Elem *_Ptr, ; 2077 : size_type _Off, size_type _Count) const ; 2078 : { // look for none of [_Ptr, _Ptr + _Count) before _Off ; 2079 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2080 : if (_Count != 0) ; 2081 : _DEBUG_POINTER(_Ptr); ; 2082 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2083 : ; 2084 : if (0 < this->_Mysize) ; 2085 : { // worth searching, do it ; 2086 : const _Elem *_Uptr = this->_Myptr() ; 2087 : + (_Off < this->_Mysize ? _Off : this->_Mysize - 1); ; 2088 : for (; ; --_Uptr) ; 2089 : if (_Traits::find(_Ptr, _Count, *_Uptr) == 0) ; 2090 : return (_Uptr - this->_Myptr()); ; 2091 : else if (_Uptr == this->_Myptr()) ; 2092 : break; ; 2093 : } ; 2094 : return (npos); ; 2095 : } ; 2096 : ; 2097 : size_type find_last_not_of(const _Elem *_Ptr, ; 2098 : size_type _Off = npos) const ; 2099 : { // look for none of [_Ptr, ) before _Off ; 2100 : _DEBUG_POINTER(_Ptr); ; 2101 : return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr))); ; 2102 : } ; 2103 : ; 2104 : size_type find_last_not_of(_Elem _Ch, ; 2105 : size_type _Off = npos) const ; 2106 : { // look for non _Ch before _Off ; 2107 : return (find_last_not_of((const _Elem *)&_Ch, _Off, 1)); ; 2108 : } ; 2109 : ; 2110 : _Myt substr(size_type _Off = 0, size_type _Count = npos) const ; 2111 : { // return [_Off, _Off + _Count) as new string ; 2112 : return (_Myt(*this, _Off, _Count, get_allocator())); ; 2113 : } ; 2114 : ; 2115 : int compare(const _Myt& _Right) const _NOEXCEPT ; 2116 : { // compare [0, _Mysize) with _Right ; 2117 : return (compare(0, this->_Mysize, _Right._Myptr(), _Right.size())); ; 2118 : } ; 2119 : ; 2120 : int compare(size_type _Off, size_type _N0, ; 2121 : const _Myt& _Right) const ; 2122 : { // compare [_Off, _Off + _N0) with _Right ; 2123 : return (compare(_Off, _N0, _Right, 0, npos)); ; 2124 : } ; 2125 : ; 2126 : int compare(size_type _Off, ; 2127 : size_type _N0, const _Myt& _Right, ; 2128 : size_type _Roff, size_type _Count) const ; 2129 : { // compare [_Off, _Off + _N0) with _Right [_Roff, _Roff + _Count) ; 2130 : if (_Right.size() < _Roff) ; 2131 : _Xran(); // _Off off end ; 2132 : if (_Right._Mysize - _Roff < _Count) ; 2133 : _Count = _Right._Mysize - _Roff; // trim _Count to size ; 2134 : return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count)); ; 2135 : } ; 2136 : ; 2137 : int compare(const _Elem *_Ptr) const ; 2138 : { // compare [0, _Mysize) with [_Ptr, ) ; 2139 : _DEBUG_POINTER(_Ptr); ; 2140 : return (compare(0, this->_Mysize, _Ptr, _Traits::length(_Ptr))); ; 2141 : } ; 2142 : ; 2143 : int compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const ; 2144 : { // compare [_Off, _Off + _N0) with [_Ptr, ) ; 2145 : _DEBUG_POINTER(_Ptr); ; 2146 : return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr))); ; 2147 : } ; 2148 : ; 2149 : int compare(size_type _Off, ; 2150 : size_type _N0, const _Elem *_Ptr, size_type _Count) const ; 2151 : { // compare [_Off, _Off + _N0) with [_Ptr, _Ptr + _Count) ; 2152 : #if _ITERATOR_DEBUG_LEVEL == 2 ; 2153 : if (_Count != 0) ; 2154 : _DEBUG_POINTER(_Ptr); ; 2155 : #endif /* _ITERATOR_DEBUG_LEVEL == 2 */ ; 2156 : ; 2157 : if (this->_Mysize < _Off) ; 2158 : _Xran(); // _Off off end ; 2159 : if (this->_Mysize - _Off < _N0) ; 2160 : _N0 = this->_Mysize - _Off; // trim _N0 to size ; 2161 : ; 2162 : size_type _Ans = _Traits::compare(this->_Myptr() + _Off, _Ptr, ; 2163 : _N0 < _Count ? _N0 : _Count); ; 2164 : return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1 ; 2165 : : _N0 == _Count ? 0 : +1); ; 2166 : } ; 2167 : ; 2168 : allocator_type get_allocator() const _NOEXCEPT ; 2169 : { // return allocator object for values ; 2170 : return (this->_Getal()); ; 2171 : } ; 2172 : ; 2173 : void _Chassign(size_type _Off, size_type _Count, _Elem _Ch) ; 2174 : { // assign _Count copies of _Ch beginning at _Off ; 2175 : if (_Count == 1) ; 2176 : _Traits::assign(*(this->_Myptr() + _Off), _Ch); ; 2177 : else ; 2178 : _Traits::assign(this->_Myptr() + _Off, _Count, _Ch); ; 2179 : } ; 2180 : ; 2181 : void _Copy(size_type _Newsize, size_type _Oldlen) ; 2182 : { // copy _Oldlen elements to newly allocated buffer ; 2183 : size_type _Newres = _Newsize | this->_ALLOC_MASK; ; 2184 : if (max_size() < _Newres) ; 2185 : _Newres = _Newsize; // undo roundup if too big ; 2186 : else if (this->_Myres / 2 <= _Newres / 3) ; 2187 : ; ; 2188 : else if (this->_Myres <= max_size() - this->_Myres / 2) ; 2189 : _Newres = this->_Myres ; 2190 : + this->_Myres / 2; // grow exponentially if possible ; 2191 : else ; 2192 : _Newres = max_size(); // settle for max_size() ; 2193 : ; 2194 : _Elem *_Ptr; ; 2195 : _TRY_BEGIN ; 2196 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2197 : _CATCH_ALL ; 2198 : _Newres = _Newsize; // allocation failed, undo roundup and retry ; 2199 : _TRY_BEGIN ; 2200 : _Ptr = this->_Getal().allocate(_Newres + 1); ; 2201 : _CATCH_ALL ; 2202 : _Tidy(true); // failed again, discard storage and reraise ; 2203 : _RERAISE; ; 2204 : _CATCH_END ; 2205 : _CATCH_END ; 2206 : ; 2207 : if (0 < _Oldlen) ; 2208 : _Traits::copy(_Ptr, this->_Myptr(), ; 2209 : _Oldlen); // copy existing elements ; 2210 : _Tidy(true); ; 2211 : this->_Getal().construct(&this->_Bx._Ptr, _Ptr); ; 2212 : this->_Myres = _Newres; ; 2213 : _Eos(_Oldlen); ; 2214 : } ; 2215 : ; 2216 : void _Eos(size_type _Newsize) ; 2217 : { // set new length and null terminator ; 2218 : _Traits::assign(this->_Myptr()[this->_Mysize = _Newsize], _Elem());