| <!DOCTYPE HTML> |
| <html lang="en-US"> |
| <head> |
| <meta http-equiv="CACHE-CONTROL" content="NO-CACHE"> |
| <meta charset="UTF-8"> |
| <title>Code Usage</title> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="generator" content="Jekyll v2.4.0"> |
| <link rel="stylesheet" href="/css/font-awesome.min.css"> |
| <link rel="stylesheet" href="/css/screen.css"> |
| <link rel="icon" type="image/x-icon" href="/favicon.ico"> |
| <script src="/js/jquery-3.2.1.min.js"></script> |
| <!--[if lt IE 9]> |
| <script src="/js/html5shiv.min.js"></script> |
| <script src="/js/respond.min.js"></script> |
| <![endif]--> |
| <script src="/js/screen.js"></script> |
| <script type="text/javascript" src="/assets/javascripts/bundle.js" charset="utf-8"></script> |
| </head> |
| |
| |
| <body> |
| <header role="banner"> |
| <nav class="mobile-nav show-on-mobiles"> |
| <ul> |
| <li class=""> |
| <a href="/">Home</a> |
| </li> |
| <li class="current"> |
| <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a> |
| </li> |
| </li> |
| <li class=""> |
| <a href="/downloads/">Downloads</a> |
| </li> |
| <li class=""> |
| <a href="/talks/">Talks</a> |
| </li> |
| <li class=""> |
| <a href="/news/">News</a> |
| </li> |
| <li class=""> |
| <a href="/develop/">Develop</a> |
| </li> |
| <li class=""> |
| <a href="/help/">Help</a> |
| </li> |
| </ul> |
| |
| </nav> |
| <div class="grid"> |
| <div class="unit one-third center-on-mobiles"> |
| <h1> |
| <a href="/"> |
| <span class="sr-only">Apache Mnemonic</span> |
| <img src="/img/mnemonic_logo_v2.png" width="289" alt="Mnemonic Logo" class="logo"> |
| </a> |
| <a href="https://www.apache.org/events/current-event.html"> |
| <img src="https://www.apache.org/events/current-event-234x60.png"/> |
| </a> |
| </h1> |
| </div> |
| <nav class="main-nav unit two-thirds hide-on-mobiles"> |
| <ul> |
| <li class=""> |
| <a href="/">Home</a> |
| </li> |
| <li class="current"> |
| <a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a> |
| </li> |
| </li> |
| <li class=""> |
| <a href="/downloads/">Downloads</a> |
| </li> |
| <li class=""> |
| <a href="/talks/">Talks</a> |
| </li> |
| <li class=""> |
| <a href="/news/">News</a> |
| </li> |
| <li class=""> |
| <a href="/develop/">Develop</a> |
| </li> |
| <li class=""> |
| <a href="/help/">Help</a> |
| </li> |
| </ul> |
| |
| </nav> |
| </div> |
| <!-- Return to Top --> |
| <a href="#top" id="return-to-top"><i class="fa fa-chevron-up"></i></a> |
| </header> |
| |
| |
| <section class="docs"> |
| <div class="grid"> |
| |
| <div class="docs-nav-mobile unit whole show-on-mobiles"> |
| <select onchange="if (this.value) window.location.href=this.value"> |
| <option value="">Navigate the docs…</option> |
| |
| <optgroup label="Overview"> |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/arch.html">Architecture</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/features.html">Features</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/modes.html">Mnemonic Modes</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/memsrvcmp.html">Durable Memory Service Comparison</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/integration.html">Integration with other projects</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/domusecases.html">DOM Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/dcmusecases.html">DCM Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/msusecases.html">MS Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/sparkusecases.html">Apache Spark Integration Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/gcdata.html">Java GC data</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/security.html">Security</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </optgroup> |
| |
| <optgroup label="Usage"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/getstarted.html">Get Started</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/devsetup.html">Development Setup</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/submitchanges.html">Submit Changes</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/build.html">Project Build</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/runtest.html">Run tests</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <option value="/docs/docker.html">Docker usage</option> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </optgroup> |
| |
| </select> |
| </div> |
| |
| |
| <div class="unit four-fifths"> |
| <article> |
| <h1>Code Usage</h1> |
| |
| <h3 id="how-to-use-it-">How to use it ?</h3> |
| |
| <h4 id="define-a-non-volatile-class">Define a Non-Volatile class:</h4> |
| |
| <p>```java |
| /** |
| * a durable class should be abstract, implement Durable interface and marked with @DurableEntity annotation |
| */ |
| @DurableEntity |
| public abstract class Person<e> implements Durable, Comparable<Person<e>> { |
| E element; // Generic Type</e></e></p> |
| |
| <pre><code> /** |
| * callback for this durable object creation |
| */ |
| @Override |
| public void initializeAfterCreate() { |
| System.out.println("Initializing After Created"); |
| } |
| |
| /** |
| * callback for this durable object recovery |
| */ |
| @Override |
| public void initializeAfterRestore() { |
| System.out.println("Initializing After Restored"); |
| } |
| |
| /** |
| * setup generic info manually to avoid performance penalty |
| */ |
| @Override |
| public void setupGenericInfo(EntityFactoryProxy[] efproxies, GenericField.GType[] gftypes) { |
| |
| } |
| |
| @Test |
| public void testOutput() throws RetrieveDurableEntityError { |
| System.out.printf("Person %s, Age: %d ( %s ) \n", getName(), getAge(), |
| null == getMother()? "No Recorded Mother" : "Has Recorded Mother"); |
| } |
| |
| public int compareTo(Person<E> anotherPerson) { |
| int ret = 0; |
| if (0 == ret) ret = getAge().compareTo(anotherPerson.getAge()); |
| if (0 == ret) ret = getName().compareTo(anotherPerson.getName()); |
| return ret; |
| } |
| |
| /** |
| * Getters and Setters for non-volatile fields marked with @DurableGetter and @DurableSetter |
| */ |
| @DurableGetter(Id = 1L) |
| abstract public Short getAge(); |
| @DurableSetter |
| abstract public void setAge(Short age); |
| |
| @DurableGetter(Id = 2L) |
| abstract public String getName() throws RetrieveDurableEntityError; |
| @DurableSetter |
| abstract public void setName(String name, boolean destroy) throws OutOfPersistentMemory, RetrieveDurableEntityError; |
| |
| @DurableGetter(Id = 3L) |
| abstract public Person<E> getMother() throws RetrieveDurableEntityError; |
| @DurableSetter |
| abstract public void setMother(Person<E> mother, boolean destroy) throws RetrieveDurableEntityError; |
| |
| @DurableGetter(Id = 4L) |
| abstract public Person<E> getFather() throws RetrieveDurableEntityError; |
| @DurableSetter |
| abstract public void setFather(Person<E> mother, boolean destroy) throws RetrieveDurableEntityError; } |
| </code></pre> |
| |
| <p>```</p> |
| |
| <h4 id="use-a-non-volatile-class">Use a non-volatile class:</h4> |
| |
| <h5 id="setup-an-allocator-for-non-volatile-object-graphs">Setup an allocator for non-volatile object graphs.</h5> |
| |
| <p>```java |
| // create an allocator instance |
| NonVolatileMemAllocator act = new NonVolatileMemAllocator(1024 * 1024 * 8, “./pobj_person.dat”, true);</p> |
| |
| <pre><code> // fetch handler store capacity from this non-volatile storage managed by this allocator |
| KEYCAPACITY = act.handlerCapacity(); |
| .... |
| // close it after use |
| act.close(); ``` |
| </code></pre> |
| |
| <h5 id="generate-structured-non-volatile-objects">Generate structured non-volatile objects.</h5> |
| <p>```java |
| // create a new non-volatile person object from this specific allocator |
| person = PersonFactory.create(act);</p> |
| |
| <pre><code> // set attributes |
| person.setAge((short)rand.nextInt(50)); |
| person.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true); |
| |
| // keep this person on non-volatile handler store |
| act.setHandler(keyidx, person.getHandler()); |
| |
| for (int deep = 0; deep < rand.nextInt(100); ++deep) { |
| |
| // create another person as mother |
| mother = PersonFactory.create(act); |
| mother.setAge((short)(50 + rand.nextInt(50))); |
| mother.setName(String.format("Name: [%s]", UUID.randomUUID().toString()), true); |
| |
| // set the person's mother |
| person.setMother(mother, true); |
| |
| person = mother; |
| } |
| </code></pre> |
| |
| <p>```</p> |
| |
| <h5 id="use-the-non-volatile-objects">Use the non-volatile objects</h5> |
| |
| <p>```java |
| for (long i = 0; i < KEYCAPACITY; ++i) {</p> |
| |
| <pre><code> System.out.printf("----------Key %d--------------\n", i); |
| // iterate non-volatile handlers from handler store of this specific allocator |
| val = act.getHandler(i); |
| if (0L == val) { |
| break; |
| } |
| |
| // restore person objects from this specific allocator |
| Person<Integer> person = PersonFactory.restore(act, val, true); |
| |
| while (null != person) { |
| person.testOutput(); |
| // iterate all mother's ancestors |
| person = person.getMother(); |
| } |
| } |
| </code></pre> |
| |
| <p>```</p> |
| |
| <h5 id="perform-the-durable-native-computing-eg-printing-wo-packingunpacking-massive-object-graphs">Perform the durable native computing (e.g. printing) w/o packing/unpacking massive object graphs</h5> |
| |
| <p><code>java |
| // fetch print service |
| GeneralComputingService gcsvr = Utils.getGeneralComputingService("print"); |
| // instantiate a value info for a value matrix |
| ValueInfo vinfo = new ValueInfo(); |
| // instantiate a object stack |
| List<long[][]> objstack = new ArrayList<long[][]>(); |
| // fill up with all durable object info in order |
| objstack.add(firstnv.getNativeFieldInfo()); |
| objstack.add(person.getNativeFieldInfo()); |
| // configure the Id stack for each level of durable objects |
| long[][] fidinfostack = {{2L, 1L}, {0L, 1L}}; |
| // configure the handler of a value matrix |
| vinfo.handler = handler; |
| // set translate table from handler's allocator |
| vinfo.transtable = m_act.getTranslateTable(); |
| // specify the durable type of value |
| vinfo.dtype = DurableType.SHORT; |
| // generate frames for this value matri from both stacks |
| vinfo.frames = Utils.genNativeParamForm(objstack, fidinfostack); |
| // form an array of value infos |
| ValueInfo[] vinfos = {vinfo}; |
| // perform the print operation |
| gcsvr.perform(vinfos); |
| </code></p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| <div class="unit one-fifth hide-on-mobiles"> |
| <aside> |
| |
| <h4>Overview</h4> |
| |
| |
| <ul> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/arch.html">Architecture</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/features.html">Features</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/modes.html">Mnemonic Modes</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/memsrvcmp.html">Durable Memory Service Comparison</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/integration.html">Integration with other projects</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/domusecases.html">DOM Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/dcmusecases.html">DCM Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/msusecases.html">MS Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/sparkusecases.html">Apache Spark Integration Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/gcdata.html">Java GC data</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/security.html">Security</a></li> |
| |
| |
| |
| </ul> |
| |
| |
| <h4>Usage</h4> |
| |
| |
| <ul> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/getstarted.html">Get Started</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/devsetup.html">Development Setup</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/submitchanges.html">Submit Changes</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/build.html">Project Build</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/runtest.html">Run tests</a></li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class=""><a href="/docs/docker.html">Docker usage</a></li> |
| |
| |
| |
| </ul> |
| |
| |
| </aside> |
| </div> |
| |
| |
| <div class="clear"></div> |
| |
| </div> |
| </section> |
| |
| |
| <footer role="contentinfo"> |
| <p><div align="center">Apache Mnemonic, Mnemonic, Apache, and the Mnemonic logo are trademarks of The Apache Software Foundation.</div> |
| <div align="center"> Copyright © 2021 <a href="https://www.apache.org/">The Apache Software Foundation</a></div></p> |
| </footer> |
| |
| <script> |
| var anchorForId = function (id) { |
| var anchor = document.createElement("a"); |
| anchor.className = "header-link"; |
| anchor.href = "#" + id; |
| anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>"; |
| anchor.title = "Permalink"; |
| return anchor; |
| }; |
| |
| var linkifyAnchors = function (level, containingElement) { |
| var headers = containingElement.getElementsByTagName("h" + level); |
| for (var h = 0; h < headers.length; h++) { |
| var header = headers[h]; |
| |
| if (typeof header.id !== "undefined" && header.id !== "") { |
| header.appendChild(anchorForId(header.id)); |
| } |
| } |
| }; |
| |
| document.onreadystatechange = function () { |
| if (this.readyState === "complete") { |
| var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0]; |
| if (!contentBlock) { |
| return; |
| } |
| for (var level = 1; level <= 6; level++) { |
| linkifyAnchors(level, contentBlock); |
| } |
| } |
| }; |
| </script> |
| |
| |
| </body> |
| </html> |