---
layout: default
---
<div class="sidenav-top">
  <!-- <a href="/"><img src="{{ "/assets/img/gem5ColorLong.gif" | prepend: site.baseurl }}" height="80"></a> -->
  <div class="search">
    <form action="/search" method="get">
      <!-- <label for="search-box"><i class="fa fa-search"></i></label> -->
      <input type="text" name="query">
      <button type="submit" name="submit"><i class="fa fa-search"></i></button>
    </form>
  </div>
</div>
<div class="sidenav">
  <!-- Pull navigation from _data/documentation.yml -->
  {% for doc in site.data.documentation.docs %}
    {% if doc.title == page.doc %}
    {% for item in doc.items %}
      <a class="item" {% if item.url %}href="{{ item.url | prepend: site.baseurl }}"{% else %}data-toggle="collapse" href="#{{ item.id }}"{% endif %} role="button" aria-expanded="false" aria-controls="collapseExample">
        {{ item.title }}
      </a>
      <div class="collapse {% if page.parent == item.id %}show{% endif %}" id="{{ item.id }}">
        {% for subitem in item.subitems %}
          <a class="subitem {% if subitem.page == page.title %}active{% endif %}" href="{{ subitem.url | prepend: site.baseurl }}">{{ subitem.page }}</a>
        {% endfor %}
      </div>
    {% endfor %}
    {% endif %}
  {% endfor %}
</div>


<div class="container" id="doc-container">
  <div class="edit"><a href="{{ site.sourceurl }}{{ page.path }}">Edit this page</a></div>
  {% if page.author %}<b>authors:</b> {{ page.author }}<br>{% endif %}
  {% if page.date %}<b>last edited:</b> {{ page.date }}<br>{% endif %}

  <br>
  {{ content }}
  <br>

  <!-- RETRIVE PREVIOUS PAGE LINK -->
  {% for item in site.data.documentation.docs %}
    {% if page.parent == item.id %}
      {% assign previous = "none" %}
      {% if item.subitems %}
        {% for subitem in item.subitems %}
          {% if page.title == subitem.page %}
            {% break %}
          {% else %}
            {% assign previous = subitem.url %}
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}
  {% endfor %}

  <!-- RETRIEVE NEXT PAGE LINK -->
  {% for item in site.data.documentation.docs %}
    {% if page.parent == item.id %}
      {% assign next = "none" %}
      {% if item.subitems %}
        {% for subitem in item.subitems reversed %}
          {% if page.title == subitem.page %}
            {% break %}
          {% else %}
            {% assign next = subitem.url %}
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}
  {% endfor %}


  <div class="navbuttons">
    {% if previous != "none" %}
      <a href="{{ previous | prepend: site.baseurl }}"><button type="button" class="btn btn-outline-primary">PREVIOUS</button></a>
    {% endif %}

    {% if next != "none" %}
      <a href="{{ next | prepend: site.baseurl }}"><button type="button" class="btn btn-outline-primary">NEXT</button></a>
    {% endif %}
  </div>
</div>
