summary refs log blame commit diff stats
path: root/c/square-root/README.md
blob: bd73bc58f572defc9e26428307161a18ae0060ca (plain) (tree)
















































                                                                                                                                                                                                   
# Square Root

Given a natural radicand, return its square root.

Check out the Wikipedia pages on [square root](https://en.wikipedia.org/wiki/Square_root) and [methods of computing square roots](https://en.wikipedia.org/wiki/Methods_of_computing_square_roots).

Note that the term "radicand" refers to the number for which the root is to be determined. That is, it is the number under the root symbol.

Recall also that natural numbers are positive real whole numbers (i.e. 1, 2, 3 and up).

When implementing this in a language with a built-in square root function, implement your own function.

## Getting Started

Make sure you have read the "Guides" section of the
[C track][c-track] on the Exercism site. This covers
the basic information on setting up the development environment expected
by the exercises.

## Passing the Tests

Get the first test compiling, linking and passing by following the [three
rules of test-driven development][3-tdd-rules].

The included makefile can be used to create and run the tests using the `test`
task.

    make test

Create just the functions you need to satisfy any compiler errors and get the
test to fail. Then write just enough code to get the test to pass. Once you've
done that, move onto the next test.

As you progress through the tests, take the time to refactor your
implementation for readability and expressiveness and then go on to the next
test.

Try to use standard C99 facilities in preference to writing your own
low-level algorithms or facilities by hand.

## Source

wolf99 [https://github.com/exercism/problem-specifications/pull/1582](https://github.com/exercism/problem-specifications/pull/1582)

## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

[c-track]: https://exercism.io/my/tracks/c
[3-tdd-rules]: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd
padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 089scenario_filesystem.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.Constant { color: #008787; }
.LineNr { }
.muScenario { color: #00af00; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.cSpecial { color: #008000; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/089scenario_filesystem.cc'>https://github.com/akkartik/mu/blob/master/089scenario_filesystem.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Clean syntax to manipulate and check the file system in scenarios.</span>
<span id="L2" class="LineNr">  2 </span><span class="Comment">//: Instruction 'assume-resources' implicitly creates a variable called</span>
<span id="L3" class="LineNr">  3 </span><span class="Comment">//: 'resources' that is accessible to later instructions in the scenario.</span>
<span id="L4" class="LineNr">  4 </span>
<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(scenarios run_mu_scenario)</span>
<span id="L6" class="LineNr">  6 </span><span class="Delimiter">:(scenario simple_filesystem)</span>
<span id="L7" class="LineNr">  7 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> simple-filesystem [
<span id="L8" class="LineNr">  8 </span>  local-scope
<span id="L9" class="LineNr">  9 </span>  assume-resources [
<span id="L10" class="LineNr"> 10 </span>    <span class="Comment"># file 'a' containing two lines of data</span>
<span id="L11" class="LineNr"> 11 </span>    [a]<span class="Special"> &lt;- </span>[
<span id="L12" class="LineNr"> 12 </span>      |a bc|
<span id="L13" class="LineNr"> 13 </span>      |de f|
<span id="L14" class="LineNr"> 14 </span>    ]
<span id="L15" class="LineNr"> 15 </span>    <span class="Comment"># directory 'b' containing two files, 'c' and 'd'</span>
<span id="L16" class="LineNr"> 16 </span>    [b/c]<span class="Special"> &lt;- </span>[]
<span id="L17" class="LineNr"> 17 </span>    [b/d]<span class="Special"> &lt;- </span>[
<span id="L18" class="LineNr"> 18 </span>      |xyz|
<span id="L19" class="LineNr"> 19 </span>    ]
<span id="L20" class="LineNr"> 20 </span>  ]
<span id="L21" class="LineNr"> 21 </span>  <span class="Normal">data</span>:&amp;:@:resource<span class="Special"> &lt;- </span>get *resources<span class="Delimiter">,</span> <span class="Constant">data:offset</span>
<span id="L22" class="LineNr"> 22 </span>  <span class="Normal">file1</span>:resource<span class="Special"> &lt;- </span>index *data<span class="Delimiter">,</span> <span class="Constant">0</span>
<span id="L23" class="LineNr"> 23 </span>  file1-name:text<span class="Special"> &lt;- </span>get file1<span class="Delimiter">,</span> <span class="Constant">name:offset</span>
<span id="L24" class="LineNr"> 24 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file1-name
<span id="L25" class="LineNr"> 25 </span>  file1-contents:text<span class="Special"> &lt;- </span>get file1<span class="Delimiter">,</span> <span class="Constant">contents:offset</span>
<span id="L26" class="LineNr"> 26 </span>  <span class="Constant">100</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file1-contents
<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">file2</span>:resource<span class="Special"> &lt;- </span>index *data<span class="Delimiter">,</span> <span class="Constant">1</span>
<span id="L28" class="LineNr"> 28 </span>  file2-name:text<span class="Special"> &lt;- </span>get file2<span class="Delimiter">,</span> <span class="Constant">name:offset</span>
<span id="L29" class="LineNr"> 29 </span>  <span class="Constant">30</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file2-name
<span id="L30" class="LineNr"> 30 </span>  file2-contents:text<span class="Special"> &lt;- </span>get file2<span class="Delimiter">,</span> <span class="Constant">contents:offset</span>
<span id="L31" class="LineNr"> 31 </span>  <span class="Constant">40</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file2-contents
<span id="L32" class="LineNr"> 32 </span>  <span class="Normal">file3</span>:resource<span class="Special"> &lt;- </span>index *data<span class="Delimiter">,</span> <span class="Constant">2</span>
<span id="L33" class="LineNr"> 33 </span>  file3-name:text<span class="Special"> &lt;- </span>get file3<span class="Delimiter">,</span> <span class="Constant">name:offset</span>
<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">50</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file3-name
<span id="L35" class="LineNr"> 35 </span>  file3-contents:text<span class="Special"> &lt;- </span>get file3<span class="Delimiter">,</span> <span class="Constant">contents:offset</span>
<span id="L36" class="LineNr"> 36 </span>  <span class="Constant">60</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file3-contents
<span id="L37" class="LineNr"> 37 </span>  memory-should-contain [
<span id="L38" class="LineNr"> 38 </span>    <span class="Constant">10</span>:array:character<span class="Special"> &lt;- </span>[a]
<span id="L39" class="LineNr"> 39 </span>    <span class="Constant">100</span>:array:character<span class="Special"> &lt;- </span>[a bc
<span id="L40" class="LineNr"> 40 </span>de f
<span id="L41" class="LineNr"> 41 </span>]
<span id="L42" class="LineNr"> 42 </span>    <span class="Constant">30</span>:array:character<span class="Special"> &lt;- </span>[b/c]
<span id="L43" class="LineNr"> 43 </span>    <span class="Constant">40</span>:array:character<span class="Special"> &lt;- </span>[]
<span id="L44" class="LineNr"> 44 </span>    <span class="Constant">50</span>:array:character<span class="Special"> &lt;- </span>[b/d]
<span id="L45" class="LineNr"> 45 </span>    <span class="Constant">60</span>:array:character<span class="Special"> &lt;- </span>[xyz
<span id="L46" class="LineNr"> 46 </span>]
<span id="L47" class="LineNr"> 47 </span>  ]
<span id="L48" class="LineNr"> 48 </span>]
<span id="L49" class="LineNr"> 49 </span>
<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">:(scenario escaping_file_contents)</span>
<span id="L51" class="LineNr"> 51 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> escaping-file-contents [
<span id="L52" class="LineNr"> 52 </span>  local-scope
<span id="L53" class="LineNr"> 53 </span>  assume-resources [
<span id="L54" class="LineNr"> 54 </span>    <span class="Comment"># file 'a' containing a '|'</span>
<span id="L55" class="LineNr"> 55 </span>    <span class="Comment"># need to escape '\' once for each block</span>
<span id="L56" class="LineNr"> 56 </span>    [a]<span class="Special"> &lt;- </span>[
<span id="L57" class="LineNr"> 57 </span>      |x\\\\|yz|
<span id="L58" class="LineNr"> 58 </span>    ]
<span id="L59" class="LineNr"> 59 </span>  ]
<span id="L60" class="LineNr"> 60 </span>  <span class="Normal">data</span>:&amp;:@:resource<span class="Special"> &lt;- </span>get *resources<span class="Delimiter">,</span> <span class="Constant">data:offset</span>
<span id="L61" class="LineNr"> 61 </span>  <span class="Normal">file1</span>:resource<span class="Special"> &lt;- </span>index *data<span class="Delimiter">,</span> <span class="Constant">0</span>
<span id="L62" class="LineNr"> 62 </span>  file1-name:text<span class="Special"> &lt;- </span>get file1<span class="Delimiter">,</span> <span class="Constant">name:offset</span>
<span id="L63" class="LineNr"> 63 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file1-name
<span id="L64" class="LineNr"> 64 </span>  file1-contents:text<span class="Special"> &lt;- </span>get file1<span class="Delimiter">,</span> <span class="Constant">contents:offset</span>
<span id="L65" class="LineNr"> 65 </span>  <span class="Constant">20</span>:@:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>copy *file1-contents
<span id="L66" class="LineNr"> 66 </span>  memory-should-contain [
<span id="L67" class="LineNr"> 67 </span>    <span class="Constant">10</span>:array:character<span class="Special"> &lt;- </span>[a]
<span id="L68" class="LineNr"> 68 </span>    <span class="Constant">20</span>:array:character<span class="Special"> &lt;- </span>[x|yz
<span id="L69" class="LineNr"> 69 </span>]
<span id="L70" class="LineNr"> 70 </span>  ]
<span id="L71" class="LineNr"> 71 </span>]
<span id="L72" class="LineNr"> 72 </span>
<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L74" class="LineNr"> 74 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> RESOURCES = next_predefined_global_for_scenarios<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">size_of(address:resources)</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L75" class="LineNr"> 75 </span><span class="Comment">//: give 'resources' a fixed location in scenarios</span>
<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
<span id="L77" class="LineNr"> 77 </span><span class="Special">Name</span>[r][<span class="Constant">&quot;resources&quot;</span>] = RESOURCES<span class="Delimiter">;</span>
<span id="L78" class="LineNr"> 78 </span><span class="Comment">//: make 'resources' always a raw location in scenarios</span>
<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
<span id="L80" class="LineNr"> 80 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(before &quot;End Initialize Type Of Special Name In Scenario(r)&quot;)</span>
<span id="L82" class="LineNr"> 82 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> r<span class="Delimiter">.</span>type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:resources&quot;</span><span class="Delimiter">);</span>
<span id="L83" class="LineNr"> 83 </span>
<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End initialize_transform_rewrite_literal_string_to_text()&quot;)</span>
<span id="L85" class="LineNr"> 85 </span>recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;assume-resources&quot;</span><span class="Delimiter">);</span>
<span id="L86" class="LineNr"> 86 </span>
<span id="L87" class="LineNr"> 87 </span><span class="Comment">//: screen-should-contain is a regular instruction</span>
<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L89" class="LineNr"> 89 </span>ASSUME_RESOURCES<span class="Delimiter">,</span>
<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L91" class="LineNr"> 91 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;assume-resources&quot;</span><span class="Delimiter">,</span> ASSUME_RESOURCES<span class="Delimiter">);</span>
<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L93" class="LineNr"> 93 </span><span class="Normal">case</span> ASSUME_RESOURCES: <span class="Delimiter">{</span>
<span id="L94" class="LineNr"> 94 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">}</span>
<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L97" class="LineNr"> 97 </span><span class="Normal">case</span> ASSUME_RESOURCES: <span class="Delimiter">{</span>
<span id="L98" class="LineNr"> 98 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
<span id="L99" class="LineNr"> 99 </span>  <a href='089scenario_filesystem.cc.html#L104'>assume_resources</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">());</span>
<span id="L100" class="LineNr">100 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L101" class="LineNr">101 </span><span class="Delimiter">}</span>
<span id="L102" class="LineNr">102 </span>
<span id="L103" class="LineNr">103 </span><span class="Delimiter">:(code)</span>
<span id="L104" class="LineNr">104 </span><span class="Normal">void</span> <a href='089scenario_filesystem.cc.html#L104'>assume_resources</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; data<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span>  map&lt;string<span class="Delimiter">,</span> string&gt; contents<span class="Delimiter">;</span>
<span id="L106" class="LineNr">106 </span>  <a href='089scenario_filesystem.cc.html#L110'>parse_resources</a><span class="Delimiter">(</span>data<span class="Delimiter">,</span> contents<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
<span id="L107" class="LineNr">107 </span>  <a href='089scenario_filesystem.cc.html#L205'>construct_resources_object</a><span class="Delimiter">(</span>contents<span class="Delimiter">);</span>
<span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span>
<span id="L110" class="LineNr">110 </span><span class="Normal">void</span> <a href='089scenario_filesystem.cc.html#L110'>parse_resources</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; data<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> string&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L111" class="LineNr">111 </span>  istringstream in<span class="Delimiter">(</span>data<span class="Delimiter">);</span>
<span id="L112" class="LineNr">112 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L113" class="LineNr">113 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L114" class="LineNr">114 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L115" class="LineNr">115 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L116" class="LineNr">116 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L117" class="LineNr">117 </span>    string filename = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L118" class="LineNr">118 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>filename<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L119" class="LineNr">119 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L120" class="LineNr">120 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L225'>end</a> of file (0)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L121" class="LineNr">121 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L122" class="LineNr">122 </span>    <span class="Delimiter">}</span>
<span id="L123" class="LineNr">123 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*filename<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L124" class="LineNr">124 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L125" class="LineNr">125 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L126" class="LineNr">126 </span>    <span class="Delimiter">}</span>
<span id="L127" class="LineNr">127 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*filename<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> != <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L225'>end</a> with a ']'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L129" class="LineNr">129 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L130" class="LineNr">130 </span>    <span class="Delimiter">}</span>
<span id="L131" class="LineNr">131 </span>    filename<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L132" class="LineNr">132 </span>    filename<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>filename<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L133" class="LineNr">133 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L134" class="LineNr">134 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L135" class="LineNr">135 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L136" class="LineNr">136 </span>    <span class="Delimiter">}</span>
<span id="L137" class="LineNr">137 </span>    string arrow = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L138" class="LineNr">138 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>arrow<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L139" class="LineNr">139 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L140" class="LineNr">140 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L225'>end</a> of file (1)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L141" class="LineNr">141 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L142" class="LineNr">142 </span>    <span class="Delimiter">}</span>
<span id="L143" class="LineNr">143 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>arrow != <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L144" class="LineNr">144 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: expected '&lt;-' after filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' but got '&quot;</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L145" class="LineNr">145 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L146" class="LineNr">146 </span>    <span class="Delimiter">}</span>
<span id="L147" class="LineNr">147 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L148" class="LineNr">148 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' after '&lt;-'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L149" class="LineNr">149 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L150" class="LineNr">150 </span>    <span class="Delimiter">}</span>
<span id="L151" class="LineNr">151 </span>    string contents = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L152" class="LineNr">152 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L153" class="LineNr">153 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
<span id="L154" class="LineNr">154 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L225'>end</a> of file (2)\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L155" class="LineNr">155 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
<span id="L156" class="LineNr">156 </span>    <span class="Delimiter">}</span>
<span id="L157" class="LineNr">157 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*contents<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L158" class="LineNr">158 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L159" class="LineNr">159 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L160" class="LineNr">160 </span>    <span class="Delimiter">}</span>
<span id="L161" class="LineNr">161 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*contents<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> != <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L162" class="LineNr">162 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L225'>end</a> with a ']'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L163" class="LineNr">163 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span>    <span class="Delimiter">}</span>
<span id="L165" class="LineNr">165 </span>    contents<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L166" class="LineNr">166 </span>    contents<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L167" class="LineNr">167 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> filename<span class="Delimiter">,</span> <a href='089scenario_filesystem.cc.html#L171'>munge_resources_contents</a><span class="Delimiter">(</span>contents<span class="Delimiter">,</span> filename<span class="Delimiter">,</span> caller<span class="Delimiter">));</span>
<span id="L168" class="LineNr">168 </span>  <span class="Delimiter">}</span>
<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
<span id="L170" class="LineNr">170 </span>
<span id="L171" class="LineNr">171 </span>string <a href='089scenario_filesystem.cc.html#L171'>munge_resources_contents</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; data<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; filename<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L172" class="LineNr">172 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>data<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
<span id="L173" class="LineNr">173 </span>  istringstream in<span class="Delimiter">(</span>data<span class="Delimiter">);</span>
<span id="L174" class="LineNr">174 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
<span id="L175" class="LineNr">175 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L176" class="LineNr">176 </span>  ostringstream out<span class="Delimiter">;</span>
<span id="L177" class="LineNr">177 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L178" class="LineNr">178 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L179" class="LineNr">179 </span>    <a href='038new_text.cc.html#L229'>skip_whitespace</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
<span id="L180" class="LineNr">180 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L181" class="LineNr">181 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'|'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L182" class="LineNr">182 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must be delimited in '|'s\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</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="Delimiter">}</span>
<span id="L185" class="LineNr">185 </span>    in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// skip leading '|'</span>
<span id="L186" class="LineNr">186 </span>    string line<span class="Delimiter">;</span>
<span id="L187" class="LineNr">187 </span>    getline<span class="Delimiter">(</span>in<span class="Delimiter">,</span> line<span class="Delimiter">);</span>
<span id="L188" class="LineNr">188 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>line<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L189" class="LineNr">189 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == <span class="Constant">'|'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L190" class="LineNr">190 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L191" class="LineNr">191 </span>        ++i<span class="Delimiter">;</span>  <span class="Comment">// skip</span>
<span id="L192" class="LineNr">192 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>i == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>line<span class="Delimiter">))</span> <span class="Delimiter">{</span>
<span id="L193" class="LineNr">193 </span>          <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents can't end a line with '\\'\n&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L194" class="LineNr">194 </span>          <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L195" class="LineNr">195 </span>        <span class="Delimiter">}</span>
<span id="L196" class="LineNr">196 </span>      <span class="Delimiter">}</span>
<span id="L197" class="LineNr">197 </span>      out &lt;&lt; line<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
<span id="L198" class="LineNr">198 </span>    <span class="Delimiter">}</span>
<span id="L199" class="LineNr">199 </span>    <span class="Comment">// todo: some way to represent a file without a final newline</span>
<span id="L200" class="LineNr">200 </span>    out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
<span id="L201" class="LineNr">201 </span>  <span class="Delimiter">}</span>
<span id="L202" class="LineNr">202 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
<span id="L203" class="LineNr">203 </span><span class="Delimiter">}</span>
<span id="L204" class="LineNr">204 </span>
<span id="L205" class="LineNr">205 </span><span class="Normal">void</span> <a href='089scenario_filesystem.cc.html#L205'>construct_resources_object</a><span class="Delimiter">(</span><span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> string&gt;&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L206" class="LineNr">206 </span>  <span class="Normal">int</span> resources_data_address = allocate<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">)</span> * <span class="Comment">/*</span><span class="Comment">size of resource</span><span class="Comment">*/</span><span class="Constant">4</span> + <span class="Comment">/*</span><span class="Comment">array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L207" class="LineNr">207 </span>  <span class="Normal">int</span> curr = resources_data_address + <span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span> + <span class="Comment">/*</span><span class="Comment">skip array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L208" class="LineNr">208 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::const_iterator p = contents<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != contents<span class="Delimiter">.</span><a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L209" class="LineNr">209 </span>    ++curr<span class="Delimiter">;</span>  <span class="Comment">// skip alloc id of resource.name</span>
<span id="L210" class="LineNr">210 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">));</span>
<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file name &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L212" class="LineNr">212 </span>    ++curr<span class="Delimiter">;</span>
<span id="L213" class="LineNr">213 </span>    ++curr<span class="Delimiter">;</span>  <span class="Comment">// skip alloc id of resource.contents</span>
<span id="L214" class="LineNr">214 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">));</span>
<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file contents &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L216" class="LineNr">216 </span>    ++curr<span class="Delimiter">;</span>
<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
<span id="L218" class="LineNr">218 </span>  curr = resources_data_address + <span class="Comment">/*</span><span class="Comment">skip alloc id of resources.data</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L219" class="LineNr">219 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>  <span class="Comment">// array length</span>
<span id="L220" class="LineNr">220 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources size &quot;</span> &lt;&lt; get<span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L221" class="LineNr">221 </span>  <span class="Comment">// wrap the resources data in a 'resources' object</span>
<span id="L222" class="LineNr">222 </span>  <span class="Normal">int</span> resources_address = allocate<span class="Delimiter">(</span><a href='089scenario_filesystem.cc.html#L231'>size_of_resources</a><span class="Delimiter">());</span>
<span id="L223" class="LineNr">223 </span>  curr = resources_address+<span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">offset of 'data' element</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">skip alloc id of 'data' element</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
<span id="L224" class="LineNr">224 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> curr<span class="Delimiter">,</span> resources_data_address<span class="Delimiter">);</span>
<span id="L225" class="LineNr">225 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources data <a href='043space.cc.html#L101'>address</a> &quot;</span> &lt;&lt; resources_data_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L226" class="LineNr">226 </span>  <span class="Comment">// save in product</span>
<span id="L227" class="LineNr">227 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Memory</span><span class="Delimiter">,</span> RESOURCES+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> resources_address<span class="Delimiter">);</span>
<span id="L228" class="LineNr">228 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources <a href='043space.cc.html#L101'>address</a> &quot;</span> &lt;&lt; resources_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; RESOURCES &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
<span id="L230" class="LineNr">230 </span>
<span id="L231" class="LineNr">231 </span><span class="Normal">int</span> <a href='089scenario_filesystem.cc.html#L231'>size_of_resources</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L232" class="LineNr">232 </span>  <span class="Comment">// memoize result if already computed</span>
<span id="L233" class="LineNr">233 </span>  <span class="Normal">static</span> <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L234" class="LineNr">234 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L235" class="LineNr">235 </span>  assert<span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Type_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">));</span>
<span id="L236" class="LineNr">236 </span>  type_tree* type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;resources&quot;</span><span class="Delimiter">);</span>
<span id="L237" class="LineNr">237 </span>  result = size_of<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
<span id="L238" class="LineNr">238 </span>  <span class="Normal">delete</span> type<span class="Delimiter">;</span>
<span id="L239" class="LineNr">239 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->