[ptr_container] abstraction penalty

Hi, I have a problem with my compiler (ARM's RVCT 2.2.1). It is not generating optimal code for ptr_containers, specifically I've been looking at ptr_vector. I love using ptr_containers to convery ownership but I rely on them being zero overhead over std::vector with explicit delete loops for at least simple operations like a for each loop. I would hope these 2 files (attached) would generate identical assembly for the foo function but they are not even close (attached as txt). I know there are a lot of compilers that are a lot smarter than this one. Unfortunately I'm stuck with this one so I need to teach this compiler to generate better code (by modifying the ptr_container library) or stop using ptr_containers (cry). Thanks, Michael Marcin begin 666 vector.txt M.R!G96YE<F%T960@8GD@05)-+U1H=6UB($,O0RLK($-O;7!I;&5R+"!25D-4 M,BXR(%M"=6EL9" V,39=#0H[(&-O;6UA;F1L:6YE(&%R;6-C(%LM+6-P<" M M+71H=6UB("UC("TM87-M("TM:6YT97)L96%V92 M+6YO7W9F92 M+65X8V5P M=&EO;G,@+2UD;&QI;7!O<G1?<G5N=&EM92 M;RY<;V)J7$%2358U7%5214Q< M=F5C=&]R+F\@+2UC<'4]-50@+2UF<'4]<V]F='9F<" M+69P;6]D93UI965E M7VYO7V9E;G8@+4\R("U/;F]?:VYO=VY?;&EB<F%R>2 M+6%P8W,]+VEN=&5R M("TM9&EA9U]S='EL93UA<FT@+2UD:6%G7W-U<'!R97-S/38U-" M+61I86=? M97)R;W(],3(V-R M+7!R96EN8VQU9&4]7%-Y;6)I86Y<.2XQ7$Y'04=%7U-$ M2U\Q+C%<15!/0S,R7$E.0TQ51$5<4E9#5#)?,EQ25D-4,E\R+F@@+4HN+EQS M<F,@+4HN+EQR97-O=7)C92 M2BXN7&EN8R M2BXN7'-R8R M2BXN7&1A=&$@ M+4HN+EQG=6D@+4HN+EQG=6E<9&ES<&%T8V@@+4HN+EQG=6E<9F%C=&]R:65S M("U*+BY<9W5I7&9R86UE<R M2BXN7&=U:5QG971T97)S("U*+BY<9W5I7&QO M8V%L:7IA=&EO;B M2BXN7&=U:5QP;&%Y97(@+4HN+EQG=6E<<V5T=&5R<R M M2BXN7&=U:5QU=&EL:71I97,@+4HN+EQS:7,@+4HN+EQP;&%Y97(@+4HN+EQP M;&%T9F]R;5QN9VD@+4HN+EPN+EQE;F=I;F4@+4HN+EPN+EQE;F=I;F5<875D M:6]<3D=)("U*+BY<+BY<96YG:6YE7&EO("U*+BY<+BY<96YG:6YE7&EO7$Y' M22 M2BXN7"XN7&5N9VEN95QM871H("U*+BY<+BY<96YG:6YE7&UA=&A<9FEX M960@+4HN+EPN+EQE;F=I;F5<<&%T:%Q.1TD@+4HN+EPN+EQE;F=I;F5<=&5X M=%Q.1TD@+4HN+EPN+EQE;F=I;F5<;65M("U*+BY<+BY<96YG:6YE7'1E>'0@ M+4HN+EPN+EQE;F=I;F5<;V)S97)V97(@+4HN+EPN+EQS9&M<=&EN>5]X;6P@ M+4HN+EPN+EQS9&M<>FQI8B M2BXN7"XN7'-D:UQL<&YG("U*+BY<+BY<<V1K M7$E&1$QI8EQ3;W5R8V5<4')E8V]M<&EL92 M2BXN7"XN7'-D:UQ)1D1,:6)< M4V]U<F-E7$-O<F5,:6(@+4HN+EPN+EQS9&M<249$3&EB7&EN8R M2BXN7"XN M7'-D:UQ)1D1,:6)<4V]U<F-E7%5T:6Q,:6(@+4HN+EPN+EQS9&M<249$3&EB M7%-O=7)C95Q'86UE3&EB("U*+BY<+BY<<V1K7$E&1&QI8EQ3;W5R8V5<3U-, M:6)<7TY'22 M2BXN7"XN7'-D:UQS=&PM<&]R=%Q.1TD@+4HN+EPN+EPN+EPN M+EPN+EPN+EQ3>6UB:6%N7#DN,5Q.1T%'15]31$M?,2XQ7$503T,S,EQI;F-L M=61E("U*+BY<+BY<+BY<+BY<+BY<+BY<4WEM8FEA;EPY+C%<3D=!1T5?4T1+ M7S$N,5Q%4$]#,S)<:6YC;'5D95QO<V5X=&5N<VEO;G-<<F=A("U*+BY<+BY< M+BY<+BY<+BY<+BY<4WEM8FEA;EPY+C%<3D=!1T5?4T1+7S$N,5Q%4$]#,S)< M:6YC;'5D95QO<V5X=&5N<VEO;G-<<W1D87!I<R M2BXN7"XN7"XN7"XN7"XN M7"XN7%-Y;6)I86Y<.2XQ7$Y'04=%7U-$2U\Q+C%<15!/0S,R7&EN8VQU9&5< M;W-E>'1E;G-I;VYS7'-T9&%P:7-<<W1L<&]R=" M2BXN7"XN7'-D:UQM:6YI M+6)O;W-T7$Y'22 M2BXN7"XN7'-D:UQM:6YI+6)O;W-T7$-/34U/3B M2BXN M7"XN7"XN7"XN7"XN7"XN7%-Y;6)I86Y<.2XQ7$Y'04=%7U-$2U\Q+C%<97!O M8S,R7&EN8VQU9&5<=F%R:6%N=" M1%]?34%235]42%5-0E]?("U$7U]-05)- M7TE.5$525T]22U]?("U$3D1%0E5'("U$7U5.24-/1$4@+41?7U-934))04XS M,E]?("U$7U]315))15,V,%\S,%]?("U$7U]315))15,V,%\S6%]?("U$7U]! M4DU#0U]?("U$7U]%4$]#,S)?7R M1%]?34%235]?("U$7U]%04))7U\@+41? M7T%234-#7S)?7R M1%]?05)-0T-?,E\R7U\@+41?7TU!4DU?05)-5C5?7R M M1%]?15A%7U\@+41364U"24%.("U$7U]364U"24%.,S)?7R M1%]?15A%7U\@ M+41?54Y)0T]$12 M1%]?4U504$]25%]#4%!?15A#15!424].4U]?("U$7TY/ M5$A214%$4R M1$U%5$A/1%].3U]25%1)("U$5$E834Q?55-%7U-43" M1%]? M4U504$]25%]#4%!?15A#15!424].4U]?("U$7U]04D]$54-47TE.0TQ51$5? M7SU<(EQ3>6UB:6%N7#DN,5Q.1T%'15]31$M?,2XQ7&5P;V,S,EQI;F-L=61E M7'9A<FEA;G1<4WEM8FEA;E]/4U]V.2XQ+FAR:%PB("TM96YU;5]I<U]I;G0@ M+2UE>'!O<G1?86QL7W9T8FP@=F5C=&]R+F-P<%T-"@T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!42%5-0@T*#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @($%214$@?'PN=&5X='Q\+"!#3T1%+"!214%$3TY,62P@04Q)1TX],@T* M#0H@(" @(" @(" @(" @(" @("!?6C-F;V]V(%!23T,@.R!F;V\H*0T*.SL[ M,30@(" @('9O:60@9F]O*"D-"CL[.S$U(" @("![#0HP,# P,# @(#0X,&$@ M(" @(" @(" @(" @($Q$4B @(" @('(P+'Q,,2XT-'P-"C P,# P,B @8S@P M.2 @(" @(" @(" @(" @3$1-(" @(" @<C L>W(P+'(S?0T*.SL[,38@(" @ M( ES=&0Z.G9E8W1O<CQB*CXZ.FET97)A=&]R(&EE;F0@/2!X+F5N9"@I.PT* M.SL[,3<@(" @( EF;W(H('-T9#HZ=F5C=&]R/&(J/CHZ:71E<F%T;W(@:70@ M/2!X+F)E9VEN*"D[(&ET("$](&EE;F0[("LK:70@*0T*,# P,# T("!E,# S M(" @(" @(" @(" @("!"(" @(" @("!\3#$N,31\#0H[.SLQ." @(" @"7L- M"CL[.S$Y(" @(" )"6(F(&)?(#T@*BII=#L-"B @(" @(" @(" @(" @(" @ M('Q,,2XV? T*,# P,# V("!C.# R(" @(" @(" @(" @("!,1$T@(" @("!R M,"$L>W(Q?0T*,# P,# X(" V.#!A(" @(" @(" @(" @("!,1%(@(" @("!R M,BQ;<C$L(S!=(" @(" @(" @(" @.S@-"C P,# P82 @,6,U,B @(" @(" @ M(" @(" @041$4R @(" @<C(L<C(L(S$@(" @(" @(" @(" @(#LX#0HP,# P M,&,@(#8P,&$@(" @(" @(" @(" @(%-44B @(" @('(R+%MR,2PC,%T@(" @ M(" @(" @(" [. T*(" @(" @(" @(" @(" @(" @?$PQ+C$T? T*,# P,#!E M(" T,CDX(" @(" @(" @(" @("!#35 @(" @("!R,"QR,R @(" @(" @(" @ M(" @(" @.S$W#0HP,# P,3 @(&0Q9CD@(" @(" @(" @(" @($).12 @(" @ M('Q,,2XV?" @(" @(" @(" @(" @(" [,3<-"C P,# Q,B @-#<W," @(" @ M(" @(" @(" @0E@@(" @(" @;'(@(" @(" @(" @(" @(" @(" @(#LQ-PT* M.SL[,C @(" @( D)8E\N8F%R*"D[#0H[.SLR,2 @(" @"7T-"CL[.S(R(" @ M("!]#0H@(" @(" @(" @(" @(" @(" @(" @(" @($5.1% -"@T*(" @(" @ M(" @(" @(" @(" @7U]S=&E?7U\Q,%]V96-T;W)?8W!P(%!23T,-"C P,# Q M-" @-#@P-2 @(" @(" @(" @(" @3$12(" @(" @<C L?$PQ+C0T? T*,# P M,#$V(" R,3 P(" @(" @(" @(" @("!-3U93(" @("!R,2PC, T*,# P,#$X M("!B-3 X(" @(" @(" @(" @("!055-((" @("![<C,L;')]#0HP,# P,6$@ M(#8P,#$@(" @(" @(" @(" @(%-44B @(" @('(Q+%MR,"PC,%T-"C P,# Q M8R @-C T,2 @(" @(" @(" @(" @4U12(" @(" @<C$L6W(P+",T70T*,# P M,#%E(" V,#@Q(" @(" @(" @(" @("!35%(@(" @("!R,2Q;<C L(SA=#0HP M,# P,C @(#0Y,#0@(" @(" @(" @(" @($Q$4B @(" @('(Q+'Q,,2XU,GP- M"C P,# R,B @-&$P,R @(" @(" @(" @(" @3$12(" @(" @<C(L?$PQ+C0X M? T*,# P,#(T("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?7V%E86)I M7V%T97AI= T*,# P,#(X("!B9# X(" @(" @(" @(" @("!03U @(" @("![ M<C,L<&-]#0HP,# P,F$@(# P,# @(" @(" @(" @(" @($1#5R @(" @(# P M,# -"B @(" @(" @(" @(" @(" @('Q,,2XT-'P-"C P,# R8R @,# P,# P M,# @(" @(" @(" @1$-$(" @(" @?'PN8G-S)#5\? T*(" @(" @(" @(" @ M(" @(" @?$PQ+C0X? T*,# P,#,P(" P,# P,# P," @(" @(" @("!$0T0@ M(" @("!?7V1S;U]H86YD;&4-"B @(" @(" @(" @(" @(" @('Q,,2XU,GP- M"C P,# S-" @,# P,# P,# @(" @(" @(" @1$-$(" @(" @7UI.4W0V=F5C M=&]R25 Q8E-A25,Q7T5%1#%%=B [('-T9#HZ=F5C=&]R/&(J+"!S=&0Z.F%L M;&]C871O<CQB*CX^.CI^=F5C=&]R*"D-"B @(" @(" @(" @(" @(" @(" @ M(" @(" @14Y$4 T*#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!! M4D5!('Q\+G1E>'0N8VQE86Y\?"P@0T]$12P@4D5!1$].3%DL($%,24=./3$- M"@T*,# P,# P(" T-C8X(" @(" @(" @(" @("!-3U8@(" @("!R,"QS< T* M,# P,# R("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?6DY384E0,6)% M1#%%=@T*,# P,# V("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?7V-X M85]E;F1?8VQE86YU< T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @ M05)%02!\?'0N7UI.4V%)4#%B140Q179\?"P@8V]M9W)O=7 ]7UI.4V%)4#%B M140Q178L($-/1$4L(%)%041/3DQ9+"!!3$E'3CTQ#0H-"B @(" @(" @(" @ M(" @(" @(%]:3E-A25 Q8D5$,45V(%!23T,@.R!S=&0Z.F%L;&]C871O<CQB M*CXZ.GYA;&QO8V%T;W(H*0T*(" @(" @(" @(" @(" @(" @7UI.4V%)4#%B M140R178@(" @(" @(" @(" @(" @(" [(%-E8V]N9"!E;G1R>2!P;VEN=" [ M('-T9#HZ86QL;V-A=&]R/&(J/CHZ?F%L;&]C871O<E]?<W5B7V]B:F5C="@I M#0HP,# P,# @(#0W-S @(" @(" @(" @(" @($)8(" @(" @(&QR#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($5.1% -"@T*#0H-"B @(" @(" @(" @ M(" @(" @(" @(" @(" @05)%02!\?'0N7UI.4W0V=F5C=&]R25 Q8E-A25,Q M7T5%1#%%=GQ\+"!C;VUG<F]U<#U?6DY3=#9V96-T;W))4#%B4V%)4S%?145$ M,45V+"!#3T1%+"!214%$3TY,62P@04Q)1TX],0T*#0H@(" @(" @(" @(" @ M(" @("!?6DY3=#9V96-T;W))4#%B4V%)4S%?145$,45V(%!23T,@.R!S=&0Z M.G9E8W1O<CQB*BP@<W1D.CIA;&QO8V%T;W(\8BH^/CHZ?G9E8W1O<B@I#0H@ M(" @(" @(" @(" @(" @("!?6DY3=#9V96-T;W))4#%B4V%)4S%?145$,D5V M(" @(" @(" @(" @(" @(" @.R!396-O;F0@96YT<GD@<&]I;G0@.R!S=&0Z M.G9E8W1O<CQB*BP@<W1D.CIA;&QO8V%T;W(\8BH^/CHZ?G9E8W1O<E]?<W5B M7V]B:F5C="@I#0H[.SLR.#4@(" @#0H[.SLR.#8@(" @("!^=F5C=&]R*"D@ M>R!?1&5S=')O>2AT:&ES+3Y?35]S=&%R="P@=&AI<RT^7TU?9FEN:7-H*3L@ M?0T*,# P,# P(" R,3 P(" @(" @(" @(" @("!-3U93(" @("!R,2PC, T* M,# P,# R("!B-3 X(" @(" @(" @(" @("!055-((" @("![<C,L;')]#0HP M,# P,#0@(#DQ,# @(" @(" @(" @(" @(%-44B @(" @('(Q+%MS<"PC,%T- M"C P,# P-B @9C=F9B!F9F9E(" @(" @(" @0DP@(" @(" @7UI.4W0Q,E]6 M96-T;W)?8F%S94E0,6)384E3,5]%140Q178-"C P,# P82 @8F0P." @(" @ M(" @(" @(" @4$]0(" @(" @>W(S+'!C?0T*(" @(" @(" @(" @(" @(" @ M(" @(" @("!%3D10#0H-"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @ M($%214$@?'QT+E]:3E-T-G9E8W1O<DE0,6)384E3,5]%140Q178N8VQE86Y\ M?"P@8V]M9W)O=7 ]7UI.4W0V=F5C=&]R25 Q8E-A25,Q7T5%1#%%=BP@0T]$ M12P@4D5!1$].3%DL($%,24=./3$-"@T*,# P,# P("!F-V9F(&9F9F4@(" @ M(" @("!"3" @(" @("!?7V-X85]E;F1?8VQE86YU< T*#0H-"B @(" @(" @ M(" @(" @(" @(" @(" @(" @05)%02!\?'0N7UI.4W0Q,E]696-T;W)?8F%S M94E0,6)384E3,5]%140Q179\?"P@8V]M9W)O=7 ]7UI.4W0Q,E]696-T;W)? M8F%S94E0,6)384E3,5]%140Q178L($-/1$4L(%)%041/3DQ9+"!!3$E'3CTQ M#0H-"B @(" @(" @(" @(" @(" @(%]:3E-T,3)?5F5C=&]R7V)A<V5)4#%B M4V%)4S%?145$,45V(%!23T,@.R!S=&0Z.E]696-T;W)?8F%S93QB*BP@<W1D M.CIA;&QO8V%T;W(\8BH^/CHZ?E]696-T;W)?8F%S92@I#0H@(" @(" @(" @ M(" @(" @("!?6DY3=#$R7U9E8W1O<E]B87-E25 Q8E-A25,Q7T5%1#)%=B @ M(" @(" @(" @(" @(" @(#L@4V5C;VYD(&5N=')Y('!O:6YT(#L@<W1D.CI? M5F5C=&]R7V)A<V4\8BHL('-T9#HZ86QL;V-A=&]R/&(J/CXZ.GY?5F5C=&]R M7V)A<V5?7W-U8E]O8FIE8W0H*0T*.SL[.#0@(" @( T*.SL[.#4@(" @(" @ M?E]696-T;W)?8F%S92@I('L@#0HP,# P,# @(&(U,3 @(" @(" @(" @(" @ M(%!54T@@(" @('MR-"QL<GT-"C P,# P,B @,# P-" @(" @(" @(" @(" @ M34]64R @(" @<C0L<C -"CL[.S@V(" @(" @(" @:68@*%]-7W-T87)T("$] M,"D@#0HP,# P,#0@(#8X,# @(" @(" @(" @(" @($Q$4B @(" @('(P+%MR M,"PC,%T-"C P,# P-B @,C@P," @(" @(" @(" @(" @0TU0(" @(" @<C L M(S -"C P,# P." @9# P,2 @(" @(" @(" @(" @0D51(" @(" @?$PW+C$T M? T*,# P,#!A("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?6F1L4'8- M"CL[.S@W(" @(" @(" @7TU?96YD7V]F7W-T;W)A9V4N9&5A;&QO8V%T92A? M35]S=&%R="P@7TU?96YD7V]F7W-T;W)A9V4N7TU?9&%T82 M(%]-7W-T87)T M*3L@#0H[.SLX." @(" @("!]#0H@(" @(" @(" @(" @(" @("!\3#<N,31\ M#0HP,# P,&4@(# P,C @(" @(" @(" @(" @($U/5E,@(" @('(P+'(T#0HP M,# P,3 @(&)D,3 @(" @(" @(" @(" @(%!/4" @(" @('MR-"QP8WT-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @14Y$4 T*#0H-"@T*(" @(" @(" @ M(" @(" @(" @(" @(" @("!!4D5!('Q\+F)S<WQ\+"!.3TE.250L($%,24=. M/3(-"@T*(" @(" @(" @(" @(" @(" @?'PN8G-S)#5\? T*(" @(" @(" @ M(" @(" @(" @> T*(" @(" @(" @(" @(" @(" @(" @(" @(" E(#$R#0H- M"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!!4D5!('Q\+FEN:71?87)R M87E\?"P@1$%402P@4D5!1$].3%DL($E.251?05)205DL($%,24=./3(-"@T* M(" @(" @(" @(" @(" @(" @?'PN:6YI=%]A<G)A>20V?'P-"B @(" @(" @ M(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!?7U)%3$]#(#,X+"!?7W-T:5]?7S$P7W9E M8W1O<E]C<' -"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@ M?'PN05)-+F5X=&%B?'PL($1!5$$L(%)%041/3DQ9+"!!3$E'3CTR#0H-"B @ M(" @(" @(" @(" @(" @('Q\+D%232YE>'1A8B0W?'P-"B @(" @(" @(" @ M(" @(" @('Q\+F5X=&%B+E]?<W1I7U]?,3!?=F5C=&]R7V-P<'Q\#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @(#!X.# P,#@T,# -"B @ M(" @(" @(" @(" @(" @(" @(" @(" @1$-7(" @(" @,'@P,# R#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($1#5R @(" @(#!X,# Q- T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,# Q#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\+G1E>'0N8VQE M86Y\? T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P M,# P,# P#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!!4D5!('Q\ M+D%232YE>&ED>'Q\+"!,24Y+3U)$15(]?'PN=&5X='Q\+"!$051!+"!214%$ M3TY,62P@4T5#5%E013U[4TA47T%235]%6$E$6'TL($%,24=./3(-"@T*(" @ M(" @(" @(" @(" @(" @?'PN05)-+F5X:61X)#A\? T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,#$T#0H@(" @(" @(" @ M(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\+G1E>'1\? T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,# P#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\+F5X=&%B+E]? M<W1I7U]?,3!?=F5C=&]R7V-P<'Q\#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @(%)%455)4D4@7U]A96%B:5]U;G=I;F1?8W!P7W!R, T*#0H-"B @(" @ M(" @(" @(" @(" @(" @(" @(" @05)%02!\87)E85]N=6UB97(N,7PL($Q) M3DM/4D1%4CU\?"YT97AT+F-L96%N?'PL($1!5$$L(%)%041/3DQ9+"!314-4 M65!%/7M32%1?05)-7T582418?2P@04Q)1TX],@T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!%6%!/4E1!4R!\87)E85]N=6UB97(N,7PL('Q\+D%232YE M>&ED>'Q\#0H@(" @(" @(" @(" @(" @("!\?"Y!4DTN97AI9'@D.7Q\#0H@ M(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# - M"B @(" @(" @(" @(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'PN=&5X M="YC;&5A;GQ\#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @ M(#!X,# P,# P,#$-"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%2 M14$@?&%R96%?;G5M8F5R+C)\+"!,24Y+3U)$15(]?'QT+E]:3E-A25 Q8D5$ M,45V?'PL($1!5$$L(%)%041/3DQ9+"!314-465!%/7M32%1?05)-7T582418 M?2P@04Q)1TX],@T*(" @(" @(" @(" @(" @(" @(" @(" @("!%6%!/4E1! M4R!\87)E85]N=6UB97(N,GPL('Q\+D%232YE>&ED>'Q\#0H@(" @(" @(" @ M(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# -"B @(" @(" @ M(" @(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'QT+E]:3E-A25 Q8D5$ M,45V?'P-"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P M,# P,# P,0T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\ M87)E85]N=6UB97(N,WPL($Q)3DM/4D1%4CU\?'0N7UI.4W0V=F5C=&]R25 Q M8E-A25,Q7T5%1#%%=GQ\+"!$051!+"!214%$3TY,62P@4T5#5%E013U[4TA4 M7T%235]%6$E$6'TL($%,24=./3(-"B @(" @(" @(" @(" @(" @(" @(" @ M(" @15A03U)405,@?&%R96%?;G5M8F5R+C-\+"!\?"Y!4DTN97AI9'A\? T* M(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,# P M#0H@(" @(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\="Y? M6DY3=#9V96-T;W))4#%B4V%)4S%?145$,45V?'P-"B @(" @(" @(" @(" @ M(" @(" @(" @(" @1$-$(" @(" @,'@X,# P.#0P, T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!215%525)%(%]?865A8FE?=6YW:6YD7V-P<%]P<C - M"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?&%R96%?;G5M M8F5R+C1\+"!,24Y+3U)$15(]?'QT+E]:3E-T-G9E8W1O<DE0,6)384E3,5]% M140Q178N8VQE86Y\?"P@1$%402P@4D5!1$].3%DL(%-%0U194$4]>U-(5%]! M4DU?15A)1%A]+"!!3$E'3CTR#0H@(" @(" @(" @(" @(" @(" @(" @(" @ M($584$]25$%3('QA<F5A7VYU;6)E<BXT?"P@?'PN05)-+F5X:61X?'P-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T* M(" @(" @(" @(" @(" @(" @(" @(" @("!?7U)%3$]#(#0R+"!\?'0N7UI. M4W0V=F5C=&]R25 Q8E-A25,Q7T5%1#%%=BYC;&5A;GQ\#0H@(" @(" @(" @ M(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,#$-"@T*#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($%214$@?&%R96%?;G5M8F5R+C5\+"!, M24Y+3U)$15(]?'QT+E]:3E-T,3)?5F5C=&]R7V)A<V5)4#%B4V%)4S%?145$ M,45V?'PL($1!5$$L(%)%041/3DQ9+"!314-465!%/7M32%1?05)-7T582418 M?2P@04Q)1TX],@T*(" @(" @(" @(" @(" @(" @(" @(" @("!%6%!/4E1! M4R!\87)E85]N=6UB97(N-7PL('Q\+D%232YE>&ED>'Q\#0H@(" @(" @(" @ M(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# -"B @(" @(" @ M(" @(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'QT+E]:3E-T,3)?5F5C M=&]R7V)A<V5)4#%B4V%)4S%?145$,45V?'P-"B @(" @(" @(" @(" @(" @ M(" @(" @(" @1$-$(" @(" @,'@P,# P,# P,0T*#0H-"B @(" @(" @(" @ M(" @(" @(" @(" @(" @05)%02!\?"YD:7)E8W1I=F5\?"P@4D5!1$].3%DL M($Y/04Q,3T,L($%,24=./3(-"@T*"41#0B B(SQ364U%1$E4/B-<;B(-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @1$-"("))35!/4E0@7U]A96%B:5]A M=&5X:71<;B(-"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-"("))35!/ M4E0@7U]C>&%?96YD7V-L96%N=7!<;B(-"B @(" @(" @(" @(" @(" @(" @ M(" @(" @1$-"("))35!/4E0@7UID;%!V7&XB#0H@(" @(" @(" @(" @(" @ M(" @(" @(" @($1#0B B24U03U)4(%]?865A8FE?=6YW:6YD7V-P<%]P<C!< $;B(-"@`` ` end begin 666 ptr_vector.txt M.R!G96YE<F%T960@8GD@05)-+U1H=6UB($,O0RLK($-O;7!I;&5R+"!25D-4 M,BXR(%M"=6EL9" V,39=#0H[(&-O;6UA;F1L:6YE(&%R;6-C(%LM+6-P<" M M+71H=6UB("UC("TM87-M("TM:6YT97)L96%V92 M+6YO7W9F92 M+65X8V5P M=&EO;G,@+2UD;&QI;7!O<G1?<G5N=&EM92 M;RY<;V)J7$%2358U7%5214Q< M<'1R7W9E8W1O<BYO("TM8W!U/354("TM9G!U/7-O9G1V9G @+2UF<&UO9&4] M:65E95]N;U]F96YV("U/,B M3VYO7VMN;W=N7VQI8G)A<GD@+2UA<&-S/2]I M;G1E<B M+61I86=?<W1Y;&4]87)M("TM9&EA9U]S=7!P<F5S<STV-30@+2UD M:6%G7V5R<F]R/3$R-C<@+2UP<F5I;F-L=61E/5Q3>6UB:6%N7#DN,5Q.1T%' M15]31$M?,2XQ7$503T,S,EQ)3D-,541%7%)60U0R7S)<4E9#5#)?,BYH("U* M+BY<<W)C("U*+BY<<F5S;W5R8V4@+4HN+EQI;F,@+4HN+EQS<F,@+4HN+EQD M871A("U*+BY<9W5I("U*+BY<9W5I7&1I<W!A=&-H("U*+BY<9W5I7&9A8W1O M<FEE<R M2BXN7&=U:5QF<F%M97,@+4HN+EQG=6E<9V5T=&5R<R M2BXN7&=U M:5QL;V-A;&EZ871I;VX@+4HN+EQG=6E<<&QA>65R("U*+BY<9W5I7'-E='1E M<G,@+4HN+EQG=6E<=71I;&ET:65S("U*+BY<<VES("U*+BY<<&QA>65R("U* M+BY<<&QA=&9O<FU<;F=I("U*+BY<+BY<96YG:6YE("U*+BY<+BY<96YG:6YE M7&%U9&EO7$Y'22 M2BXN7"XN7&5N9VEN95QI;R M2BXN7"XN7&5N9VEN95QI M;UQ.1TD@+4HN+EPN+EQE;F=I;F5<;6%T:" M2BXN7"XN7&5N9VEN95QM871H M7&9I>&5D("U*+BY<+BY<96YG:6YE7'!A=&A<3D=)("U*+BY<+BY<96YG:6YE M7'1E>'1<3D=)("U*+BY<+BY<96YG:6YE7&UE;2 M2BXN7"XN7&5N9VEN95QT M97AT("U*+BY<+BY<96YG:6YE7&]B<V5R=F5R("U*+BY<+BY<<V1K7'1I;GE? M>&UL("U*+BY<+BY<<V1K7'IL:6(@+4HN+EPN+EQS9&M<;'!N9R M2BXN7"XN M7'-D:UQ)1D1,:6)<4V]U<F-E7%!R96-O;7!I;&4@+4HN+EPN+EQS9&M<249$ M3&EB7%-O=7)C95Q#;W)E3&EB("U*+BY<+BY<<V1K7$E&1$QI8EQI;F,@+4HN M+EPN+EQS9&M<249$3&EB7%-O=7)C95Q5=&EL3&EB("U*+BY<+BY<<V1K7$E& M1$QI8EQ3;W5R8V5<1V%M94QI8B M2BXN7"XN7'-D:UQ)1D1L:6)<4V]U<F-E M7$]33&EB7%].1TD@+4HN+EPN+EQS9&M<<W1L+7!O<G1<3D=)("U*+BY<+BY< M+BY<+BY<+BY<+BY<4WEM8FEA;EPY+C%<3D=!1T5?4T1+7S$N,5Q%4$]#,S)< M:6YC;'5D92 M2BXN7"XN7"XN7"XN7"XN7"XN7%-Y;6)I86Y<.2XQ7$Y'04=% M7U-$2U\Q+C%<15!/0S,R7&EN8VQU9&5<;W-E>'1E;G-I;VYS7')G82 M2BXN M7"XN7"XN7"XN7"XN7"XN7%-Y;6)I86Y<.2XQ7$Y'04=%7U-$2U\Q+C%<15!/ M0S,R7&EN8VQU9&5<;W-E>'1E;G-I;VYS7'-T9&%P:7,@+4HN+EPN+EPN+EPN M+EPN+EPN+EQ3>6UB:6%N7#DN,5Q.1T%'15]31$M?,2XQ7$503T,S,EQI;F-L M=61E7&]S97AT96YS:6]N<UQS=&1A<&ES7'-T;'!O<G0@+4HN+EPN+EQS9&M< M;6EN:2UB;V]S=%Q.1TD@+4HN+EPN+EQS9&M<;6EN:2UB;V]S=%Q#3TU-3TX@ M+4HN+EPN+EPN+EPN+EPN+EPN+EQ3>6UB:6%N7#DN,5Q.1T%'15]31$M?,2XQ M7&5P;V,S,EQI;F-L=61E7'9A<FEA;G0@+41?7TU!4DU?5$A534)?7R M1%]? M34%235])3E1%4E=/4DM?7R M1$Y$14)51R M1%]53DE#3T1%("U$7U]364U" M24%.,S)?7R M1%]?4T522453-C!?,S!?7R M1%]?4T522453-C!?,UA?7R M M1%]?05)-0T-?7R M1%]?15!/0S,R7U\@+41?7TU!4DU?7R M1%]?14%"25]? M("U$7U]!4DU#0U\R7U\@+41?7T%234-#7S)?,E]?("U$7U]-05)-7T%2358U M7U\@+41?7T5815]?("U$4UE-0DE!3B M1%]?4UE-0DE!3C,R7U\@+41?7T58 M15]?("U$7U5.24-/1$4@+41?7U-54%!/4E1?0U!07T580T505$E/3E-?7R M M1%].3U1(4D5!1%,@+41-151(3T1?3D]?4E1422 M1%1)6$U,7U5315]35$P@ M+41?7U-54%!/4E1?0U!07T580T505$E/3E-?7R M1%]?4%)/1%5#5%])3D-, M541%7U\]7")<4WEM8FEA;EPY+C%<3D=!1T5?4T1+7S$N,5QE<&]C,S)<:6YC M;'5D95QV87)I86YT7%-Y;6)I86Y?3U-?=CDN,2YH<FA<(B M+65N=6U?:7-? M:6YT("TM97AP;W)T7V%L;%]V=&)L('!T<E]V96-T;W(N8W!P70T*#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @(%1(54U"#0H-"B @(" @(" @(" @(" @ M(" @(" @(" @(" @05)%02!\?"YT97AT?'PL($-/1$4L(%)%041/3DQ9+"!! M3$E'3CTR#0H-"B @(" @(" @(" @(" @(" @(%]:,V9O;W8@4%)/0R [(&9O M;R@I#0H[.SLQ-" @(" @=F]I9"!F;V\H*0T*.SL[,34@(" @('L-"C P,# P M," @-#DP9B @(" @(" @(" @(" @3$12(" @(" @<C$L?$PQ+C8T? T*,# P M,# R("!B-3%C(" @(" @(" @(" @("!055-((" @("![<C(M<C0L;')]#0HP M,# P,#0@(#8X-#@@(" @(" @(" @(" @($Q$4B @(" @('(P+%MR,2PC-%T- M"C P,# P-B @.3 P,2 @(" @(" @(" @(" @4U12(" @(" @<C L6W-P+",T M72 @(" @(" @(" @(#LQ.#$-"C P,# P." @-C@P." @(" @(" @(" @(" @ M3$12(" @(" @<C L6W(Q+",P70T*,# P,#!A("!E,# V(" @(" @(" @(" @ M("!"(" @(" @("!\3#$N,C9\#0H@(" @(" @(" @(" @(" @("!\3#$N,3)\ M#0HP,# P,&,@(#DX,# @(" @(" @(" @(" @($Q$4B @(" @('(P+%MS<"PC M,%T-"C P,# P92 @-C@P," @(" @(" @(" @(" @3$12(" @(" @<C L6W(P M+",P70T*,# P,#$P(" V.# Q(" @(" @(" @(" @("!,1%(@(" @("!R,2Q; M<C L(S!=#0HP,# P,3(@(#%C-#D@(" @(" @(" @(" @($%$1%,@(" @('(Q M+'(Q+",Q#0HP,# P,30@(#8P,#$@(" @(" @(" @(" @(%-44B @(" @('(Q M+%MR,"PC,%T-"C P,# Q-B @.3@P," @(" @(" @(" @(" @3$12(" @(" @ M<C L6W-P+",P70T*,# P,#$X(" Q9# P(" @(" @(" @(" @("!!1$13(" @ M("!R,"QR,"PC- T*(" @(" @(" @(" @(" @(" @?$PQ+C(V? T*,# P,#%A M(" Y,# P(" @(" @(" @(" @("!35%(@(" @("!R,"Q;<W L(S!=#0HP,# P M,6,@(#0V-C@@(" @(" @(" @(" @($U/5B @(" @('(P+'-P#0HP,# P,64@ M(&$Y,#$@(" @(" @(" @(" @($%$1" @(" @('(Q+'-P+",T#0HP,# P,C @ M(&8W9F8@9F9F92 @(" @(" @($),(" @(" @(%]:3C5B;V]S=&YE25!0=C%B M4S)?4S-?145B4DM.4U\Q-W9O:61?<'1R7VET97)A=&]R251?5#!?14522TY3 M-%])5#%?5#)?144-"C P,# R-" @,C@P," @(" @(" @(" @(" @0TU0(" @ M(" @<C L(S -"C P,# R-B @9#%F,2 @(" @(" @(" @(" @0DY%(" @(" @ M?$PQ+C$R? T*.SL[,38@(" @( EB;V]S=#HZ<'1R7W9E8W1O<CQB/CHZ:71E M<F%T;W(@:65N9" ]('@N96YD*"D[#0H[.SLQ-R @(" @"69O<B@@8F]O<W0Z M.G!T<E]V96-T;W(\8CXZ.FET97)A=&]R(&ET(#T@>"YB96=I;B@I.R!I=" A M/2!I96YD.R K*VET("D-"C P,# R." @8F0Q8R @(" @(" @(" @(" @4$]0 M(" @(" @>W(R+7(T+'!C?0T*.SL[,3@@(" @( E[#0H[.SLQ.2 @(" @"0EB M)B!B7R ]("II=#L-"CL[.S(P(" @(" )"6)?+F)A<B@I.PT*.SL[,C$@(" @ M( E]#0H[.SLR,B @(" @?0T*(" @(" @(" @(" @(" @(" @(" @(" @("!% M3D10#0H-"B @(" @(" @(" @(" @(" @(%]?<W1I7U]?,31?<'1R7W9E8W1O M<E]C<' @4%)/0PT*,# P,#)A(" T.# U(" @(" @(" @(" @("!,1%(@(" @ M("!R,"Q\3#$N-C1\#0HP,# P,F,@(#(Q,# @(" @(" @(" @(" @($U/5E,@ M(" @('(Q+",P#0HP,# P,F4@(&(U,#@@(" @(" @(" @(" @(%!54T@@(" @ M('MR,RQL<GT-"C P,# S," @-C P,2 @(" @(" @(" @(" @4U12(" @(" @ M<C$L6W(P+",P70T*,# P,#,R(" V,#0Q(" @(" @(" @(" @("!35%(@(" @ M("!R,2Q;<C L(S1=#0HP,# P,S0@(#8P.#$@(" @(" @(" @(" @(%-44B @ M(" @('(Q+%MR,"PC.%T-"C P,# S-B @-#DP-" @(" @(" @(" @(" @3$12 M(" @(" @<C$L?$PQ+C<R? T*,# P,#,X(" T83 R(" @(" @(" @(" @("!, M1%(@(" @("!R,BQ\3#$N-CA\#0HP,# P,V$@(&8W9F8@9F9F92 @(" @(" @ M($),(" @(" @(%]?865A8FE?871E>&ET#0HP,# P,V4@(&)D,#@@(" @(" @ M(" @(" @(%!/4" @(" @('MR,RQP8WT-"B @(" @(" @(" @(" @(" @('Q, M,2XV-'P-"C P,# T," @,# P,# P,# @(" @(" @(" @1$-$(" @(" @?'PN M8G-S)#5\? T*(" @(" @(" @(" @(" @(" @?$PQ+C8X? T*,# P,#0T(" P M,# P,# P," @(" @(" @("!$0T0@(" @("!?7V1S;U]H86YD;&4-"B @(" @ M(" @(" @(" @(" @('Q,,2XW,GP-"C P,# T." @,# P,# P,# @(" @(" @ M(" @1$-$(" @(" @7UI.-6)O;W-T,3!P=')?=F5C=&]R23%B3E-?,C!H96%P M7V-L;VYE7V%L;&]C871O<D5384E0=D5%1#%%=B [(&)O;W-T.CIP=')?=F5C M=&]R/&(L(&)O;W-T.CIH96%P7V-L;VYE7V%L;&]C871O<BP@<W1D.CIA;&QO M8V%T;W(\=F]I9"H^/CHZ?G!T<E]V96-T;W(H*0T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!%3D10#0H-"@T*#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @($%214$@?'PN=&5X="YC;&5A;GQ\+"!#3T1%+"!214%$3TY,62P@04Q) M1TX],0T*#0HP,# P,# @(#0V-C@@(" @(" @(" @(" @($U/5B @(" @('(P M+'-P#0HP,# P,#(@(&8W9F8@9F9F92 @(" @(" @($),(" @(" @(%]:3E-A M25!V140Q178-"C P,# P-B @9C=F9B!F9F9E(" @(" @(" @0DP@(" @(" @ M7U]C>&%?96YD7V-L96%N=7 -"@T*#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @($%214$@?'QT+E]:3C5B;V]S=#(P<'1R7V-O;G1A:6YE<E]D971A:6PR M-')E=F5R<VEB;&5?<'1R7V-O;G1A:6YE<DE.4S!?,35S97%U96YC95]C;VYF M:6=),6)3=#9V96-T;W))4'9384E3-5]%145%3E-?,C!H96%P7V-L;VYE7V%L M;&]C871O<D5%1#%%=GQ\+"!C;VUG<F]U<#U?6DXU8F]O<W0R,'!T<E]C;VYT M86EN97)?9&5T86EL,C1R979E<G-I8FQE7W!T<E]C;VYT86EN97))3E,P7S$U M<V5Q=65N8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V4V%)4S5?145%14Y37S(P M:&5A<%]C;&]N95]A;&QO8V%T;W)%140Q178L($-/1$4L(%)%041/3DQ9+"!! M3$E'3CTQ#0H-"B @(" @(" @(" @(" @(" @(%]:3C5B;V]S=#(P<'1R7V-O M;G1A:6YE<E]D971A:6PR-')E=F5R<VEB;&5?<'1R7V-O;G1A:6YE<DE.4S!? M,35S97%U96YC95]C;VYF:6=),6)3=#9V96-T;W))4'9384E3-5]%145%3E-? M,C!H96%P7V-L;VYE7V%L;&]C871O<D5%1#%%=B!04D]#(#L@8F]O<W0Z.G!T M<E]C;VYT86EN97)?9&5T86EL.CIR979E<G-I8FQE7W!T<E]C;VYT86EN97(\ M8F]O<W0Z.G!T<E]C;VYT86EN97)?9&5T86EL.CIS97%U96YC95]C;VYF:6<\ M8BP@<W1D.CIV96-T;W(\=F]I9"HL('-T9#HZ86QL;V-A=&]R/'9O:60J/CX^ M+"!B;V]S=#HZ:&5A<%]C;&]N95]A;&QO8V%T;W(^.CI^<F5V97)S:6)L95]P M=')?8V]N=&%I;F5R*"D-"B @(" @(" @(" @(" @(" @(%]:3C5B;V]S=#(P M<'1R7V-O;G1A:6YE<E]D971A:6PR-')E=F5R<VEB;&5?<'1R7V-O;G1A:6YE M<DE.4S!?,35S97%U96YC95]C;VYF:6=),6)3=#9V96-T;W))4'9384E3-5]% M145%3E-?,C!H96%P7V-L;VYE7V%L;&]C871O<D5%1#)%=B @(" @(" @(" @ M(" @(" @(#L@4V5C;VYD(&5N=')Y('!O:6YT(#L@8F]O<W0Z.G!T<E]C;VYT M86EN97)?9&5T86EL.CIR979E<G-I8FQE7W!T<E]C;VYT86EN97(\8F]O<W0Z M.G!T<E]C;VYT86EN97)?9&5T86EL.CIS97%U96YC95]C;VYF:6<\8BP@<W1D M.CIV96-T;W(\=F]I9"HL('-T9#HZ86QL;V-A=&]R/'9O:60J/CX^+"!B;V]S M=#HZ:&5A<%]C;&]N95]A;&QO8V%T;W(^.CI^<F5V97)S:6)L95]P=')?8V]N M=&%I;F5R7U]S=6)?;V)J96-T*"D-"CL[.S,U,B @(" @(" @(" @('YR979E M<G-I8FQE7W!T<E]C;VYT86EN97(H*0T*.SL[,S4S(" @(" @(" @(" @>R - M"C P,# P," @8C4Q8R @(" @(" @(" @(" @4%532" @(" @>W(R+7(T+&QR M?0T*,# P,# R(" P,# T(" @(" @(" @(" @("!-3U93(" @("!R-"QR, T* M,# P,# T(" V.# P(" @(" @(" @(" @("!,1%(@(" @("!R,"Q;<C L(S!= M#0HP,# P,#8@(#DP,# @(" @(" @(" @(" @(%-44B @(" @('(P+%MS<"PC M,%T-"C P,# P." @-C@V," @(" @(" @(" @(" @3$12(" @(" @<C L6W(T M+",T72 @(" @(" @(" @(#LS-S8-"C P,# P82 @.3 P,2 @(" @(" @(" @ M(" @4U12(" @(" @<C L6W-P+",T72 @(" @(" @(" @(#LR,C<-"C P,# P M8R @93 P-B @(" @(" @(" @(" @0B @(" @(" @?$PS+C(X?" @(" @(" @ M(" @(" @(#LR,C<-"B @(" @(" @(" @(" @(" @('Q,,RXQ-'P-"C P,# P M92 @.3@P," @(" @(" @(" @(" @3$12(" @(" @<C L6W-P+",P70T*,# P M,#$P(" V.# P(" @(" @(" @(" @("!,1%(@(" @("!R,"Q;<C L(S!=#0HP M,# P,3(@(&8W9F8@9F9F92 @(" @(" @($),(" @(" @(%]:9&Q0=@T*,# P M,#$V(" Y.# P(" @(" @(" @(" @("!,1%(@(" @("!R,"Q;<W L(S!=#0HP M,# P,3@@(#%D,# @(" @(" @(" @(" @($%$1%,@(" @('(P+'(P+",T#0HP M,# P,6$@(#DP,# @(" @(" @(" @(" @(%-44B @(" @('(P+%MS<"PC,%T- M"B @(" @(" @(" @(" @(" @('Q,,RXR.'P-"C P,# Q8R @83DP,2 @(" @ M(" @(" @(" @041$(" @(" @<C$L<W L(S0@(" @(" @(" @(" @(#LR-3,- M"C P,# Q92 @-#8V." @(" @(" @(" @(" @34]6(" @(" @<C L<W @(" @ M(" @(" @(" @(" @(#LR-3,-"C P,# R," @9C=F9B!F9F9E(" @(" @(" @ M0DP@(" @(" @7UI.-6)O;W-T;F5)4%!V,6)3,E]3,U]%16)22TY37S$W=F]I M9%]P=')?:71E<F%T;W))5%]4,%]%15)+3E,T7TE4,5]4,E]%12 [,C4S#0HP M,# P,C0@(#(X,# @(" @(" @(" @(" @($--4" @(" @('(P+",P(" @(" @ M(" @(" @(" @(" [,C4S#0HP,# P,C8@(&0Q9C(@(" @(" @(" @(" @($). M12 @(" @('Q,,RXQ-'P@(" @(" @(" @(" @(" [,C4S#0H[.SLS-30@(" @ M(" @(" @(" @(" @<F5M;W9E7V%L;"@I.PT*.SL[,S4U(" @(" @(" @(" @ M?0T*,# P,#(X(" P,#(P(" @(" @(" @(" @("!-3U93(" @("!R,"QR- T* M,# P,#)A("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?6DY3=#9V96-T M;W))4'9384E3,%]%140Q178-"C P,# R92 @8F0Q8R @(" @(" @(" @(" @ M4$]0(" @(" @>W(R+7(T+'!C?0T*(" @(" @(" @(" @(" @(" @(" @(" @ M("!%3D10#0H-"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@ M?'QT+E]:3C5B;V]S=#(P<'1R7V-O;G1A:6YE<E]D971A:6PR-')E=F5R<VEB M;&5?<'1R7V-O;G1A:6YE<DE.4S!?,35S97%U96YC95]C;VYF:6=),6)3=#9V M96-T;W))4'9384E3-5]%145%3E-?,C!H96%P7V-L;VYE7V%L;&]C871O<D5% M1#%%=BYC;&5A;GQ\+"!C;VUG<F]U<#U?6DXU8F]O<W0R,'!T<E]C;VYT86EN M97)?9&5T86EL,C1R979E<G-I8FQE7W!T<E]C;VYT86EN97))3E,P7S$U<V5Q M=65N8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V4V%)4S5?145%14Y37S(P:&5A M<%]C;&]N95]A;&QO8V%T;W)%140Q178L($-/1$4L(%)%041/3DQ9+"!!3$E' M3CTQ#0H-"C P,# P," @,# R," @(" @(" @(" @(" @34]64R @(" @<C L M<C0-"C P,# P,B @9C=F9B!F9F9E(" @(" @(" @0DP@(" @(" @7UI.4W0V M=F5C=&]R25!V4V%)4S!?145$,45V#0HP,# P,#8@(&8W9F8@9F9F92 @(" @ M(" @($),(" @(" @(%]?8WAA7V5N9%]C;&5A;G5P#0H-"@T*(" @(" @(" @ M(" @(" @(" @(" @(" @("!!4D5!('Q\="Y?6DXU8F]O<W1N94E04'8Q8E,R M7U,S7T5%8E)+3E-?,3=V;VED7W!T<E]I=&5R871O<DE47U0P7T5%4DM.4S1? M250Q7U0R7T5%?'PL(&-O;6=R;W5P/5]:3C5B;V]S=&YE25!0=C%B4S)?4S-? M145B4DM.4U\Q-W9O:61?<'1R7VET97)A=&]R251?5#!?14522TY3-%])5#%? M5#)?144L($-/1$4L(%)%041/3DQ9+"!!3$E'3CTQ#0H-"B @(" @(" @(" @ M(" @(" @(%]:3C5B;V]S=&YE25!0=C%B4S)?4S-?145B4DM.4U\Q-W9O:61? M<'1R7VET97)A=&]R251?5#!?14522TY3-%])5#%?5#)?144@4%)/0R [(&)O M;W-T.CIO<&5R871O<B A/3QV;VED*BHL(&(L('9O:60J*BP@8CXH8V]N<W0@ M8F]O<W0Z.G9O:61?<'1R7VET97)A=&]R/%0Q+"!4,CXF+"!C;VYS="!B;V]S M=#HZ=F]I9%]P=')?:71E<F%T;W(\5#,L(%0T/B8I#0H[.SLQ.#0@(" @(" @ M(" @(" @(" @(" @(" @(" @(" @(" @(" @("!C;VYS="!V;VED7W!T<E]I M=&5R871O<CQ6;VED271E<E4L53XF('(@*0T*.SL[,3@U(" @(" @(" @(" @ M>PT*,# P,# P(" V.# P(" @(" @(" @(" @("!,1%(@(" @("!R,"Q;<C L M(S!=#0H[.SLQ.#8@(" @(" @(" @(" @(" @<F5T=7)N(&PN8F%S92@I("$] M('(N8F%S92@I.PT*,# P,# R(" V.# Y(" @(" @(" @(" @("!,1%(@(" @ M("!R,2Q;<C$L(S!=#0HP,# P,#0@(#0R.#@@(" @(" @(" @(" @($--4" @ M(" @('(P+'(Q#0HP,# P,#8@(&0P,#$@(" @(" @(" @(" @($)%42 @(" @ M('Q,-2XQ,GP-"C P,# P." @,C P,2 @(" @(" @(" @(" @34]64R @(" @ M<C L(S$-"C P,# P82 @-#<W," @(" @(" @(" @(" @0E@@(" @(" @;'(- M"B @(" @(" @(" @(" @(" @('Q,-2XQ,GP-"C P,# P8R @,C P," @(" @ M(" @(" @(" @34]64R @(" @<C L(S -"C P,# P92 @-#<W," @(" @(" @ M(" @(" @0E@@(" @(" @;'(-"CL[.S$X-R @(" @(" @(" @('T-"B @(" @ M(" @(" @(" @(" @(" @(" @(" @14Y$4 T*#0H-"@T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!!4D5!('Q\="Y?6DY384E0=D5$,45V?'PL(&-O;6=R M;W5P/5]:3E-A25!V140Q178L($-/1$4L(%)%041/3DQ9+"!!3$E'3CTQ#0H- M"B @(" @(" @(" @(" @(" @(%]:3E-A25!V140Q178@4%)/0R [('-T9#HZ M86QL;V-A=&]R/'9O:60J/CHZ?F%L;&]C871O<B@I#0H@(" @(" @(" @(" @ M(" @("!?6DY384E0=D5$,D5V(" @(" @(" @(" @(" @(" @.R!396-O;F0@ M96YT<GD@<&]I;G0@.R!S=&0Z.F%L;&]C871O<CQV;VED*CXZ.GYA;&QO8V%T M;W)?7W-U8E]O8FIE8W0H*0T*,# P,# P(" T-S<P(" @(" @(" @(" @("!" M6" @(" @("!L<@T*(" @(" @(" @(" @(" @(" @(" @(" @("!%3D10#0H- M"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?'QT+E]:3E-T M-G9E8W1O<DE0=E-A25,P7T5%1#%%=GQ\+"!C;VUG<F]U<#U?6DY3=#9V96-T M;W))4'9384E3,%]%140Q178L($-/1$4L(%)%041/3DQ9+"!!3$E'3CTQ#0H- M"B @(" @(" @(" @(" @(" @(%]:3E-T-G9E8W1O<DE0=E-A25,P7T5%1#%% M=B!04D]#(#L@<W1D.CIV96-T;W(\=F]I9"HL('-T9#HZ86QL;V-A=&]R/'9O M:60J/CXZ.GYV96-T;W(H*0T*(" @(" @(" @(" @(" @(" @7UI.4W0V=F5C M=&]R25!V4V%)4S!?145$,D5V(" @(" @(" @(" @(" @(" @.R!396-O;F0@ M96YT<GD@<&]I;G0@.R!S=&0Z.G9E8W1O<CQV;VED*BP@<W1D.CIA;&QO8V%T M;W(\=F]I9"H^/CHZ?G9E8W1O<E]?<W5B7V]B:F5C="@I#0H[.SLR.#4@(" @ M#0H[.SLR.#8@(" @("!^=F5C=&]R*"D@>R!?1&5S=')O>2AT:&ES+3Y?35]S M=&%R="P@=&AI<RT^7TU?9FEN:7-H*3L@?0T*,# P,# P(" R,3 P(" @(" @ M(" @(" @("!-3U93(" @("!R,2PC, T*,# P,# R("!B-3 X(" @(" @(" @ M(" @("!055-((" @("![<C,L;')]#0HP,# P,#0@(#DQ,# @(" @(" @(" @ M(" @(%-44B @(" @('(Q+%MS<"PC,%T-"C P,# P-B @9C=F9B!F9F9E(" @ M(" @(" @0DP@(" @(" @7UI.4W0Q,E]696-T;W)?8F%S94E0=E-A25,P7T5% M1#%%=@T*,# P,#!A("!B9# X(" @(" @(" @(" @("!03U @(" @("![<C,L M<&-]#0H@(" @(" @(" @(" @(" @(" @(" @(" @($5.1% -"@T*#0H-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\?'0N7UI.4W0V=F5C=&]R M25!V4V%)4S!?145$,45V+F-L96%N?'PL(&-O;6=R;W5P/5]:3E-T-G9E8W1O M<DE0=E-A25,P7T5%1#%%=BP@0T]$12P@4D5!1$].3%DL($%,24=./3$-"@T* M,# P,# P("!F-V9F(&9F9F4@(" @(" @("!"3" @(" @("!?7V-X85]E;F1? M8VQE86YU< T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\ M?&DN7UI.-6)O;W-T,3!P=')?=F5C=&]R23%B3E-?,C!H96%P7V-L;VYE7V%L M;&]C871O<D5384E0=D5%1#%%=GQ\+"!C;VUG<F]U<#U?6DXU8F]O<W0Q,'!T M<E]V96-T;W)),6).4U\R,&AE87!?8VQO;F5?86QL;V-A=&]R15-A25!V145$ M,45V+"!#3T1%+"!214%$3TY,62P@04Q)1TX],0T*#0H@(" @(" @(" @(" @ M(" @("!?6DXU8F]O<W0Q,'!T<E]V96-T;W)),6).4U\R,&AE87!?8VQO;F5? M86QL;V-A=&]R15-A25!V145$,45V(%!23T,@.R!B;V]S=#HZ<'1R7W9E8W1O M<CQB+"!B;V]S=#HZ:&5A<%]C;&]N95]A;&QO8V%T;W(L('-T9#HZ86QL;V-A M=&]R/'9O:60J/CXZ.GYP=')?=F5C=&]R*"D-"B @(" @(" @(" @(" @(" @ M(%]:3C5B;V]S=#$P<'1R7W9E8W1O<DDQ8DY37S(P:&5A<%]C;&]N95]A;&QO M8V%T;W)%4V%)4'9%140R178@(" @(" @(" @(" @(" @(" [(%-E8V]N9"!E M;G1R>2!P;VEN=" [(&)O;W-T.CIP=')?=F5C=&]R/&(L(&)O;W-T.CIH96%P M7V-L;VYE7V%L;&]C871O<BP@<W1D.CIA;&QO8V%T;W(\=F]I9"H^/CHZ?G!T M<E]V96-T;W)?7W-U8E]O8FIE8W0H*0T*,# P,# P("!B-3$P(" @(" @(" @ M(" @("!055-((" @("![<C0L;')]#0HP,# P,#(@(&8W9F8@9F9F92 @(" @ M(" @($),(" @(" @(%]:3C5B;V]S=#(P<'1R7V-O;G1A:6YE<E]D971A:6PR M-')E=F5R<VEB;&5?<'1R7V-O;G1A:6YE<DE.4S!?,35S97%U96YC95]C;VYF M:6=),6)3=#9V96-T;W))4'9384E3-5]%145%3E-?,C!H96%P7V-L;VYE7V%L M;&]C871O<D5%1#%%=@T*,# P,# V("!B9#$P(" @(" @(" @(" @("!03U @ M(" @("![<C0L<&-]#0H@(" @(" @(" @(" @(" @(" @(" @(" @($5.1% - M"@T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\?'0N7UI. M4W0Q,E]696-T;W)?8F%S94E0=E-A25,P7T5%1#%%=GQ\+"!C;VUG<F]U<#U? M6DY3=#$R7U9E8W1O<E]B87-E25!V4V%)4S!?145$,45V+"!#3T1%+"!214%$ M3TY,62P@04Q)1TX],0T*#0H@(" @(" @(" @(" @(" @("!?6DY3=#$R7U9E M8W1O<E]B87-E25!V4V%)4S!?145$,45V(%!23T,@.R!S=&0Z.E]696-T;W)? M8F%S93QV;VED*BP@<W1D.CIA;&QO8V%T;W(\=F]I9"H^/CHZ?E]696-T;W)? M8F%S92@I#0H@(" @(" @(" @(" @(" @("!?6DY3=#$R7U9E8W1O<E]B87-E M25!V4V%)4S!?145$,D5V(" @(" @(" @(" @(" @(" @.R!396-O;F0@96YT M<GD@<&]I;G0@.R!S=&0Z.E]696-T;W)?8F%S93QV;VED*BP@<W1D.CIA;&QO M8V%T;W(\=F]I9"H^/CHZ?E]696-T;W)?8F%S95]?<W5B7V]B:F5C="@I#0H[ M.SLX-" @(" @#0H[.SLX-2 @(" @("!^7U9E8W1O<E]B87-E*"D@>R -"C P M,# P," @8C4Q," @(" @(" @(" @(" @4%532" @(" @>W(T+&QR?0T*,# P M,# R(" P,# T(" @(" @(" @(" @("!-3U93(" @("!R-"QR, T*.SL[.#8@ M(" @(" @("!I9B H7TU?<W1A<G0@(3TP*2 -"C P,# P-" @-C@P," @(" @ M(" @(" @(" @3$12(" @(" @<C L6W(P+",P70T*,# P,# V(" R.# P(" @ M(" @(" @(" @("!#35 @(" @("!R,"PC, T*,# P,# X("!D,# Q(" @(" @ M(" @(" @("!"15$@(" @("!\3#$S+C$T? T*,# P,#!A("!F-V9F(&9F9F4@ M(" @(" @("!"3" @(" @("!?6F1L4'8-"CL[.S@W(" @(" @(" @7TU?96YD M7V]F7W-T;W)A9V4N9&5A;&QO8V%T92A?35]S=&%R="P@7TU?96YD7V]F7W-T M;W)A9V4N7TU?9&%T82 M(%]-7W-T87)T*3L@#0H[.SLX." @(" @("!]#0H@ M(" @(" @(" @(" @(" @("!\3#$S+C$T? T*,# P,#!E(" P,#(P(" @(" @ M(" @(" @("!-3U93(" @("!R,"QR- T*,# P,#$P("!B9#$P(" @(" @(" @ M(" @("!03U @(" @("![<C0L<&-]#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @($5.1% -"@T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @05)% M02!\?"YB<W-\?"P@3D])3DE4+"!!3$E'3CTR#0H-"B @(" @(" @(" @(" @ M(" @('Q\+F)S<R0U?'P-"B @(" @(" @(" @(" @(" @('@-"B @(" @(" @ M(" @(" @(" @(" @(" @(" @)2 Q,@T*#0H-"B @(" @(" @(" @(" @(" @ M(" @(" @(" @05)%02!\?"YC;VYS=&1A=&%?7UI.4W0U7TQI;4=)8D4V7T9? M:6YF17Q\+"!C;VUG<F]U<#U?6DY3=#5?3&EM1TEB139?1E]I;F9%+"!$051! M+"!214%$3TY,62P@04Q)1TX],@T*#0H@(" @(" @(" @(" @(" @("!?6DY3 M=#5?3&EM1TEB139?1E]I;F9%(#L@<W1D.CI?3&EM1SQB;V]L/CHZ7T9?:6YF M#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#5R @(" @(#!X-V8X,"PP M># P,# -"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?'PN M8V]N<W1D871A7U]:3E-T-5],:6U'26)%-U]&7W%.84Y%?'PL(&-O;6=R;W5P M/5]:3E-T-5],:6U'26)%-U]&7W%.84Y%+"!$051!+"!214%$3TY,62P@04Q) M1TX],@T*#0H@(" @(" @(" @(" @(" @("!?6DY3=#5?3&EM1TEB13=?1E]Q M3F%.12 [('-T9#HZ7TQI;4<\8F]O;#XZ.E]&7W%.84X-"B @(" @(" @(" @ M(" @(" @(" @(" @(" @1$-7(" @(" @,'@W9F,Q+#!X,# P, T*#0H-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\?"YC;VYS=&1A=&%?7UI. M4W0U7TQI;4=)8D4W7T9?<TYA3D5\?"P@8V]M9W)O=7 ]7UI.4W0U7TQI;4=) M8D4W7T9?<TYA3D4L($1!5$$L(%)%041/3DQ9+"!!3$E'3CTR#0H-"B @(" @ M(" @(" @(" @(" @(%]:3E-T-5],:6U'26)%-U]&7W-.84Y%(#L@<W1D.CI? M3&EM1SQB;V]L/CHZ7T9?<TYA3@T*(" @(" @(" @(" @(" @(" @(" @(" @ M("!$0U<@(" @(" P>#=F.#$L,'@P,# P#0H-"@T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!!4D5!('Q\+F-O;G-T9&%T85]?6DY3=#5?3&EM1TEB139? M1%]I;F9%?'PL(&-O;6=R;W5P/5]:3E-T-5],:6U'26)%-E]$7VEN9D4L($1! M5$$L(%)%041/3DQ9+"!!3$E'3CTS#0H-"B @(" @(" @(" @(" @(" @(%]: M3E-T-5],:6U'26)%-E]$7VEN9D4@.R!S=&0Z.E],:6U'/&)O;VP^.CI?1%]I M;F8-"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-7(" @(" @,'@W9F8P M+#!X,# P, T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0U<@(" @(" P M># P,# L,'@P,# P#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!! M4D5!('Q\+F-O;G-T9&%T85]?6DY3=#5?3&EM1TEB13=?1%]Q3F%.17Q\+"!C M;VUG<F]U<#U?6DY3=#5?3&EM1TEB13=?1%]Q3F%.12P@1$%402P@4D5!1$]. M3%DL($%,24=./3,-"@T*(" @(" @(" @(" @(" @(" @7UI.4W0U7TQI;4=) M8D4W7T1?<4YA3D4@.R!S=&0Z.E],:6U'/&)O;VP^.CI?1%]Q3F%.#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($1#5R @(" @(#!X-V9F,2PP># P,# - M"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-7(" @(" @,'@P,# P+#!X M,# P, T*#0H-"B @(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\?"YC M;VYS=&1A=&%?7UI.4W0U7TQI;4=)8D4W7T1?<TYA3D5\?"P@8V]M9W)O=7 ] M7UI.4W0U7TQI;4=)8D4W7T1?<TYA3D4L($1!5$$L(%)%041/3DQ9+"!!3$E' M3CTS#0H-"B @(" @(" @(" @(" @(" @(%]:3E-T-5],:6U'26)%-U]$7W-. M84Y%(#L@<W1D.CI?3&EM1SQB;V]L/CHZ7T1?<TYA3@T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!$0U<@(" @(" P>#=F9CDL,'@P,# P#0H@(" @(" @ M(" @(" @(" @(" @(" @(" @($1#5R @(" @(#!X,# P,"PP># P,# -"@T* M#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?'PN:6YI=%]A<G)A M>7Q\+"!$051!+"!214%$3TY,62P@24Y)5%]!4E)!62P@04Q)1TX],@T*#0H@ M(" @(" @(" @(" @(" @("!\?"YI;FET7V%R<F%Y)#(T?'P-"B @(" @(" @ M(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!?7U)%3$]#(#,X+"!?7W-T:5]?7S$T7W!T M<E]V96-T;W)?8W!P#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!! M4D5!('Q\+D%232YE>&ED>'Q\+"!,24Y+3U)$15(]?'PN=&5X='Q\+"!$051! M+"!214%$3TY,62P@4T5#5%E013U[4TA47T%235]%6$E$6'TL($%,24=./3(- M"@T*(" @(" @(" @(" @(" @(" @?'PN05)-+F5X:61X)#(U?'P-"B @(" @ M(" @(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @ M(" @(" @(" @(" @(" @(" @(" @("!?7U)%3$]#(#0R+"!\?"YT97AT?'P- M"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@X,# Q83AB M, T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P M,#)A#0H@(" @(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\ M+G1E>'1\? T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P M># P,# P,# P#0H@(" @(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@ M-#(L('Q\+F5X=&%B+E]?<W1I7U]?,31?<'1R7W9E8W1O<E]C<'!\? T*(" @ M(" @(" @(" @(" @(" @(" @(" @("!215%525)%(%]?865A8FE?=6YW:6YD M7V-P<%]P<C -"B @(" @(" @(" @(" @(" @(" @(" @(" @4D5154E212!? M7V%E86)I7W5N=VEN9%]C<'!?<'(P#0H-"@T*(" @(" @(" @(" @(" @(" @ M(" @(" @("!!4D5!('Q\+D%232YE>'1A8GQ\+"!$051!+"!214%$3TY,62P@ M04Q)1TX],@T*#0H@(" @(" @(" @(" @(" @("!\?"Y!4DTN97AT86(D,C9\ M? T*(" @(" @(" @(" @(" @(" @?'PN97AT86(N7U]S=&E?7U\Q-%]P=')? M=F5C=&]R7V-P<'Q\#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @ M(" @(#!X.# P,#@T,# -"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-7 M(" @(" @,'@P,# R#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#5R @ M(" @(#!X,# Q- T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @ M(" P># P,# P,# Q#0H@(" @(" @(" @(" @(" @(" @(" @(" @(%]?4D5, M3T,@-#(L('Q\+G1E>'0N8VQE86Y\? T*(" @(" @(" @(" @(" @(" @(" @ M(" @("!$0T0@(" @(" P># P,# P,# P#0H-"@T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!!4D5!('QA<F5A7VYU;6)E<BXQ?"P@3$E.2T]21$52/7Q\ M+G1E>'0N8VQE86Y\?"P@1$%402P@4D5!1$].3%DL(%-%0U194$4]>U-(5%]! M4DU?15A)1%A]+"!!3$E'3CTR#0H@(" @(" @(" @(" @(" @(" @(" @(" @ M($584$]25$%3('QA<F5A7VYU;6)E<BXQ?"P@?'PN05)-+F5X:61X?'P-"B @ M(" @(" @(" @(" @(" @('Q\+D%232YE>&ED>"0R-WQ\#0H@(" @(" @(" @ M(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# -"B @(" @(" @ M(" @(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'PN=&5X="YC;&5A;GQ\ M#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P M,#$-"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?&%R96%? M;G5M8F5R+C)\+"!C;VUG<F]U<#U?6DXU8F]O<W0R,'!T<E]C;VYT86EN97)? M9&5T86EL,C1R979E<G-I8FQE7W!T<E]C;VYT86EN97))3E,P7S$U<V5Q=65N M8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V4V%)4S5?145%14Y37S(P:&5A<%]C M;&]N95]A;&QO8V%T;W)%140Q178L($1!5$$L(%)%041/3DQ9+"!!3$E'3CTR M#0H@(" @(" @(" @(" @(" @(" @(" @(" @($584$]25$%3('QA<F5A7VYU M;6)E<BXR?"P@?'PN05)-+F5X=&%B?'P-"B @(" @(" @(" @(" @(" @('Q\ M+F5X=&%B+E]:3C5B;V]S=#(P<'1R7V-O;G1A:6YE<E]D971A:6PR-')E=F5R M<VEB;&5?<'1R7V-O;G1A:6YE<DE.4S!?,35S97%U96YC95]C;VYF:6=),6)3 M=#9V96-T;W))4'9384E3-5]%145%3E-?,C!H96%P7V-L;VYE7V%L;&]C871O M<D5%1#%%=GQ\#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @ M(#!X.# P,6$X8C -"B @(" @(" @(" @(" @(" @(" @(" @(" @1$-7(" @ M(" @,'@P,#!A#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#5R @(" @ M(#!X,# R- T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P M># P,# P,# Q#0H@(" @(" @(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@ M-#(L('Q\="Y?6DXU8F]O<W0R,'!T<E]C;VYT86EN97)?9&5T86EL,C1R979E M<G-I8FQE7W!T<E]C;VYT86EN97))3E,P7S$U<V5Q=65N8V5?8V]N9FEG23%B M4W0V=F5C=&]R25!V4V%)4S5?145%14Y37S(P:&5A<%]C;&]N95]A;&QO8V%T M;W)%140Q178N8VQE86Y\? T*(" @(" @(" @(" @(" @(" @(" @(" @("!$ M0T0@(" @(" P># P,# P,# P#0H-"@T*(" @(" @(" @(" @(" @(" @(" @ M(" @("!!4D5!('QA<F5A7VYU;6)E<BXS?"P@3$E.2T]21$52/7Q\="Y?6DXU M8F]O<W0R,'!T<E]C;VYT86EN97)?9&5T86EL,C1R979E<G-I8FQE7W!T<E]C M;VYT86EN97))3E,P7S$U<V5Q=65N8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V M4V%)4S5?145%14Y37S(P:&5A<%]C;&]N95]A;&QO8V%T;W)%140Q179\?"P@ M1$%402P@4D5!1$].3%DL(%-%0U194$4]>U-(5%]!4DU?15A)1%A]+"!!3$E' M3CTR#0H@(" @(" @(" @(" @(" @(" @(" @(" @($584$]25$%3('QA<F5A M7VYU;6)E<BXS?"P@?'PN05)-+F5X:61X?'P-"B @(" @(" @(" @(" @(" @ M(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!?7U)%3$]#(#0R+"!\?'0N7UI.-6)O;W-T,C!P=')?8V]N M=&%I;F5R7V1E=&%I;#(T<F5V97)S:6)L95]P=')?8V]N=&%I;F5R24Y3,%\Q M-7-E<75E;F-E7V-O;F9I9TDQ8E-T-G9E8W1O<DE0=E-A25,U7T5%145.4U\R M,&AE87!?8VQO;F5?86QL;V-A=&]R145$,45V?'P-"B @(" @(" @(" @(" @ M(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!?7U)%3$]#(#0R+"!\?"YE>'1A8BY?6DXU8F]O<W0R M,'!T<E]C;VYT86EN97)?9&5T86EL,C1R979E<G-I8FQE7W!T<E]C;VYT86EN M97))3E,P7S$U<V5Q=65N8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V4V%)4S5? M145%14Y37S(P:&5A<%]C;&]N95]A;&QO8V%T;W)%140Q179\? T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!215%525)%(%]?865A8FE?=6YW:6YD7V-P M<%]P<C -"@T*#0H@(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?&%R M96%?;G5M8F5R+C1\+"!,24Y+3U)$15(]?'QT+E]:3C5B;V]S=#(P<'1R7V-O M;G1A:6YE<E]D971A:6PR-')E=F5R<VEB;&5?<'1R7V-O;G1A:6YE<DE.4S!? M,35S97%U96YC95]C;VYF:6=),6)3=#9V96-T;W))4'9384E3-5]%145%3E-? M,C!H96%P7V-L;VYE7V%L;&]C871O<D5%1#%%=BYC;&5A;GQ\+"!$051!+"!2 M14%$3TY,62P@4T5#5%E013U[4TA47T%235]%6$E$6'TL($%,24=./3(-"B @ M(" @(" @(" @(" @(" @(" @(" @(" @15A03U)405,@?&%R96%?;G5M8F5R M+C1\+"!\?"Y!4DTN97AI9'A\? T*(" @(" @(" @(" @(" @(" @(" @(" @ M("!$0T0@(" @(" P># P,# P,# P#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @(%]?4D5,3T,@-#(L('Q\="Y?6DXU8F]O<W0R,'!T<E]C;VYT86EN97)? M9&5T86EL,C1R979E<G-I8FQE7W!T<E]C;VYT86EN97))3E,P7S$U<V5Q=65N M8V5?8V]N9FEG23%B4W0V=F5C=&]R25!V4V%)4S5?145%14Y37S(P:&5A<%]C M;&]N95]A;&QO8V%T;W)%140Q178N8VQE86Y\? T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!$0T0@(" @(" P># P,# P,# Q#0H-"@T*(" @(" @(" @ M(" @(" @(" @(" @(" @("!!4D5!('QA<F5A7VYU;6)E<BXU?"P@3$E.2T]2 M1$52/7Q\="Y?6DXU8F]O<W1N94E04'8Q8E,R7U,S7T5%8E)+3E-?,3=V;VED M7W!T<E]I=&5R871O<DE47U0P7T5%4DM.4S1?250Q7U0R7T5%?'PL($1!5$$L M(%)%041/3DQ9+"!314-465!%/7M32%1?05)-7T582418?2P@04Q)1TX],@T* M(" @(" @(" @(" @(" @(" @(" @(" @("!%6%!/4E1!4R!\87)E85]N=6UB M97(N-7PL('Q\+D%232YE>&ED>'Q\#0H@(" @(" @(" @(" @(" @(" @(" @ M(" @($1#1" @(" @(#!X,# P,# P,# -"B @(" @(" @(" @(" @(" @(" @ M(" @(" @7U]214Q/0R T,BP@?'QT+E]:3C5B;V]S=&YE25!0=C%B4S)?4S-? M145B4DM.4U\Q-W9O:61?<'1R7VET97)A=&]R251?5#!?14522TY3-%])5#%? M5#)?145\? T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P M># P,# P,# Q#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!!4D5! M('QA<F5A7VYU;6)E<BXV?"P@3$E.2T]21$52/7Q\="Y?6DY384E0=D5$,45V M?'PL($1!5$$L(%)%041/3DQ9+"!314-465!%/7M32%1?05)-7T582418?2P@ M04Q)1TX],@T*(" @(" @(" @(" @(" @(" @(" @(" @("!%6%!/4E1!4R!\ M87)E85]N=6UB97(N-GPL('Q\+D%232YE>&ED>'Q\#0H@(" @(" @(" @(" @ M(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# -"B @(" @(" @(" @ M(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'QT+E]:3E-A25!V140Q179\ M? T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P M,# Q#0H-"@T*(" @(" @(" @(" @(" @(" @(" @(" @("!!4D5!('QA<F5A M7VYU;6)E<BXW?"P@3$E.2T]21$52/7Q\="Y?6DY3=#9V96-T;W))4'9384E3 M,%]%140Q179\?"P@1$%402P@4D5!1$].3%DL(%-%0U194$4]>U-(5%]!4DU? M15A)1%A]+"!!3$E'3CTR#0H@(" @(" @(" @(" @(" @(" @(" @(" @($58 M4$]25$%3('QA<F5A7VYU;6)E<BXW?"P@?'PN05)-+F5X:61X?'P-"B @(" @ M(" @(" @(" @(" @(" @(" @(" @1$-$(" @(" @,'@P,# P,# P, T*(" @ M(" @(" @(" @(" @(" @(" @(" @("!?7U)%3$]#(#0R+"!\?'0N7UI.4W0V M=F5C=&]R25!V4V%)4S!?145$,45V?'P-"B @(" @(" @(" @(" @(" @(" @ M(" @(" @1$-$(" @(" @,'@X,# P.#0P, T*(" @(" @(" @(" @(" @(" @ M(" @(" @("!215%525)%(%]?865A8FE?=6YW:6YD7V-P<%]P<C -"@T*#0H@ M(" @(" @(" @(" @(" @(" @(" @(" @($%214$@?&%R96%?;G5M8F5R+CA\ M+"!,24Y+3U)$15(]?'QT+E]:3E-T-G9E8W1O<DE0=E-A25,P7T5%1#%%=BYC M;&5A;GQ\+"!$051!+"!214%$3TY,62P@4T5#5%E013U[4TA47T%235]%6$E$ M6'TL($%,24=./3(-"B @(" @(" @(" @(" @(" @(" @(" @(" @15A03U)4 M05,@?&%R96%?;G5M8F5R+CA\+"!\?"Y!4DTN97AI9'A\? T*(" @(" @(" @ M(" @(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,# P#0H@(" @(" @ M(" @(" @(" @(" @(" @(" @(%]?4D5,3T,@-#(L('Q\="Y?6DY3=#9V96-T M;W))4'9384E3,%]%140Q178N8VQE86Y\? T*(" @(" @(" @(" @(" @(" @ M(" @(" @("!$0T0@(" @(" P># P,# P,# Q#0H-"@T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!!4D5!('QA<F5A7VYU;6)E<BXY?"P@3$E.2T]21$52 M/7Q\:2Y?6DXU8F]O<W0Q,'!T<E]V96-T;W)),6).4U\R,&AE87!?8VQO;F5? M86QL;V-A=&]R15-A25!V145$,45V?'PL($1!5$$L(%)%041/3DQ9+"!314-4 M65!%/7M32%1?05)-7T582418?2P@04Q)1TX],@T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!%6%!/4E1!4R!\87)E85]N=6UB97(N.7PL('Q\+D%232YE M>&ED>'Q\#0H@(" @(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @(#!X M,# P,# P,# -"B @(" @(" @(" @(" @(" @(" @(" @(" @7U]214Q/0R T M,BP@?'QI+E]:3C5B;V]S=#$P<'1R7W9E8W1O<DDQ8DY37S(P:&5A<%]C;&]N M95]A;&QO8V%T;W)%4V%)4'9%140Q179\? T*(" @(" @(" @(" @(" @(" @ M(" @(" @("!$0T0@(" @(" P>#@P83AB,&(P#0H@(" @(" @(" @(" @(" @ M(" @(" @(" @(%)%455)4D4@7U]A96%B:5]U;G=I;F1?8W!P7W!R, T*#0H- M"B @(" @(" @(" @(" @(" @(" @(" @(" @05)%02!\87)E85]N=6UB97(N M,3!\+"!,24Y+3U)$15(]?'QT+E]:3E-T,3)?5F5C=&]R7V)A<V5)4'9384E3 M,%]%140Q179\?"P@1$%402P@4D5!1$].3%DL(%-%0U194$4]>U-(5%]!4DU? M15A)1%A]+"!!3$E'3CTR#0H@(" @(" @(" @(" @(" @(" @(" @(" @($58 M4$]25$%3('QA<F5A7VYU;6)E<BXQ,'PL('Q\+D%232YE>&ED>'Q\#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @($1#1" @(" @(#!X,# P,# P,# -"B @ M(" @(" @(" @(" @(" @(" @(" @(" @7U]214Q/0R T,BP@?'QT+E]:3E-T M,3)?5F5C=&]R7V)A<V5)4'9384E3,%]%140Q179\? T*(" @(" @(" @(" @ M(" @(" @(" @(" @("!$0T0@(" @(" P># P,# P,# Q#0H-"@T*(" @(" @ M(" @(" @(" @(" @(" @(" @("!!4D5!('Q\+F1I<F5C=&EV97Q\+"!214%$ M3TY,62P@3D]!3$Q/0RP@04Q)1TX],@T*#0H)1$-"("(C/%-9345$250^(UQN M(@T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T(@(DE-4$]25"!?7V%E M86)I7V%T97AI=%QN(@T*(" @(" @(" @(" @(" @(" @(" @(" @("!$0T(@ M(DE-4$]25"!?7V-X85]E;F1?8VQE86YU<%QN(@T*(" @(" @(" @(" @(" @ M(" @(" @(" @("!$0T(@(DE-4$]25"!?6F1L4'9<;B(-"B @(" @(" @(" @ M(" @(" @(" @(" @(" @1$-"("))35!/4E0@7U]A96%B:5]U;G=I;F1?8W!P )7W!R,%QN(@T* ` end begin 666 ptr_vector.cpp M(VEN8VQU9&4@/&)O;W-T+W!T<E]C;VYT86EN97(O<'1R7W9E8W1O<BYH<' ^ M#0H-"G-T<G5C="!B#0I[#0H):6YT(&,[#0H)=F]I9"!B87(H*0T*"7L-"@D) M*RMC.PT*"7T-"GT[#0H-"F)O;W-T.CIP=')?=F5C=&]R/&(^('@[#0H-"G9O M:60@9F]O*"D-"GL-"@EB;V]S=#HZ<'1R7W9E8W1O<CQB/CHZ:71E<F%T;W(@ M:65N9" ]('@N96YD*"D[#0H)9F]R*"!B;V]S=#HZ<'1R7W9E8W1O<CQB/CHZ M:71E<F%T;W(@:70@/2!X+F)E9VEN*"D[(&ET("$](&EE;F0[("LK:70@*0T* H"7L-"@D)8B8@8E\@/2 J:70[#0H)"6)?+F)A<B@I.PT*"7T-"GT-"@`` ` end begin 666 vector.cpp M(VEN8VQU9&4@/'9E8W1O<CX-"@T*<W1R=6-T(&(-"GL-"@EI;G0@8SL-"@EV M;VED(&)A<B@I#0H)>PT*"0DK*V,[#0H)?0T*?3L-"@T*<W1D.CIV96-T;W(\ M8BH^('@[#0H-"G9O:60@9F]O*"D-"GL-"@ES=&0Z.G9E8W1O<CQB*CXZ.FET M97)A=&]R(&EE;F0@/2!X+F5N9"@I.PT*"69O<B@@<W1D.CIV96-T;W(\8BH^ M.CII=&5R871O<B!I=" ]('@N8F5G:6XH*3L@:70@(3T@:65N9#L@*RMI=" I K#0H)>PT*"0EB)B!B7R ]("HJ:70[#0H)"6)?+F)A<B@I.PT*"7T-"GT-"@`` ` end

Michael Marcin wrote:
Hi,
I have a problem with my compiler (ARM's RVCT 2.2.1). It is not generating optimal code for ptr_containers, specifically I've been looking at ptr_vector. I love using ptr_containers to convery ownership but I rely on them being zero overhead over std::vector with explicit delete loops for at least simple operations like a for each loop.
I would hope these 2 files (attached) would generate identical assembly for the foo function but they are not even close (attached as txt). I know there are a lot of compilers that are a lot smarter than this one. Unfortunately I'm stuck with this one so I need to teach this compiler to generate better code (by modifying the ptr_container library) or stop using ptr_containers (cry).
It seems the attachments didn't go through to everyone (blame Outlook Express). I've uploaded them in a zip here: http://www.mikemarcin.com/misc/ptr_container_abstraction.zip Thanks, Michael Marcin

Michael Marcin wrote:
Hi,
I have a problem with my compiler (ARM's RVCT 2.2.1). It is not generating optimal code for ptr_containers, specifically I've been looking at ptr_vector. I love using ptr_containers to convery ownership but I rely on them being zero overhead over std::vector with explicit delete loops for at least simple operations like a for each loop.
I would hope these 2 files (attached) would generate identical assembly for the foo function but they are not even close (attached as txt).
I know there are a lot of compilers that are a lot smarter than this one. Unfortunately I'm stuck with this one so I need to teach this compiler to generate better code (by modifying the ptr_container library) or stop using ptr_containers (cry).
It seems the attachments didn't go through to everyone (blame Outlook Express). I've uploaded them in a zip here: http://www.mikemarcin.com/misc/ptr_container_abstraction.zip Thanks, Michael Marcin

Michael Marcin skrev:
Hi,
I have a problem with my compiler (ARM's RVCT 2.2.1). It is not generating optimal code for ptr_containers, specifically I've been looking at ptr_vector. I love using ptr_containers to convery ownership but I rely on them being zero overhead over std::vector with explicit delete loops for at least simple operations like a for each loop.
I would hope these 2 files (attached) would generate identical assembly for the foo function but they are not even close (attached as txt).
I know there are a lot of compilers that are a lot smarter than this one. Unfortunately I'm stuck with this one so I need to teach this compiler to generate better code (by modifying the ptr_container library) or stop using ptr_containers (cry).
Hi Michael, Some compilers have a problem doing near-perfect inlining, which can be a real killer. I'll try to investigate this. -Thorsten

Thorsten Ottosen wrote:
Michael Marcin skrev:
Hi,
I have a problem with my compiler (ARM's RVCT 2.2.1). It is not generating optimal code for ptr_containers, specifically I've been looking at ptr_vector. I love using ptr_containers to convery ownership but I rely on them being zero overhead over std::vector with explicit delete loops for at least simple operations like a for each loop.
I would hope these 2 files (attached) would generate identical assembly for the foo function but they are not even close (attached as txt).
I know there are a lot of compilers that are a lot smarter than this one. Unfortunately I'm stuck with this one so I need to teach this compiler to generate better code (by modifying the ptr_container library) or stop using ptr_containers (cry).
Hi Michael,
Some compilers have a problem doing near-perfect inlining, which can be a real killer.
I'll try to investigate this.
I appreciate it. If you have things you'd like me to try out I can compile them and send you the mixed assembly output. One thing I noticed is that it seems to fail to eliminate the return value copy of the void_ptr_iterator::base call. Accessing iter_ directly (unfortunately) produces much better code but still not the best. _Z3foov PROC ; foo() ;;;14 void foo() ;;;15 { 000000 490d LDR r1,|L1.56| 000002 b50c PUSH {r2,r3,lr} 000004 6848 LDR r0,[r1,#4] 000006 9001 STR r0,[sp,#4] ;181 000008 6808 LDR r0,[r1,#0] 00000a e005 B |L1.24| |L1.12| 00000c 6800 LDR r0,[r0,#0] 00000e 6801 LDR r1,[r0,#0] 000010 1c49 ADDS r1,r1,#1 000012 6001 STR r1,[r0,#0] 000014 9800 LDR r0,[sp,#0] 000016 1d00 ADDS r0,r0,#4 |L1.24| 000018 9901 LDR r1,[sp,#4] 00001a 9000 STR r0,[sp,#0] 00001c 4288 CMP r0,r1 00001e d1f5 BNE |L1.12| 000020 bd0c POP {r2,r3,pc} ;186 ;;;16 boost::ptr_vector<b>::iterator iend = x.end(); ;;;17 for( boost::ptr_vector<b>::iterator it = x.begin(); it != iend; ++it ) ;;;18 { ;;;19 b& b_ = *it; ;;;20 b_.bar(); ;;;21 } ;;;22 } ENDP Thanks, Michael Marcin

Michael Marcin skrev:
Thorsten Ottosen wrote:
I'll try to investigate this.
I appreciate it. If you have things you'd like me to try out I can compile them and send you the mixed assembly output.
One thing I noticed is that it seems to fail to eliminate the return value copy of the void_ptr_iterator::base call. Accessing iter_ directly (unfortunately) produces much better code but still not the best.
I have tried playing a little with your example, eg. using operator[] instead. To my surprise, I could not eliminate the overhead with vc8 (/Ox /Og). Thus the iterator wrapping seems to pay some penalty. This is quite strange IMO. Perhaps it is not optimal for iterator_adaptor to return base() by const&. Perhaps I'm doing something wrong. At any rate, I would have assumed iteration to be optimal. I'll have to use some more time on this ... but thanks for pointing out the problem. -Thorsten

Thorsten Ottosen wrote:
Michael Marcin skrev:
Thorsten Ottosen wrote:
I'll try to investigate this.
I appreciate it. If you have things you'd like me to try out I can compile them and send you the mixed assembly output.
One thing I noticed is that it seems to fail to eliminate the return value copy of the void_ptr_iterator::base call. Accessing iter_ directly (unfortunately) produces much better code but still not the best.
I have tried playing a little with your example, eg. using operator[] instead.
To my surprise, I could not eliminate the overhead with vc8 (/Ox /Og). Thus the iterator wrapping seems to pay some penalty. This is quite strange IMO.
It's possible that the implementation in terms of vector<void*> is introducing too much abstraction for the compiler to handle. Have you considered simply using vector<T*> and leaving the void* folding to the standard library? Judging by the ARM assembly, I wouldn't be surprised if vector<T>::iterator is T* on this compiler, decreasing the abstraction penalty even further.

Peter Dimov wrote:
It's possible that the implementation in terms of vector<void*> is introducing too much abstraction for the compiler to handle. Have you considered simply using vector<T*> and leaving the void* folding to the standard library?
Judging by the ARM assembly, I wouldn't be surprised if vector<T>::iterator is T* on this compiler, decreasing the abstraction penalty even further.
It is using STLPort on top of OpenC for Symbian OS 9.1 the STLPort version define is # define _STLPORT_VERSION 0x463 and yes vector iterator is simply value_type*

Peter Dimov skrev:
Thorsten Ottosen wrote:
Michael Marcin skrev:
Thorsten Ottosen wrote:
I'll try to investigate this.
I appreciate it. If you have things you'd like me to try out I can compile them and send you the mixed assembly output.
One thing I noticed is that it seems to fail to eliminate the return value copy of the void_ptr_iterator::base call. Accessing iter_ directly (unfortunately) produces much better code but still not the best. I have tried playing a little with your example, eg. using operator[] instead.
To my surprise, I could not eliminate the overhead with vc8 (/Ox /Og). Thus the iterator wrapping seems to pay some penalty. This is quite strange IMO.
It's possible that the implementation in terms of vector<void*> is introducing too much abstraction for the compiler to handle. Have you considered simply using vector<T*> and leaving the void* folding to the standard library?
Yes. I certainly have considered this. I'm leaning somewhat towards it. Going for void* introduced a number of imperfections in the library, like algorithms as members. -Thorsten

Thorsten Ottosen wrote:
To my surprise, I could not eliminate the overhead with vc8 (/Ox /Og). Thus the iterator wrapping seems to pay some penalty. This is quite strange IMO.
Perhaps it is not optimal for iterator_adaptor to return base() by const&. Perhaps I'm doing something wrong. At any rate, I would have assumed iteration to be optimal.
I'll have to use some more time on this ... but thanks for pointing out the problem.
The version I'm looking at is returning from base() by value but yes returning by const reference also has no benefits (at least for RVCT). If you're testing on vc8 make sure you've disabled the checked iterators i.e. add _SECURE_SCL=0 to the preprocessor.

Michael Marcin skrev:
Thorsten Ottosen wrote:
To my surprise, I could not eliminate the overhead with vc8 (/Ox /Og). Thus the iterator wrapping seems to pay some penalty. This is quite strange IMO.
Perhaps it is not optimal for iterator_adaptor to return base() by const&. Perhaps I'm doing something wrong. At any rate, I would have assumed iteration to be optimal.
I'll have to use some more time on this ... but thanks for pointing out the problem.
The version I'm looking at is returning from base() by value but yes returning by const reference also has no benefits (at least for RVCT). If you're testing on vc8 make sure you've disabled the checked iterators i.e. add _SECURE_SCL=0 to the preprocessor.
Oh .. I didn't remember that. I'll try to recompile it with this turned on. -Thorsten
participants (3)
-
Michael Marcin
-
Peter Dimov
-
Thorsten Ottosen