diff options
author | Kartik Agaram <vc@akkartik.com> | 2018-11-26 01:19:47 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2018-11-26 01:19:47 -0800 |
commit | d1c9392a5461e0d33e226375a8f7986a97d2d66b (patch) | |
tree | 494c19edbe1d1522344b56ced6aa7c040ad37406 /html/subx/001help.cc.html | |
parent | 7e00968c99f97e13be8f5269feaf7fd1d33ecd33 (diff) | |
download | mu-d1c9392a5461e0d33e226375a8f7986a97d2d66b.tar.gz |
4782
Diffstat (limited to 'html/subx/001help.cc.html')
-rw-r--r-- | html/subx/001help.cc.html | 89 |
1 files changed, 45 insertions, 44 deletions
diff --git a/html/subx/001help.cc.html b/html/subx/001help.cc.html index 5b9dbf8d..1a3fe7ed 100644 --- a/html/subx/001help.cc.html +++ b/html/subx/001help.cc.html @@ -19,6 +19,7 @@ a:hover { text-decoration: underline; } .LineNr { color: #444444; } .Constant { color: #00a0a0; } .Delimiter { color: #800080; } +.Special { color: #c00000; } .Identifier { color: #c0a020; } .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; } .Comment { color: #9090ff; } @@ -65,7 +66,7 @@ if ('onhashchange' in window) { <span id="L5" class="LineNr"> 5 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc <= <span class="Constant">1</span> || <a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">"--help"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L6" class="LineNr"> 6 </span> <span class="Comment">//: this is the functionality later layers will provide</span> <span id="L7" class="LineNr"> 7 </span> <span class="Comment">// currently no automated tests for commandline arg parsing</span> -<span id="L8" class="LineNr"> 8 </span> cerr << get<span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">"usage"</span><span class="Delimiter">);</span> +<span id="L8" class="LineNr"> 8 </span> cerr << get<span class="Delimiter">(</span><span class="Special"><a href='001help.cc.html#L53'>Help</a></span><span class="Delimiter">,</span> <span class="Constant">"usage"</span><span class="Delimiter">);</span> <span id="L9" class="LineNr"> 9 </span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span> <span id="L10" class="LineNr"> 10 </span><span class="Delimiter">}</span> <span id="L11" class="LineNr"> 11 </span> @@ -84,33 +85,33 @@ if ('onhashchange' in window) { <span id="L24" class="LineNr"> 24 </span> <span id="L25" class="LineNr"> 25 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">"help"</span><span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L26" class="LineNr"> 26 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>argc == <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L27" class="LineNr"> 27 </span> cerr << <span class="Constant">"help on what?</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L27" class="LineNr"> 27 </span> cerr << <span class="Constant">"help on what?\n"</span><span class="Delimiter">;</span> <span id="L28" class="LineNr"> 28 </span> <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">();</span> <span id="L29" class="LineNr"> 29 </span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span> <span id="L30" class="LineNr"> 30 </span> <span class="Delimiter">}</span> <span id="L31" class="LineNr"> 31 </span> string key<span class="Delimiter">(</span>argv[<span class="Constant">2</span>]<span class="Delimiter">);</span> <span id="L32" class="LineNr"> 32 </span> <span class="Comment">// End Help Special-cases(key)</span> -<span id="L33" class="LineNr"> 33 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> key<span class="Delimiter">))</span> <span class="Delimiter">{</span> -<span id="L34" class="LineNr"> 34 </span> cerr << get<span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> key<span class="Delimiter">);</span> +<span id="L33" class="LineNr"> 33 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span><span class="Special"><a href='001help.cc.html#L53'>Help</a></span><span class="Delimiter">,</span> key<span class="Delimiter">))</span> <span class="Delimiter">{</span> +<span id="L34" class="LineNr"> 34 </span> cerr << get<span class="Delimiter">(</span><span class="Special"><a href='001help.cc.html#L53'>Help</a></span><span class="Delimiter">,</span> key<span class="Delimiter">);</span> <span id="L35" class="LineNr"> 35 </span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span> <span id="L36" class="LineNr"> 36 </span> <span class="Delimiter">}</span> <span id="L37" class="LineNr"> 37 </span> <span class="Normal">else</span> <span class="Delimiter">{</span> -<span id="L38" class="LineNr"> 38 </span> cerr << <span class="Constant">"No help found for '"</span> << key << <span class="Constant">"'</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L38" class="LineNr"> 38 </span> cerr << <span class="Constant">"No help found for '"</span> << key << <span class="Constant">"'\n"</span><span class="Delimiter">;</span> <span id="L39" class="LineNr"> 39 </span> <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">();</span> -<span id="L40" class="LineNr"> 40 </span> cerr << <span class="Constant">"Please check your command for typos.</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L40" class="LineNr"> 40 </span> cerr << <span class="Constant">"Please check your command for typos.\n"</span><span class="Delimiter">;</span> <span id="L41" class="LineNr"> 41 </span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span> <span id="L42" class="LineNr"> 42 </span> <span class="Delimiter">}</span> <span id="L43" class="LineNr"> 43 </span><span class="Delimiter">}</span> <span id="L44" class="LineNr"> 44 </span> <span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(code)</span> <span id="L46" class="LineNr"> 46 </span><span class="Normal">void</span> <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> -<span id="L47" class="LineNr"> 47 </span> cerr << <span class="Constant">"Available top-level topics:</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> -<span id="L48" class="LineNr"> 48 </span> cerr << <span class="Constant">" usage</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L47" class="LineNr"> 47 </span> cerr << <span class="Constant">"Available top-level topics:\n"</span><span class="Delimiter">;</span> +<span id="L48" class="LineNr"> 48 </span> cerr << <span class="Constant">" usage\n"</span><span class="Delimiter">;</span> <span id="L49" class="LineNr"> 49 </span> <span class="Comment">// End Help Contents</span> <span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span> <span id="L51" class="LineNr"> 51 </span> <span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(before "End Globals")</span> -<span id="L53" class="LineNr"> 53 </span>map<string<span class="Delimiter">,</span> string> <a href='001help.cc.html#L53'>Help</a><span class="Delimiter">;</span> +<span id="L53" class="LineNr"> 53 </span>map<string<span class="Delimiter">,</span> string> <span class="Special"><a href='001help.cc.html#L53'>Help</a></span><span class="Delimiter">;</span> <span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before "End Includes")</span> <span id="L55" class="LineNr"> 55 </span><span class="Comment">#include <map></span> <span id="L56" class="LineNr"> 56 </span><span class="Normal">using</span> std::map<span class="Delimiter">;</span> @@ -118,29 +119,29 @@ if ('onhashchange' in window) { <span id="L58" class="LineNr"> 58 </span><a href='001help.cc.html#L60'>init_help</a><span class="Delimiter">();</span> <span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(code)</span> <span id="L60" class="LineNr"> 60 </span><span class="Normal">void</span> <a href='001help.cc.html#L60'>init_help</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> -<span id="L61" class="LineNr"> 61 </span> <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">"usage"</span><span class="Delimiter">,</span> -<span id="L62" class="LineNr"> 62 </span> <span class="Constant">"Welcome to SubX, a better way to <a href='011run.cc.html#L99'>program</a> in machine code.</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L63" class="LineNr"> 63 </span> <span class="Constant">"SubX uses a subset of the x86 instruction set. SubX programs will <a href='011run.cc.html#L83'>run</a></span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L64" class="LineNr"> 64 </span> <span class="Constant">"without modification on Linux computers.</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L65" class="LineNr"> 65 </span> <span class="Constant">"It provides a better experience and better error messages than</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L66" class="LineNr"> 66 </span> <span class="Constant">"programming directly in machine <a href='031check_operands.cc.html#L11'>code</a>, but you have to stick to the</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L67" class="LineNr"> 67 </span> <span class="Constant">"instructions it supports.</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L68" class="LineNr"> 68 </span> <span class="Constant">"</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L69" class="LineNr"> 69 </span> <span class="Constant">"== Ways to invoke subx</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L70" class="LineNr"> 70 </span> <span class="Constant">"- Run tests:</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L71" class="LineNr"> 71 </span> <span class="Constant">" subx test</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L72" class="LineNr"> 72 </span> <span class="Constant">"- See this message:</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L73" class="LineNr"> 73 </span> <span class="Constant">" subx --help</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L74" class="LineNr"> 74 </span> <span class="Constant">"- Convert a textual SubX <a href='011run.cc.html#L99'>program</a> into a standard ELF binary that you can</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L75" class="LineNr"> 75 </span> <span class="Constant">" <a href='011run.cc.html#L83'>run</a> on your computer:</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L76" class="LineNr"> 76 </span> <span class="Constant">" subx translate input1.subx intput2.subx ... -o <output ELF binary></span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L77" class="LineNr"> 77 </span> <span class="Constant">"- Run a SubX binary using SubX itself (for better error messages):</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L78" class="LineNr"> 78 </span> <span class="Constant">" subx <a href='011run.cc.html#L83'>run</a> <ELF binary></span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L79" class="LineNr"> 79 </span> <span class="Constant">"Add '--trace' to any of these commands to also emit a <a href='003trace.cc.html#L203'>trace</a>, for debugging purposes.</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L80" class="LineNr"> 80 </span> <span class="Constant">"However, options starting with '--' must always come before any other arguments.</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L81" class="LineNr"> 81 </span> <span class="Constant">"</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L82" class="LineNr"> 82 </span> <span class="Constant">"To start learning how to write SubX programs, <a href='011run.cc.html#L83'>run</a>:</span><span class="cSpecial">\n</span><span class="Constant">"</span> -<span id="L83" class="LineNr"> 83 </span> <span class="Constant">" subx help</span><span class="cSpecial">\n</span><span class="Constant">"</span> +<span id="L61" class="LineNr"> 61 </span> <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><span class="Special"><a href='001help.cc.html#L53'>Help</a></span><span class="Delimiter">,</span> <span class="Constant">"usage"</span><span class="Delimiter">,</span> +<span id="L62" class="LineNr"> 62 </span> <span class="Constant">"Welcome to SubX, a better way to <a href='011run.cc.html#L99'>program</a> in machine code.\n"</span> +<span id="L63" class="LineNr"> 63 </span> <span class="Constant">"SubX uses a subset of the x86 instruction set. SubX programs will run\n"</span> +<span id="L64" class="LineNr"> 64 </span> <span class="Constant">"without modification on Linux computers.\n"</span> +<span id="L65" class="LineNr"> 65 </span> <span class="Constant">"It provides a better experience and better error messages than\n"</span> +<span id="L66" class="LineNr"> 66 </span> <span class="Constant">"programming directly in machine <a href='031check_operands.cc.html#L11'>code</a>, but you have to stick to the\n"</span> +<span id="L67" class="LineNr"> 67 </span> <span class="Constant">"instructions it supports.\n"</span> +<span id="L68" class="LineNr"> 68 </span> <span class="Constant">"\n"</span> +<span id="L69" class="LineNr"> 69 </span> <span class="Constant">"== Ways to invoke subx\n"</span> +<span id="L70" class="LineNr"> 70 </span> <span class="Constant">"- Run tests:\n"</span> +<span id="L71" class="LineNr"> 71 </span> <span class="Constant">" subx test\n"</span> +<span id="L72" class="LineNr"> 72 </span> <span class="Constant">"- See this message:\n"</span> +<span id="L73" class="LineNr"> 73 </span> <span class="Constant">" subx --help\n"</span> +<span id="L74" class="LineNr"> 74 </span> <span class="Constant">"- Convert a textual SubX <a href='011run.cc.html#L99'>program</a> into a standard ELF binary that you can\n"</span> +<span id="L75" class="LineNr"> 75 </span> <span class="Constant">" <a href='011run.cc.html#L83'>run</a> on your computer:\n"</span> +<span id="L76" class="LineNr"> 76 </span> <span class="Constant">" subx translate input1.subx intput2.subx ... -o <output ELF binary>\n"</span> +<span id="L77" class="LineNr"> 77 </span> <span class="Constant">"- Run a SubX binary using SubX itself (for better error messages):\n"</span> +<span id="L78" class="LineNr"> 78 </span> <span class="Constant">" subx <a href='011run.cc.html#L83'>run</a> <ELF binary>\n"</span> +<span id="L79" class="LineNr"> 79 </span> <span class="Constant">"Add '--trace' to any of these commands to also emit a <a href='003trace.cc.html#L203'>trace</a>, for debugging purposes.\n"</span> +<span id="L80" class="LineNr"> 80 </span> <span class="Constant">"However, options starting with '--' must always come before any other arguments.\n"</span> +<span id="L81" class="LineNr"> 81 </span> <span class="Constant">"\n"</span> +<span id="L82" class="LineNr"> 82 </span> <span class="Constant">"To start learning how to write SubX programs, <a href='011run.cc.html#L83'>run</a>:\n"</span> +<span id="L83" class="LineNr"> 83 </span> <span class="Constant">" subx help\n"</span> <span id="L84" class="LineNr"> 84 </span> <span class="Delimiter">);</span> <span id="L85" class="LineNr"> 85 </span> <span class="Comment">// End Help Texts</span> <span id="L86" class="LineNr"> 86 </span><span class="Delimiter">}</span> @@ -237,13 +238,13 @@ if ('onhashchange' in window) { <span id="L177" class="LineNr">177 </span> <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L178" class="LineNr">178 </span> <span class="Normal">case</span> <span class="Constant">SIGABRT</span>: <span id="L179" class="LineNr">179 </span> <span class="Comment">#ifndef __APPLE__</span> -<span id="L180" class="LineNr">180 </span> cerr << <span class="Constant">"SIGABRT: might be an integer overflow if it wasn't an assert() failure</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L180" class="LineNr">180 </span> cerr << <span class="Constant">"SIGABRT: might be an integer overflow if it wasn't an assert() failure\n"</span><span class="Delimiter">;</span> <span id="L181" class="LineNr">181 </span> _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span> <span id="L182" class="LineNr">182 </span> <span class="Comment">#endif</span> <span id="L183" class="LineNr">183 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span id="L184" class="LineNr">184 </span> <span class="Normal">case</span> <span class="Constant">SIGILL</span>: <span id="L185" class="LineNr">185 </span> <span class="Comment">#ifdef __APPLE__</span> -<span id="L186" class="LineNr">186 </span> cerr << <span class="Constant">"SIGILL: most likely caused by integer overflow</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L186" class="LineNr">186 </span> cerr << <span class="Constant">"SIGILL: most likely caused by integer overflow\n"</span><span class="Delimiter">;</span> <span id="L187" class="LineNr">187 </span> _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span> <span id="L188" class="LineNr">188 </span> <span class="Comment">#endif</span> <span id="L189" class="LineNr">189 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> @@ -284,33 +285,33 @@ if ('onhashchange' in window) { <span id="L224" class="LineNr">224 </span><span class="Comment">//: 6. Map's operator[] being non-const is fucking evil.</span> <span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before "Globals")</span> <span class="Comment">// can't generate prototypes for these</span> <span id="L226" class="LineNr">226 </span><span class="Comment">// from <a href="http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map">http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map</a></span> -<span id="L227" class="LineNr">227 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">typename</span> T::mapped_type& get<span class="Delimiter">(</span>T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L228" class="LineNr">228 </span> <span class="Normal">typename</span> T::iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span> +<span id="L227" class="LineNr">227 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type& get<span class="Delimiter">(</span><span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L228" class="LineNr">228 </span> <span class="Normal">typename</span> <span class="Special">T</span>::iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span> <span id="L229" class="LineNr">229 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>iter == map<span class="Delimiter">.</span>end<span class="Delimiter">())</span> <span class="Delimiter">{</span> -<span id="L230" class="LineNr">230 </span> cerr << <span class="Constant">"get couldn't find key '"</span> << key << <span class="Constant">"'</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L230" class="LineNr">230 </span> cerr << <span class="Constant">"get couldn't find key '"</span> << key << <span class="Constant">"'\n"</span><span class="Delimiter">;</span> <span id="L231" class="LineNr">231 </span> assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span>end<span class="Delimiter">());</span> <span id="L232" class="LineNr">232 </span> <span class="Delimiter">}</span> <span id="L233" class="LineNr">233 </span> <span class="Identifier">return</span> iter<span class="Delimiter">-></span>second<span class="Delimiter">;</span> <span id="L234" class="LineNr">234 </span><span class="Delimiter">}</span> -<span id="L235" class="LineNr">235 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>& get<span class="Delimiter">(</span><span class="Normal">const</span> T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> -<span id="L236" class="LineNr">236 </span> <span class="Normal">typename</span> T::const_iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span> +<span id="L235" class="LineNr">235 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type <span class="Normal">const</span>& get<span class="Delimiter">(</span><span class="Normal">const</span> <span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L236" class="LineNr">236 </span> <span class="Normal">typename</span> <span class="Special">T</span>::const_iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span> <span id="L237" class="LineNr">237 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>iter == map<span class="Delimiter">.</span>end<span class="Delimiter">())</span> <span class="Delimiter">{</span> -<span id="L238" class="LineNr">238 </span> cerr << <span class="Constant">"get couldn't find key '"</span> << key << <span class="Constant">"'</span><span class="cSpecial">\n</span><span class="Constant">"</span><span class="Delimiter">;</span> +<span id="L238" class="LineNr">238 </span> cerr << <span class="Constant">"get couldn't find key '"</span> << key << <span class="Constant">"'\n"</span><span class="Delimiter">;</span> <span id="L239" class="LineNr">239 </span> assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span>end<span class="Delimiter">());</span> <span id="L240" class="LineNr">240 </span> <span class="Delimiter">}</span> <span id="L241" class="LineNr">241 </span> <span class="Identifier">return</span> iter<span class="Delimiter">-></span>second<span class="Delimiter">;</span> <span id="L242" class="LineNr">242 </span><span class="Delimiter">}</span> -<span id="L243" class="LineNr">243 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>& <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span>T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>& value<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L243" class="LineNr">243 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type <span class="Normal">const</span>& <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type <span class="Normal">const</span>& value<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L244" class="LineNr">244 </span> map[key] = value<span class="Delimiter">;</span> <span id="L245" class="LineNr">245 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span> <span id="L246" class="LineNr">246 </span><span class="Delimiter">}</span> -<span id="L247" class="LineNr">247 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">bool</span> <a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span>T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L247" class="LineNr">247 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">bool</span> <a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span><span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L248" class="LineNr">248 </span> <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span>end<span class="Delimiter">();</span> <span id="L249" class="LineNr">249 </span><span class="Delimiter">}</span> -<span id="L250" class="LineNr">250 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">typename</span> T::mapped_type& <a href='001help.cc.html#L250'>get_or_insert</a><span class="Delimiter">(</span>T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L250" class="LineNr">250 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type& <a href='001help.cc.html#L250'>get_or_insert</a><span class="Delimiter">(</span><span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L251" class="LineNr">251 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span> <span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span> -<span id="L253" class="LineNr">253 </span><span class="Normal">template</span><<span class="Normal">typename</span> T> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>& <a href='001help.cc.html#L253'>put_new</a><span class="Delimiter">(</span>T& map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>& key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>& value<span class="Delimiter">)</span> <span class="Delimiter">{</span> +<span id="L253" class="LineNr">253 </span><span class="Normal">template</span><<span class="Normal">typename</span> <span class="Special">T</span>> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type <span class="Normal">const</span>& <a href='001help.cc.html#L253'>put_new</a><span class="Delimiter">(</span><span class="Special">T</span>& map<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::key_type <span class="Normal">const</span>& key<span class="Delimiter">,</span> <span class="Normal">typename</span> <span class="Special">T</span>::mapped_type <span class="Normal">const</span>& value<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L254" class="LineNr">254 </span> assert<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> == map<span class="Delimiter">.</span>end<span class="Delimiter">());</span> <span id="L255" class="LineNr">255 </span> map[key] = value<span class="Delimiter">;</span> <span id="L256" class="LineNr">256 </span> <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span> |