<!--
    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.

-->
<!--
Author:  Andrey Yakushev
-->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html">
<TITLE>Generated DRLVM Source code documentation index</TITLE>
<body>
<h1>Doxygen API Reference for DRLVM Sources</h1>
<p>This is a list of links to generated  source code documentation bundles. To generate
the documentation, run the <code>ant</code> command in this directory.</P>

<ul>
  <li><a href="intf/html/index.html">DRLVM Interfaces</a></li>
  <li><a href="em/html/index.html">Execution Manager</a></li>
  <li><a href="gc_cc/html/index.html">Copying/Compacting Garbage Collector</a></li>
  <li><a href="gc_gen/html/index.html">Generational Garbage Collector</a></li>
  <li><a href="gcv4/html/index.html">Obsolescent Garbage Collector</a></li>
  <li><a href="interpreter/html/index.html">Interpreter</a></li>
  <li><a href="jitrino/html/index.html">Jitrino</a></li>
  <li><a href="apr_extension/html/index.html">Porting: APR Extensions</a></li>
  <li><a href="thread/html/index.html">Thread Manager</a></li>
  <li><a href="vmcore/html/index.html">VM Infrastructure</a></li>
  <li><a href="vmi/html/index.html">Class Library Support</a></li>
  <li><a href="component_manager/html/index.html">Component Manager</a></li>
  <li><a href="tests/html/index.html">DTLVM Tests</a></li>
  <li><a href="drlvm/html/index.html">All DRLVM</a></li>
</ul>
<h2>Other Useful DRLVM documents</h2>
<ul>
  <li><a href="http://harmony.apache.org/subcomponents/drlvm/index.html" target="_blank">DRLVM
  website documentation page</a> with links to all DRLVM documents</li>
  <li><a href="http://wiki.apache.org/harmony/DRLVM_Documentation_Quality" target="_blank">Status
  metrics for Doxygen API reference</a>, Wiki page with major metrics and links to
  more metric materials </li>
</ul>
</body>
