c++.stlsoft - platformstl::memory_mapped_file + stlsoft::basic_string_view example
- Matthew (321/322) Mar 28 2005 Chris, et al.
Chris, et al. Here's an example project demonstrating the use of PlatformSTL's memory_mapped_file with STLSoft's string_view. The bit to note is that, in the code extract shown below, there is not a single memory allocation (or no call to ::operator new(), at least), outside the call to the operating system's mmap() (or equiv.). That's pretty good, eh? :-) You'll also need to put in the new integer_to_string.hpp in "$(STLSOFT_INCLUDE)/inprogress/stlsoft". Cheers Matthew <code> /* . */ if(NULL == inputFileName) { usage(1, "Must specify file to process", -1, argc, argv); } else { // Define the local string type: a string_view on char type typedef ::stlsoft::basic_string_view<char> string_view_t; // Declare the mem-map file and string view variables ::platformstl::memory_mapped_file mmf(inputFileName); string_view_t sv(static_cast<char const *>(mmf.memory()), mmf.size()); // Now we'll do things with it // 0. Define the delimiter for the ambient operating system #if defined(PLATFORMSTL_OS_IS_UNIX) const string_view_t delimiter("\n", 1); #elif defined(PLATFORMSTL_OS_IS_WIN32) const string_view_t delimiter("\r\n", 2); #else #endif /* platform */ // 1. Count the number of chars { size_t numChars = std::distance(sv.begin(), sv.end()); cout << "Number of characters: " << numChars << endl; } // 2. Count the number of lines (using stlsoft::string_tokeniser) { typedef ::stlsoft::string_tokeniser< string_view_t , string_view_t , ::stlsoft::string_tokeniser_ignore_blanks<false> > tokeniser_keep_blanks_t; tokeniser_keep_blanks_t lines(sv.begin(), sv.end(), delimiter); size_t numLines = ::std::distance(lines.begin(), lines.end()); cout << "Number of lines: " << numLines << endl; } // 3. Count the number of non-blank lines (using stlsoft::string_tokeniser) { typedef ::stlsoft::string_tokeniser< string_view_t , string_view_t > tokeniser_t; tokeniser_t lines(sv.begin(), sv.end(), delimiter); size_t numLines = ::std::distance(lines.begin(), lines.end()); cout << "Number of lines (non-blank): " << numLines << endl; } // 4. Count the number of lines (using stlsoft::string_tokeniser + rangelib stuff) { typedef ::stlsoft::string_tokeniser< string_view_t , string_view_t , ::stlsoft::string_tokeniser_ignore_blanks<false> > tokeniser_keep_blanks_t; size_t numLines = ::rangelib::r_distance(rangelib::make_sequence_range(tokeniser_keep_ lanks_t(sv.begin(), sv.end(), delimiter))); cout << "Number of lines (R): " << numLines << endl; } // 5. Count the number of lines (using stlsoft::string_tokeniser + rangelib stuff) { typedef ::stlsoft::string_tokeniser< string_view_t , string_view_t > tokeniser_t; size_t numLines = ::rangelib::r_distance(rangelib::make_sequence_range(tokeniser_t(sv.begin(), sv.end(), delimiter))); cout << "Number of lines (non-blank) (R): " << numLines << endl; } // 6. Display each line, indexed (using stlsoft::string_tokeniser + rangelib stuff) { typedef ::stlsoft::string_tokeniser< string_view_t , string_view_t , ::stlsoft::string_tokeniser_ignore_blanks<false> > tokeniser_t; typedef ::rangelib::sequence_range< tokeniser_t> tokenised_sequence_t; typedef ::rangelib::indexed_range< tokenised_sequence_t , size_t > indexed_tokenised_sequence_t; indexed_tokenised_sequence_t ir(tokenised_sequence_t(tokeniser_t(sv.begin(), sv.end(), delimiter))); cout << "Lines:" << endl; for(; ir; ++ir) { cout << ir.index() << ": " << *ir << endl; } } } </code> begin 666 integer_to_string.hpp H(VEN8VQU9&4 /'-T;'-O9G1?:6YT96=E<E]T;U]S=')I;F<N:#X-" `` ` end begin 666 string_view_test.zip M-+LT2W<!TJ3(E]L.32'0$FUSD42-I.RX6_[W>X^49$F6Y:3)=CC<"'2+J<?W M]?,>GRCN;).=YQPO7Y!M\HZ';$"RH;3D\<2;<3;W-%/:]9,$J0SEAU0F0F7$ M)U$2LHC%FFHN8C(&+F0L)-%3ML*%)%+\S'SM%JR.)*.:!9;5Z[_K*7E/I3\E MKW=WOS4$UTG02F"(+D%XJC+E?^2?J0SZ$Q8SB4L+JE/NLSA7V\E^!22-`V;5 MO5S$3'%%+L58SZEDY#QA MF*6*2*:8G+' ;18RG\^+R$RU3 8[.S#E*BO+]47DTG1'92*;>;"(\C#CDE/^ MH\JA>>'5%,Q1(I4^([X(&(&?24A]<!V/M3">2])1R'T2"! 2+X-7&:/%>N> M$ 8_<2H6Z T`CH]X4 W.F%*M!)MAT 19 &(D58R(L85<QMHEC[!&BAD/P)X6 M%4F'*J#MK M9O3(*-6K'&.A2< C#N M4I)0J;F?AE1"U$P>&[<'7/DAY1% D)S$& 7P<-R G)I2P&UCNN2N&C%0GXZR M0H"^";B$M.^M<N-Q] B=`C$`4\(>40GS.?[![AC83>6BAP[T`0_LEQ2(X.$J MYGH 4E.C&O $-\-C(1N0GRIN( #YPJ1 M<M&H'#K6Q'H),L X\(R6%-UH,Z=,AK58R(9(+OU$8C8).51,2 H %\AVSJ'F M6XJ'#K M3'I:>+;Q<*=)TDB9]25:W+(8$"DW$6(#D]$853^$5$-IBT#E-G63C RX[93^ M1XT)T(P('RP"U]O4P:WJY/S20,'T`E `]LK&FX!4(%]^&H`E9%J$D5C\HJH M<O/V]QW%/S,/.I:N99+QQF%<C67[\\?7>Y^,L_-'SC96^"ZL!_1EE6LP6*F& MP4Y8O;1QF9B[)K+WSP[ :L9AVN#KD>?4$PCSY^.GKL%2R>^#P67(6.+L[>) M ^HJ6SID5Q[\ E4FWL"_W6$S[>A?3([P':!$JV7*UI#S;+Y4)\S8YG&2:JS MEQE9) R[$PAZIWZ<," =G(>5T#K 2BBN'TY.CR^\T\.WQZ<P?7%R] .29.5\ MZ;^ C=))R8>P_3H<U-X;$D[V372&Y-4KW !.8[6%Z';F`B W)IM \BIB^=B! MZ8^[G\B;-V2KO]5=/BIQ+5'N-5 V4.,`0_I]E)I&IC-%>^HTML;O]4 GJ^$% MO0,U(VOZ6-"!NM[+4)G7\S*;^^I/%BKV(/4V:*> ^_2GF=W=U><-7''XU$)V MM+#O?W]TXF9_WN?E"11Q"]$;O%2R8ZG8^U3E[XT+>_(+718>KS"E.NL2+M-B MTJP3J8S*]E*IX48M[*6M7M <]N$%S5J,QS:9BD:G&97F[$LMEP\&I3>\P6#U M$W,R9UMA2 )S(!%/E#DA(%S7*'?=<JP"9H_89''X3Z,1-T=LIB<T;U8+!;UD MM2'X<'IX]>[\XCULX=[YI7=RZ5V?G?Q42DUK0[L'"N%.YR8&X.W99BELE?/C MR=DWKY\ 2!I1KS-1".:O"+QJ O7G-8O-"20>L$I8'-MO$LM6),=&J1O!`1[> M/,O>^G'-^A:J(?7KB_>1KA+EU=*[:?3(L[!HT=+CDUA(YHU"&M^J?=,^'#Q> MDOWY<,0:^ I8S< 1:T5O1NPWS8B-1=PW;OD_PNYF5+4AJ8J _SDD$:<(>=>B MZK%(^NM3:A]Y1?)362!*Q^,_B^%#QU.+86EGM:%^`TKGP8"_O )GR\F(WC*O M>GKNK)&W,0D>!=*+;K7D/1:DW_X)TMKXDJKW_)!Y9I L:YF%S&-A\C=X"> * M6M %8=2?&K;XA<!\5?JSF/WQQ0Q'%9&5)X47EWBK0FV_SJ$B*)\/E !]B(C* M5\;]]:R^,%XFR9[7A;G&:PRN"FLC-L^ET_3HV;+:).N TY"N./!H>P ZF//L M<O^)X]=5M^5LN72-88[YLM3):L,VEVODM!PT99]?\,/$,/O0DG\-:?T8 FNU MY^*5,^N&DMT5*:[K/HAO&M_&8AY;_O6(U?UU_-/)E??N\.3T^N)X^/M_H'KV MQWMS(6]QD[?W^(1<F,N<^3>$5H5J9C9)F7"\.X94!*D<A>61)=3<[,7[FC=; MPYNM7JN8E<$F[N,6H*HW'7]P<S.'DBCF:G '?X]X?--I-U!6F6 ]9Q!H1%X MXM >FJMV'M,:CU4GH7OLU3(\ML6;7PJ/QLUU6',`V2X J"MI&SIE+^E9K^=2 MY;/?"RQ!<=O.WL[Y[X#ZIK MG;J/_P!02P,$" ``````V&!], ```````````````!4```!S=')I;F=?=FEE M=U]T97-T+W9C-B]02P,$" ``````J&!], ```````````````!L```!S=')I M)1L``"D```!S=')I;F=?=FEE=U]T97-T+W9C-B]S=')I;F=?=FEE=U]T97-T M`DDESG[]+B7+EN-G6QD8!L0Q7_?<<_DXO/3/<,NI%$I,-339`PM$S"2,=>)Q M&W->03I69;O5)Y$`)1&HF%$^?<((J(BFW$]D.BOP.&.1\1DM"1>,W2?PD&': MAZ9A.!H,X3H(Q..0R48:;9/%+/)81#E.0FTY:$RI8PS-J07+6FOO"4J"(=&S MM*,Q'-9I4&%S=O;B=M*KA]Q;U$;C1EW2K(S<NFT`ZY>7N&:O+*C7CYC%+(K4 M[\WUN 5WBCFW[0:<;S:GT^3TN"N)7(\D'3)(=)QHI\DE6"OTXHANI)D,F<=1 M6/:-FQ#ILP72JBMG5EMKV4UJ+Y\CJ&RPN&XV,WZX'%"-1"!\`=7;"50_7$*U MXTEO/&A/G&Z_T;MKMG!MM[=_X1'*G2^94M8^)N/)J-N8+% U!OWQH-?:QBJ- M5! 9H3-4W*ONY;NWN>W"[)[)B 67%Q4,W-PW<E'T/;XH(8J*A0C2" JX%_B+ M-PQZP>O1BN,M-"+,=.)S%[7">W[ G?W2T_F\5WYR:)Y!ER9#SF$9:H_66![2 M(^?;]> (D^UZY!S0(^<_HT>>V7;KIQBJL>=BO.Q*L5C_+T3JB"B-<O6;*%S% M?"T[:5E+EGX=D2 ='+HZZIF7CA1)C-M<))*R] FEBHK89%.2!-K!#A0-L& < MV]2F\[DMJ8U)OBUMX04VYGKV+/YJNT07L N !G(\N!LU6O5*Y<M&%H^PQJR% MKSFB_&4,F2:E T8H7<NM73JZPGU'B2K_-"KN1Z?:=XJ;GW!P5GPAN9Z%)_.0 M71\G0/^'G6QNLAN/4(I:?BIT+>Y9Q-4)E-#D*F5/S;:[;2..TJZWW=Y,%K+' MT>X$Y*[?_8 7_\%+?S<"IF3'`/Q K"8AUL&7D(5"/CDAB4WN,.6E9 Z9C]+V M96VM1DRM0/8F]IP*FR;2=L/8QJ<COG$N\*-MET>V])7M\ZG]-?;QP])_F\?; M5/*'6U9;_NS^+U!+`P04````" !"6'TR;<,DA=H````K` ``*0```'-T<FEN M9U]V:65W7W1E<W0O=F,V+W-T<FEN9U]V:65W7W1E<W0N9'-WM8[!2L- %$7W M ?S#M6XU M/,E**Z-6%B%MJ58M:>3V8RD52J4WIA45(9(U72%2^EU8/),V4C6X\X9#U[E$ M.<F2.)GY"#D27H"%<0&>(61S5C 4#W&.DF>/>3J9,D3QG%VXSO[Q;W- IEJ] M=EWG.GW?'PVCD^&\X:]R0,YJ]2IJ_V<^-__O\PE02P,$% ```` `V&!],LF MZ*!.$ ```,X``"D```!S=')I;F=?=FEE=U]T97-T+W9C-B]S=')I;F=?=FEE M=U]T97-T+F]P=.U=#W 4UWE_>Z?3G "!S%]!`JP5!V1 \DD(\5]!.DF<B/XA MWMNWN[^[TXW\XK:WGOG!BK=)!FJ(FWPX5D#R'7D"$Q-%!.5C8S1I:XHQCEL* MHQ )\^:&Y$$\$#KG M9#ED M\4$J()60C9 J5J\:>C-D"V0K9!MD.V0'9">A:]NJMPNZ%E('\4/J(0V01LAN M]XLN>-=)/S%('+$(8_P28IE .F'&(A<DXA)<Q%J[8XYVIP*M;RY60N=>1P^& MX%]!:OHH0FOTW*'GRHWZGT=?F/\&S+J*L6HWY9V>BRZ!GJ_V'.0T('3.R+A_ M,QAJ;ZX--K9UM" SE&D?& Q79V661XPX]48C9O?X]Y!_A3R$O,< )U#X;4R1 M.^WIDA/A/MI;NBLM1Z0%G9XC5/X*S?R.I2-L7.YTP3Y95^6>J&(XK5QZ"BDJ M_P2K^4*658?2JQH)17=8N8D[AZ_\%F5 TX>=)GDY',WQR]&HU)F0P_U.,X]^ M6[.+<_PXS=OAMNJ[T]X6)9:4>F1]%3U$PP*,L/(=H!<:VO!GV+' &J+I!UU6 M/AI"`&,168^4.QH2$M0;O5*LR;-V;MK0*D=#D ML3%7X Q2#T"&4>OI25K)8ZW\2K!;F=N8I),:UA4EMMD<O=OLD3M!STMZ/;P= M<HE8W7?&S9X1&K]'B=6+41:WKQ![N(5F+Z46-:;6R;H]9MI;(?DH3'Z(GA:C M6Z^YLGN+K/1[2#Q. M\NM5.:KUKA:L:%"3O.2_H& !<N 6]0J;3+NO;DNEZ9V%*HQ/M%^+)70M:M"; MB3SFVY-\'[7/XV MLD:R3A;O;EV.]ZEA8XE C?),H_RDCT7G/N ]*-GG,*)- MV^OU&K'*, B_%M5T8YFC&=%L9A]RAJ!?%JS+?F8S]!1YD%AE.*F"2BHA!34M MOT/3%]!1ESMK_ZK3M2%#J7$X$09S.-F;5/3AU<QB)74R-+5%4;V<D'MD0Y&P M)'IU><!I+.0P] 3I5NZT<.6P\-KN:AQ&[AQ&>?MP>5KE,, ;<NO+R4\?00[T M*L0&7+F&N:?;E"O5)UBWR"<$ZY8U(Z3,J,IIE)>B^^-W87 6^F?9)R$SVN0T M]$P:G5!C!=M>[..#PL062M&CTG2>Z6/R7G!P<'!P<'RJ\!2IQ%W,')?W?*MX M\1>MHCP -:IX_ ZUJ&%=,[2C"6F?:B1E^MB;C*A:J*6SOC54Z?-5M/F#H0K? MQHVAH0'5B/27A_L&T-Y9/ 0NG*'V5$*?J^; IML[WM[%*QUB`:ZT-0/_W4OE M8?.6?-YX^>733>(?^W_PBN_7%]YPCG/7+YO%QR#V<=%_[C'3?5>;Q45KR<<" MO=:3_J=.%2L!\9G(VL[+D8"X2'EU7Q_T/VPY]\]%T"7#UPY MD_X6(D%_;>[),R,]`='XGW]<EX)^\ZW.,Z54ET96C, !<<.7+]R1ABY\]LK% M_NU 0%25UQY]$CJ(]?0JYJ,XSTUVC;:8\^%Z];F_Z;]TJM\9LZ*7F\4C+U^? MC]2[UGS\YF]G:#XN]8=3P8#H7S+8*D'G'5LP,M(9$ NZGWXI!7WGP3WO%T'7 M?;?]P_:. 'AQY^L?$. WS[:=?FYO0'SNJU]ZQPN]\N[_N/=J>T"L.K/]\33T MWO-+UI="/[5^=.%(&^:CROM8"MJ5O*!(T+L_:/O>2"OF_\_/_3 %_?:2OW^V M&/I0Q<HGXBV(WS>N_5J"?F'=>RTCS8CSV,)'4M!=W==6ET(_E'?HU-4O!L1K M'^?_./]WZ_)_7MPTMS3O:2:$\W^<_^/\'^?_)JX]SO\)G/\;=\+Y/VK ^3_. M;C> V^D+^_YQ$VF'=,,__>XY]=N+HT&D%'CO-K\%;DQDB29 '7$)8PY\9$4' MR\'!P<'!\:D#YW\Y_\OYWUN7_SWRKO6TL"J+7BN3NM38QDK)?+!<//E_<L0M M=+M%<.6PESZRN$.)*GA HS?80II&GZ;>]0AL+G*T>]V,DBW_[ FRK[)CGP U M19180DVHV#SL+//3JO&HG#BJZ0-&(IK]4=:L<8;C\>L]HJEK'GN=Y'L7=W;6 MCD\7./_'^3_._]VZ_)_]^\_TAG N\?NC1F,TTAG5>B:A`PGG_PCG_SC_1UOA M_U^DS_=$RE%I&IBN_YG&Q_$_A[B)16 *+">SE4/'-GP2I.J&^Z7RRBT^[GFB MY]W'-I2T;PNUZQIE2W)<^_;YMVX)^3N"H<X.?ZBUH:O<W]Y>8CJIFLK')SDZ MWQ;J]08H<$KQ>8BPJX"Q*&5^N\M>Y!;:N76Z(O?;)9326$(IGL1P7)%:5$.. M8( QA T-M<4578Z-5_DJJBQF5=1!-:)(/</2`477[ I?NUZA*::DY'!"ZE", M9'1\=(^APC*[PB &'[%\.+OZ==29;]5I&U3THU%MR"XZC:+;K"+S-Z D?Y\2 M[K=+SZ!T 55Z=RPRT7(9R I:-<GZR2L[]_/(+6[58F',E1I+4K+.C$O<V9\U M9FA9;^M5(ZX9JK/\+ U<4RRA]"KZ1\3E<3JI=I7,03U![=MU&&+VE,ADLS=* M0V*-.--ZDX E4=_<++5J":F13JU=4H>2Y;2D*8;^HO?WF6&6&F4X&J_U)3)P MN:A%BR0Q]*PFCJ-P$<[DL!))ZI.4>VF_[- $L%*B"F%%86/ K6773WO_^O79 MD:6 S+1'D5,;4G-BR0%_GZP;&R(TV:S&%"07(HD9JHO*L7Z6E6_^JEH%3 <S M46DG-MH)[!W[!?K_9)D3SO]R_I?SOX3SOQP<'!P<'!P<'!P<'!RW+O+QV%I( M=N6?SYM'GIQ0XK_+OWX]6? `*:(/IB'22U[TT/=[B$2/M^/O_D,X?L ZKL'? MSPL)*6C<91X?)CWD(LHK4.XA+G(0]G^-8Q'E])>%(OA;?= ^SB-'">4IEKDL M;: KJZCP-Y;5-595E_E\M;4^7Y6_HK*A\GYR0S^7=*^;D'YT;^XLATM&/V)N MN):C'[5LSZ_-V/MW36^%L0W?\<.&,[K [(AY9CEBWX35L\RWK6W<Y +;;^UC M,[+ [%W_OQ"J-P7ZMM[LANOKL/H6\VUK&[L^SJX_8YN^?3MVCD7,/<L1H]\\ MV\%\V]K&S2ZPEH:6MHY[9O0>;("%RS7+X1I%'PK9M;$PXQIYL^'"AM_4NGM& M-_P3+%S"+(<+QO0S&"9L;6.:X<KXN-",G(R9MQ.9]]5_Z'"]!JM"=AMA:QN? M2P,$" ``````O&!], ```````````````!$```!S=')I;F=?=FEE=U]T97-T M+U!+`0(4`!0````(`+Q ?3),P4?G: P``,LR```E``````````$`( "V 0`` M``!S=')I;F=?=FEE=U]T97-T+W-T<FEN9U]V:65W7W1E<W0N8W!P4$L!`A0` M" ``````V&!], ```````````````!4````````````0`/]!K0P``'-T<FEN M9U]V:65W7W1E<W0O=F,V+U!+`0(4``H``````*A ?3(````````````````; M<W1R:6YG7W9I97=?=&5S="]V8S8O<W1R:6YG7W9I97=?=&5S="YD<W!02P$" M% `4````" !"6'TR;<,DA=H````K` ``*0`````````!`" `MH$S$P``<W1R M:6YG7W9I97=?=&5S="]V8S8O<W1R:6YG7W9I97=?=&5S="YD<W=02P$"% `4 M7W9I97=?=&5S="]V8S8O<W1R:6YG7W9I97=?=&5S="YO<'102P$"% `*```` M``"\8'TR````````````````$0```````````! `_T'I) ``<W1R:6YG7W9I97=?=&5S="]02P4&``````<`!P`C` ``&"4`````` end
Mar 28 2005