<?xml version="1.0"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  -->

<?xml-stylesheet type="text/xsl" href="./xdoc.xsl"?>
<document url="index.html">
  <properties>
    <title>The Commons RNG User Guide - Table of Contents</title>
  </properties>

  <body>
    <section name="Table of Contents" href="toc">

      <ul>

        <li>
          <a href="rng.html#a1._Purpose">
          1. Purpose of the library</a>
        </li>
        <li>
          <a href="rng.html#a2._Usage_overview">
          2. Usage overview (for users)</a>
        </li>
        <li>
          <a href="rng.html#a3._Library_layout">
          3. Library layout (for developers)</a>
        </li>
        <li>
          <a href="rng.html#a4._Performance">
          4. Performance</a>
        </li>
        <li>
          <a href="rng.html#a5._Quality">
          5. Quality</a>
        </li>
        <li>
          <a href="rng.html#a6._Dependencies">
          6. Dependencies</a>
        </li>
      </ul>

    </section>

  </body>

</document>
