Fixed the web pages not scrolling by regenerating with doxygen.

Change-Id: Id1269f85ec2f522c8d4b0d05f84d050b42d70d60
Tested: on Android
parent f694bf09
/* The standard CSS for doxygen 1.8.5 */ /* The standard CSS for doxygen 1.8.7 */
body, table, div, p, dl { body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif; font: 400 14px/22px Roboto,sans-serif;
...@@ -56,10 +56,14 @@ div.multicol { ...@@ -56,10 +56,14 @@ div.multicol {
-webkit-column-count: 3; -webkit-column-count: 3;
} }
p.startli, p.startdd, p.starttd { p.startli, p.startdd {
margin-top: 2px; margin-top: 2px;
} }
p.starttd {
margin-top: 0px;
}
p.endli { p.endli {
margin-bottom: 0px; margin-bottom: 0px;
} }
...@@ -169,8 +173,8 @@ pre.fragment { ...@@ -169,8 +173,8 @@ pre.fragment {
} }
div.fragment { div.fragment {
padding: 0px; padding: 4px 6px;
margin: 0px; margin: 4px 8px 4px 2px;
background-color: #FBFCFD; background-color: #FBFCFD;
border: 1px solid #C4CFE5; border: 1px solid #C4CFE5;
} }
...@@ -666,12 +670,12 @@ span.mlabel { ...@@ -666,12 +670,12 @@ span.mlabel {
/* @end */ /* @end */
/* these are for tree view when not used as main index */ /* these are for tree view inside a (index) page */
div.directory { div.directory {
margin: 10px 0px; margin: 10px 0px;
border-top: 1px solid #A8B8D9; border-top: 1px solid #9CAFD4;
border-bottom: 1px solid #A8B8D9; border-bottom: 1px solid #9CAFD4;
width: 100%; width: 100%;
} }
...@@ -730,6 +734,80 @@ div.directory { ...@@ -730,6 +734,80 @@ div.directory {
color: #3D578C; color: #3D578C;
} }
.arrow {
color: #9CAFD4;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: pointer;
font-size: 80%;
display: inline-block;
width: 16px;
height: 22px;
}
.icon {
font-family: Arial, Helvetica;
font-weight: bold;
font-size: 12px;
height: 14px;
width: 16px;
display: inline-block;
background-color: #728DC1;
color: white;
text-align: center;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
}
.icona {
width: 24px;
height: 22px;
display: inline-block;
}
.iconfopen {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('ftv2folderopen.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
.iconfclosed {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('ftv2folderclosed.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
.icondoc {
width: 24px;
height: 18px;
margin-bottom: 4px;
background-image:url('ftv2doc.png');
background-position: 0px -4px;
background-repeat: repeat-y;
vertical-align:top;
display: inline-block;
}
table.directory {
font: 400 14px Roboto,sans-serif;
}
/* @end */
div.dynheader { div.dynheader {
margin-top: 8px; margin-top: 8px;
-webkit-touch-callout: none; -webkit-touch-callout: none;
...@@ -1065,6 +1143,11 @@ dl.section dd { ...@@ -1065,6 +1143,11 @@ dl.section dd {
text-align: center; text-align: center;
} }
.diagraph
{
text-align: center;
}
.caption .caption
{ {
font-weight: bold; font-weight: bold;
......
...@@ -24,19 +24,20 @@ function updateStripes() ...@@ -24,19 +24,20 @@ function updateStripes()
$('table.directory tr'). $('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even'); removeClass('even').filter(':visible:even').addClass('even');
} }
function toggleLevel(level) function toggleLevel(level)
{ {
$('table.directory tr').each(function(){ $('table.directory tr').each(function() {
var l = this.id.split('_').length-1; var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3)); var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3));
if (l<level+1) { if (l<level+1) {
i.attr('src','ftv2folderopen.png'); i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
a.attr('src','ftv2mnode.png'); a.html('&#9660;');
$(this).show(); $(this).show();
} else if (l==level+1) { } else if (l==level+1) {
i.attr('src','ftv2folderclosed.png'); i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
a.attr('src','ftv2pnode.png'); a.html('&#9658;');
$(this).show(); $(this).show();
} else { } else {
$(this).hide(); $(this).hide();
...@@ -47,34 +48,33 @@ function toggleLevel(level) ...@@ -47,34 +48,33 @@ function toggleLevel(level)
function toggleFolder(id) function toggleFolder(id)
{ {
//The clicked row // the clicked row
var currentRow = $('#row_'+id); var currentRow = $('#row_'+id);
var currentRowImages = currentRow.find("img");
//All rows after the clicked row // all rows after the clicked row
var rows = currentRow.nextAll("tr"); var rows = currentRow.nextAll("tr");
//Only match elements AFTER this one (can't hide elements before) var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
var childRows = rows.filter(function() {
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
return this.id.match(re);
});
//First row is visible we are HIDING // only match elements AFTER this one (can't hide elements before)
if (childRows.filter(':first').is(':visible')===true) { var childRows = rows.filter(function() { return this.id.match(re); });
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
rows.filter("[id^=row_"+id+"]").hide();
} else { //We are SHOWING
//All sub images
var childImages = childRows.find("img");
var childImg = childImages.filter("[id^=img]");
var childArr = childImages.filter("[id^=arr]");
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row // first row is visible we are HIDING
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row if (childRows.filter(':first').is(':visible')===true) {
childImg.attr('src','ftv2folderclosed.png'); //children closed // replace down arrow by right arrow for current row
childArr.attr('src','ftv2pnode.png'); //children closed var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
currentRowSpans.filter(".arrow").html('&#9658;');
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
var currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
currentRowSpans.filter(".arrow").html('&#9660;');
// replace down arrows by right arrows for child rows
var childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
childRowsSpans.filter(".arrow").html('&#9658;');
childRows.show(); //show all children childRows.show(); //show all children
} }
updateStripes(); updateStripes();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Main Page</title> <title>FlatBuffers: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Benchmarks</title> <title>FlatBuffers: Benchmarks</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Building</title> <title>FlatBuffers: Building</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -54,8 +54,7 @@ $(document).ready(function(){initNavTree('md__building.html','');}); ...@@ -54,8 +54,7 @@ $(document).ready(function(){initNavTree('md__building.html','');});
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
<div class="textblock"><p>There are project files for Visual Studio and Xcode that should allow you to build the compiler <code>flatc</code>, the samples and the tests out of the box.</p> <div class="textblock"><p>There are project files for Visual Studio and Xcode that should allow you to build the compiler <code>flatc</code>, the samples and the tests out of the box.</p>
<p>Alternatively, the distribution comes with a <code>cmake</code> file that should allow you to build project/make files for any platform. For details on <code>cmake</code>, see <a href="http://www.cmake.org">http://www.cmake.org</a>. In brief, depending on your platform, use one of e.g.: </p> <p>Alternatively, the distribution comes with a <code>cmake</code> file that should allow you to build project/make files for any platform. For details on <code>cmake</code>, see <a href="http://www.cmake.org">http://www.cmake.org</a>. In brief, depending on your platform, use one of e.g.: </p><pre class="fragment">cmake -G "Unix Makefiles"
<pre class="fragment">cmake -G "Unix Makefiles"
cmake -G "Visual Studio 10" cmake -G "Visual Studio 10"
cmake -G "Xcode" cmake -G "Xcode"
</pre><p>Then, build as normal for your platform. This should result in a <code>flatc</code> executable, essential for the next steps. Note that to use clang instead of gcc, you may need to set up your environment variables, e.g. <code>CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -G "Unix Makefiles"</code>.</p> </pre><p>Then, build as normal for your platform. This should result in a <code>flatc</code> executable, essential for the next steps. Note that to use clang instead of gcc, you may need to set up your environment variables, e.g. <code>CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -G "Unix Makefiles"</code>.</p>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Using the schema compiler</title> <title>FlatBuffers: Using the schema compiler</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -53,8 +53,7 @@ $(document).ready(function(){initNavTree('md__compiler.html','');}); ...@@ -53,8 +53,7 @@ $(document).ready(function(){initNavTree('md__compiler.html','');});
<div class="title">Using the schema compiler </div> </div> <div class="title">Using the schema compiler </div> </div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
<div class="textblock"><p>Usage: </p> <div class="textblock"><p>Usage: </p><pre class="fragment">flatc [ -c ] [ -j ] [ -b ] [ -t ] file1 file2 ..
<pre class="fragment">flatc [ -c ] [ -j ] [ -b ] [ -t ] file1 file2 ..
</pre><p>The files are read and parsed in order, and can contain either schemas or data (see below). Later files can make use of definitions in earlier files. Depending on the flags passed, additional files may be generated for each file processed:</p> </pre><p>The files are read and parsed in order, and can contain either schemas or data (see below). Later files can make use of definitions in earlier files. Depending on the flags passed, additional files may be generated for each file processed:</p>
<ul> <ul>
<li><code>-c</code> : Generate a C++ header for all definitions in this file (as <code>filename_generated.h</code>). Skips data.</li> <li><code>-c</code> : Generate a C++ header for all definitions in this file (as <code>filename_generated.h</code>). Skips data.</li>
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Formal Grammar of the schema language</title> <title>FlatBuffers: Formal Grammar of the schema language</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: FlatBuffer Internals</title> <title>FlatBuffers: FlatBuffer Internals</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -76,15 +76,13 @@ $(document).ready(function(){initNavTree('md__internals.html','');}); ...@@ -76,15 +76,13 @@ $(document).ready(function(){initNavTree('md__internals.html','');});
<h3>Construction</h3> <h3>Construction</h3>
<p>The current implementation constructs these buffers backwards, since that significantly reduces the amount of bookkeeping and simplifies the construction API.</p> <p>The current implementation constructs these buffers backwards, since that significantly reduces the amount of bookkeeping and simplifies the construction API.</p>
<h3>Code example</h3> <h3>Code example</h3>
<p>Here's an example of the code that gets generated for the <code>samples/monster.fbs</code>. What follows is the entire file, broken up by comments: </p> <p>Here's an example of the code that gets generated for the <code>samples/monster.fbs</code>. What follows is the entire file, broken up by comments: </p><pre class="fragment">// automatically generated, do not modify
<pre class="fragment">// automatically generated, do not modify
#include "flatbuffers/flatbuffers.h" #include "flatbuffers/flatbuffers.h"
namespace MyGame { namespace MyGame {
namespace Sample { namespace Sample {
</pre><p>Nested namespace support. </p> </pre><p>Nested namespace support. </p><pre class="fragment">enum {
<pre class="fragment">enum {
Color_Red = 0, Color_Red = 0,
Color_Green = 1, Color_Green = 1,
Color_Blue = 2, Color_Blue = 2,
...@@ -96,8 +94,7 @@ inline const char **EnumNamesColor() { ...@@ -96,8 +94,7 @@ inline const char **EnumNamesColor() {
} }
inline const char *EnumNameColor(int e) { return EnumNamesColor()[e]; } inline const char *EnumNameColor(int e) { return EnumNamesColor()[e]; }
</pre><p>Enums and convenient reverse lookup. </p> </pre><p>Enums and convenient reverse lookup. </p><pre class="fragment">enum {
<pre class="fragment">enum {
Any_NONE = 0, Any_NONE = 0,
Any_Monster = 1, Any_Monster = 1,
}; };
...@@ -108,11 +105,9 @@ inline const char **EnumNamesAny() { ...@@ -108,11 +105,9 @@ inline const char **EnumNamesAny() {
} }
inline const char *EnumNameAny(int e) { return EnumNamesAny()[e]; } inline const char *EnumNameAny(int e) { return EnumNamesAny()[e]; }
</pre><p>Unions share a lot with enums. </p> </pre><p>Unions share a lot with enums. </p><pre class="fragment">struct Vec3;
<pre class="fragment">struct Vec3;
struct Monster; struct Monster;
</pre><p>Predeclare all datatypes since there may be circular references. </p> </pre><p>Predeclare all datatypes since there may be circular references. </p><pre class="fragment">MANUALLY_ALIGNED_STRUCT(4) Vec3 {
<pre class="fragment">MANUALLY_ALIGNED_STRUCT(4) Vec3 {
private: private:
float x_; float x_;
float y_; float y_;
...@@ -127,8 +122,7 @@ struct Monster; ...@@ -127,8 +122,7 @@ struct Monster;
float z() const { return flatbuffers::EndianScalar(z_); } float z() const { return flatbuffers::EndianScalar(z_); }
}; };
STRUCT_END(Vec3, 12); STRUCT_END(Vec3, 12);
</pre><p>These ugly macros do a couple of things: they turn off any padding the compiler might normally do, since we add padding manually (though none in this example), and they enforce alignment chosen by FlatBuffers. This ensures the layout of this struct will look the same regardless of compiler and platform. Note that the fields are private: this is because these store little endian scalars regardless of platform (since this is part of the serialized data). <code>EndianScalar</code> then converts back and forth, which is a no-op on all current mobile and desktop platforms, and a single machine instruction on the few remaining big endian platforms. </p> </pre><p>These ugly macros do a couple of things: they turn off any padding the compiler might normally do, since we add padding manually (though none in this example), and they enforce alignment chosen by FlatBuffers. This ensures the layout of this struct will look the same regardless of compiler and platform. Note that the fields are private: this is because these store little endian scalars regardless of platform (since this is part of the serialized data). <code>EndianScalar</code> then converts back and forth, which is a no-op on all current mobile and desktop platforms, and a single machine instruction on the few remaining big endian platforms. </p><pre class="fragment">struct Monster : private flatbuffers::Table {
<pre class="fragment">struct Monster : private flatbuffers::Table {
const Vec3 *pos() const { return GetStruct&lt;const Vec3 *&gt;(4); } const Vec3 *pos() const { return GetStruct&lt;const Vec3 *&gt;(4); }
int16_t mana() const { return GetField&lt;int16_t&gt;(6, 150); } int16_t mana() const { return GetField&lt;int16_t&gt;(6, 150); }
int16_t hp() const { return GetField&lt;int16_t&gt;(8, 100); } int16_t hp() const { return GetField&lt;int16_t&gt;(8, 100); }
...@@ -136,8 +130,7 @@ STRUCT_END(Vec3, 12); ...@@ -136,8 +130,7 @@ STRUCT_END(Vec3, 12);
const flatbuffers::Vector&lt;uint8_t&gt; *inventory() const { return GetPointer&lt;const flatbuffers::Vector&lt;uint8_t&gt; *&gt;(14); } const flatbuffers::Vector&lt;uint8_t&gt; *inventory() const { return GetPointer&lt;const flatbuffers::Vector&lt;uint8_t&gt; *&gt;(14); }
int8_t color() const { return GetField&lt;int8_t&gt;(16, 2); } int8_t color() const { return GetField&lt;int8_t&gt;(16, 2); }
}; };
</pre><p>Tables are a bit more complicated. A table accessor struct is used to point at the serialized data for a table, which always starts with an offset to its vtable. It derives from <code>Table</code>, which contains the <code>GetField</code> helper functions. GetField takes a vtable offset, and a default value. It will look in the vtable at that offset. If the offset is out of bounds (data from an older version) or the vtable entry is 0, the field is not present and the default is returned. Otherwise, it uses the entry as an offset into the table to locate the field. </p> </pre><p>Tables are a bit more complicated. A table accessor struct is used to point at the serialized data for a table, which always starts with an offset to its vtable. It derives from <code>Table</code>, which contains the <code>GetField</code> helper functions. GetField takes a vtable offset, and a default value. It will look in the vtable at that offset. If the offset is out of bounds (data from an older version) or the vtable entry is 0, the field is not present and the default is returned. Otherwise, it uses the entry as an offset into the table to locate the field. </p><pre class="fragment">struct MonsterBuilder {
<pre class="fragment">struct MonsterBuilder {
flatbuffers::FlatBufferBuilder &amp;fbb_; flatbuffers::FlatBufferBuilder &amp;fbb_;
flatbuffers::uoffset_t start_; flatbuffers::uoffset_t start_;
void add_pos(const Vec3 *pos) { fbb_.AddStruct(4, pos); } void add_pos(const Vec3 *pos) { fbb_.AddStruct(4, pos); }
...@@ -149,8 +142,7 @@ STRUCT_END(Vec3, 12); ...@@ -149,8 +142,7 @@ STRUCT_END(Vec3, 12);
MonsterBuilder(flatbuffers::FlatBufferBuilder &amp;_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); } MonsterBuilder(flatbuffers::FlatBufferBuilder &amp;_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
flatbuffers::Offset&lt;Monster&gt; Finish() { return flatbuffers::Offset&lt;Monster&gt;(fbb_.EndTable(start_, 7)); } flatbuffers::Offset&lt;Monster&gt; Finish() { return flatbuffers::Offset&lt;Monster&gt;(fbb_.EndTable(start_, 7)); }
}; };
</pre><p><code>MonsterBuilder</code> is the base helper struct to construct a table using a <code>FlatBufferBuilder</code>. You can add the fields in any order, and the <code>Finish</code> call will ensure the correct vtable gets generated. </p> </pre><p><code>MonsterBuilder</code> is the base helper struct to construct a table using a <code>FlatBufferBuilder</code>. You can add the fields in any order, and the <code>Finish</code> call will ensure the correct vtable gets generated. </p><pre class="fragment">inline flatbuffers::Offset&lt;Monster&gt; CreateMonster(flatbuffers::FlatBufferBuilder &amp;_fbb, const Vec3 *pos, int16_t mana, int16_t hp, flatbuffers::Offset&lt;flatbuffers::String&gt; name, flatbuffers::Offset&lt;flatbuffers::Vector&lt;uint8_t&gt;&gt; inventory, int8_t color) {
<pre class="fragment">inline flatbuffers::Offset&lt;Monster&gt; CreateMonster(flatbuffers::FlatBufferBuilder &amp;_fbb, const Vec3 *pos, int16_t mana, int16_t hp, flatbuffers::Offset&lt;flatbuffers::String&gt; name, flatbuffers::Offset&lt;flatbuffers::Vector&lt;uint8_t&gt;&gt; inventory, int8_t color) {
MonsterBuilder builder_(_fbb); MonsterBuilder builder_(_fbb);
builder_.add_inventory(inventory); builder_.add_inventory(inventory);
builder_.add_name(name); builder_.add_name(name);
...@@ -160,10 +152,8 @@ STRUCT_END(Vec3, 12); ...@@ -160,10 +152,8 @@ STRUCT_END(Vec3, 12);
builder_.add_color(color); builder_.add_color(color);
return builder_.Finish(); return builder_.Finish();
} }
</pre><p><code>CreateMonster</code> is a convenience function that calls all functions in <code>MonsterBuilder</code> above for you. Note that if you pass values which are defaults as arguments, it will not actually construct that field, so you can probably use this function instead of the builder class in almost all cases. </p> </pre><p><code>CreateMonster</code> is a convenience function that calls all functions in <code>MonsterBuilder</code> above for you. Note that if you pass values which are defaults as arguments, it will not actually construct that field, so you can probably use this function instead of the builder class in almost all cases. </p><pre class="fragment">inline const Monster *GetMonster(const void *buf) { return flatbuffers::GetRoot&lt;Monster&gt;(buf); }
<pre class="fragment">inline const Monster *GetMonster(const void *buf) { return flatbuffers::GetRoot&lt;Monster&gt;(buf); } </pre><p>This function is only generated for the root table type, to be able to start traversing a FlatBuffer from a raw buffer pointer. </p><pre class="fragment">}; // namespace MyGame
</pre><p>This function is only generated for the root table type, to be able to start traversing a FlatBuffer from a raw buffer pointer. </p>
<pre class="fragment">}; // namespace MyGame
}; // namespace Sample</pre> </div></div><!-- contents --> }; // namespace Sample</pre> </div></div><!-- contents -->
</div><!-- doc-content --> </div><!-- doc-content -->
<!-- Google Analytics --> <!-- Google Analytics -->
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Use in Java</title> <title>FlatBuffers: Use in Java</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -54,23 +54,17 @@ $(document).ready(function(){initNavTree('md__java_usage.html','');}); ...@@ -54,23 +54,17 @@ $(document).ready(function(){initNavTree('md__java_usage.html','');});
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
<div class="textblock"><p>There's experimental support for reading FlatBuffers in Java. Generate code for Java with the <code>-j</code> option to <code>flatc</code>.</p> <div class="textblock"><p>There's experimental support for reading FlatBuffers in Java. Generate code for Java with the <code>-j</code> option to <code>flatc</code>.</p>
<p>See <code>javaTest.java</code> for an example. Essentially, you read a FlatBuffer binary file into a <code>byte[]</code>, which you then turn into a <code>ByteBuffer</code>, which you pass to the <code>getRootAsMonster</code> function: </p> <p>See <code>javaTest.java</code> for an example. Essentially, you read a FlatBuffer binary file into a <code>byte[]</code>, which you then turn into a <code>ByteBuffer</code>, which you pass to the <code>getRootAsMonster</code> function: </p><pre class="fragment">ByteBuffer bb = ByteBuffer.wrap(data);
<pre class="fragment">ByteBuffer bb = ByteBuffer.wrap(data);
Monster monster = Monster.getRootAsMonster(bb); Monster monster = Monster.getRootAsMonster(bb);
</pre><p>Now you can access values much like C++: </p> </pre><p>Now you can access values much like C++: </p><pre class="fragment">short hp = monster.hp();
<pre class="fragment">short hp = monster.hp();
Vec3 pos = monster.pos(); Vec3 pos = monster.pos();
</pre><p>Note that whenever you access a new object like in the <code>pos</code> example above, a new temporary accessor object gets created. If your code is very performance sensitive (you iterate through a lot of objects), there's a second <code>pos()</code> method to which you can pass a <code>Vec3</code> object you've already created. This allows you to reuse it across many calls and reduce the amount of object allocation (and thus garbage collection) your program does.</p> </pre><p>Note that whenever you access a new object like in the <code>pos</code> example above, a new temporary accessor object gets created. If your code is very performance sensitive (you iterate through a lot of objects), there's a second <code>pos()</code> method to which you can pass a <code>Vec3</code> object you've already created. This allows you to reuse it across many calls and reduce the amount of object allocation (and thus garbage collection) your program does.</p>
<p>Sadly the string accessors currently always create a new string when accessed, since FlatBuffer's UTF-8 strings can't be read in-place by Java.</p> <p>Sadly the string accessors currently always create a new string when accessed, since FlatBuffer's UTF-8 strings can't be read in-place by Java.</p>
<p>Vector access is also a bit different from C++: you pass an extra index to the vector field accessor. Then a second method with the same name suffixed by <code>_length</code> let's you know the number of elements you can access: </p> <p>Vector access is also a bit different from C++: you pass an extra index to the vector field accessor. Then a second method with the same name suffixed by <code>_length</code> let's you know the number of elements you can access: </p><pre class="fragment">for (int i = 0; i &lt; monster.inventory_length(); i++)
<pre class="fragment">for (int i = 0; i &lt; monster.inventory_length(); i++)
monster.inventory(i); // do something here monster.inventory(i); // do something here
</pre><p>You can also construct these buffers in Java using the static methods found in the generated code, and the FlatBufferBuilder class: </p> </pre><p>You can also construct these buffers in Java using the static methods found in the generated code, and the FlatBufferBuilder class: </p><pre class="fragment">FlatBufferBuilder fbb = new FlatBufferBuilder();
<pre class="fragment">FlatBufferBuilder fbb = new FlatBufferBuilder(); </pre><p>Create strings: </p><pre class="fragment">int str = fbb.createString("MyMonster");
</pre><p>Create strings: </p> </pre><p>Create a table with a struct contained therein: </p><pre class="fragment">Monster.startMonster(fbb);
<pre class="fragment">int str = fbb.createString("MyMonster");
</pre><p>Create a table with a struct contained therein: </p>
<pre class="fragment">Monster.startMonster(fbb);
Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, (byte)4, (short)5, (byte)6)); Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, (byte)4, (short)5, (byte)6));
Monster.addHp(fbb, (short)80); Monster.addHp(fbb, (short)80);
Monster.addName(fbb, str); Monster.addName(fbb, str);
...@@ -80,8 +74,7 @@ Monster.addTest(fbb, mon2); ...@@ -80,8 +74,7 @@ Monster.addTest(fbb, mon2);
Monster.addTest4(fbb, test4s); Monster.addTest4(fbb, test4s);
int mon = Monster.endMonster(fbb); int mon = Monster.endMonster(fbb);
</pre><p>As you can see, the Java code for tables does not use a convenient <code>createMonster</code> call like the C++ code. This is to create the buffer without using temporary object allocation (since the <code>Vec3</code> is an inline component of <code>Monster</code>, it has to be created right where it is added, whereas the name and the inventory are not inline). Structs do have convenient methods that even have arguments for nested structs.</p> </pre><p>As you can see, the Java code for tables does not use a convenient <code>createMonster</code> call like the C++ code. This is to create the buffer without using temporary object allocation (since the <code>Vec3</code> is an inline component of <code>Monster</code>, it has to be created right where it is added, whereas the name and the inventory are not inline). Structs do have convenient methods that even have arguments for nested structs.</p>
<p>Vectors also use this start/end pattern to allow vectors of both scalar types and structs: </p> <p>Vectors also use this start/end pattern to allow vectors of both scalar types and structs: </p><pre class="fragment">Monster.startInventoryVector(fbb, 5);
<pre class="fragment">Monster.startInventoryVector(fbb, 5);
for (byte i = 4; i &gt;=0; i--) fbb.addByte(i); for (byte i = 4; i &gt;=0; i--) fbb.addByte(i);
int inv = fbb.endVector(); int inv = fbb.endVector();
</pre><p>You can use the generated method <code>startInventoryVector</code> to conveniently call <code>startVector</code> with the right element size. You pass the number of elements you want to write. You write the elements backwards since the buffer is being constructed back to front.</p> </pre><p>You can use the generated method <code>startInventoryVector</code> to conveniently call <code>startVector</code> with the right element size. You pass the number of elements you want to write. You write the elements backwards since the buffer is being constructed back to front.</p>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Writing a schema</title> <title>FlatBuffers: Writing a schema</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -53,8 +53,7 @@ $(document).ready(function(){initNavTree('md__schemas.html','');}); ...@@ -53,8 +53,7 @@ $(document).ready(function(){initNavTree('md__schemas.html','');});
<div class="title">Writing a schema </div> </div> <div class="title">Writing a schema </div> </div>
</div><!--header--> </div><!--header-->
<div class="contents"> <div class="contents">
<div class="textblock"><p>The syntax of the schema language (aka IDL, Interface Definition Language) should look quite familiar to users of any of the C family of languages, and also to users of other IDLs. Let's look at an example first: </p> <div class="textblock"><p>The syntax of the schema language (aka IDL, Interface Definition Language) should look quite familiar to users of any of the C family of languages, and also to users of other IDLs. Let's look at an example first: </p><pre class="fragment">// example IDL file
<pre class="fragment">// example IDL file
namespace MyGame; namespace MyGame;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: FlatBuffers white paper</title> <title>FlatBuffers: FlatBuffers white paper</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
......
...@@ -18,8 +18,6 @@ var NAVTREEINDEX = ...@@ -18,8 +18,6 @@ var NAVTREEINDEX =
"index.html" "index.html"
]; ];
var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';
var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';
var navTreeSubIndices = new Array(); var navTreeSubIndices = new Array();
...@@ -44,6 +42,21 @@ function stripPath2(uri) ...@@ -44,6 +42,21 @@ function stripPath2(uri)
return m ? uri.substring(i-6) : s; return m ? uri.substring(i-6) : s;
} }
function hashValue()
{
return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
}
function hashUrl()
{
return '#'+hashValue();
}
function pathName()
{
return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
}
function localStorageSupported() function localStorageSupported()
{ {
try { try {
...@@ -66,7 +79,7 @@ function deleteLink() ...@@ -66,7 +79,7 @@ function deleteLink()
{ {
if (localStorageSupported()) { if (localStorageSupported()) {
window.localStorage.setItem('navpath',''); window.localStorage.setItem('navpath','');
} }
} }
function cachedLink() function cachedLink()
...@@ -128,7 +141,7 @@ function createIndent(o,domNode,node,level) ...@@ -128,7 +141,7 @@ function createIndent(o,domNode,node,level)
span.style.display = 'inline-block'; span.style.display = 'inline-block';
span.style.width = 16*(level+1)+'px'; span.style.width = 16*(level+1)+'px';
span.style.height = '22px'; span.style.height = '22px';
span.innerHTML = '&nbsp;'; span.innerHTML = '&#160;';
domNode.appendChild(span); domNode.appendChild(span);
} }
} }
...@@ -138,11 +151,13 @@ var animationInProgress = false; ...@@ -138,11 +151,13 @@ var animationInProgress = false;
function gotoAnchor(anchor,aname,updateLocation) function gotoAnchor(anchor,aname,updateLocation)
{ {
var pos, docContent = $('#doc-content'); var pos, docContent = $('#doc-content');
if (anchor.parent().attr('class')=='memItemLeft' || var ancParent = $(anchor.parent());
anchor.parent().attr('class')=='fieldtype' || if (ancParent.hasClass('memItemLeft') ||
anchor.parent().is(':header')) ancParent.hasClass('fieldname') ||
ancParent.hasClass('fieldtype') ||
ancParent.is(':header'))
{ {
pos = anchor.parent().position().top; pos = ancParent.position().top;
} else if (anchor.position()) { } else if (anchor.position()) {
pos = anchor.position().top; pos = anchor.position().top;
} }
...@@ -200,7 +215,7 @@ function newNode(o, po, text, link, childrenData, lastNode) ...@@ -200,7 +215,7 @@ function newNode(o, po, text, link, childrenData, lastNode)
a.className = stripPath(link.replace('#',':')); a.className = stripPath(link.replace('#',':'));
if (link.indexOf('#')!=-1) { if (link.indexOf('#')!=-1) {
var aname = '#'+link.split('#')[1]; var aname = '#'+link.split('#')[1];
var srcPage = stripPath($(location).attr('pathname')); var srcPage = stripPath(pathName());
var targetPage = stripPath(link.split('#')[0]); var targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : "javascript:void(0)"; a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.onclick = function(){ a.onclick = function(){
...@@ -294,14 +309,13 @@ function glowEffect(n,duration) ...@@ -294,14 +309,13 @@ function glowEffect(n,duration)
function highlightAnchor() function highlightAnchor()
{ {
var aname = $(location).attr('hash'); var aname = hashUrl();
var anchor = $(aname); var anchor = $(aname);
if (anchor.parent().attr('class')=='memItemLeft'){ if (anchor.parent().attr('class')=='memItemLeft'){
var rows = $('.memberdecls tr[class$="'+ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
window.location.hash.substring(1)+'"]');
glowEffect(rows.children(),300); // member without details glowEffect(rows.children(),300); // member without details
} else if (anchor.parents().slice(2).prop('tagName')=='TR') { } else if (anchor.parent().attr('class')=='fieldname'){
glowEffect(anchor.parents('div.memitem'),1000); // enum value glowEffect(anchor.parent().parent(),1000); // enum value
} else if (anchor.parent().attr('class')=='fieldtype'){ } else if (anchor.parent().attr('class')=='fieldtype'){
glowEffect(anchor.parent().parent(),1000); // struct field glowEffect(anchor.parent().parent(),1000); // struct field
} else if (anchor.parent().is(":header")) { } else if (anchor.parent().is(":header")) {
...@@ -316,7 +330,7 @@ function selectAndHighlight(hash,n) ...@@ -316,7 +330,7 @@ function selectAndHighlight(hash,n)
{ {
var a; var a;
if (hash) { if (hash) {
var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); var link=stripPath(pathName())+':'+hash.substring(1);
a=$('.item a[class$="'+link+'"]'); a=$('.item a[class$="'+link+'"]');
} }
if (a && a.length) { if (a && a.length) {
...@@ -427,14 +441,13 @@ function navTo(o,root,hash,relpath) ...@@ -427,14 +441,13 @@ function navTo(o,root,hash,relpath)
if (link) { if (link) {
var parts = link.split('#'); var parts = link.split('#');
root = parts[0]; root = parts[0];
if (parts.length>1) hash = '#'+parts[1]; if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
else hash=''; else hash='';
} }
if (hash.match(/^#l\d+$/)) { if (hash.match(/^#l\d+$/)) {
var anchor=$('a[name='+hash.substring(1)+']'); var anchor=$('a[name='+hash.substring(1)+']');
glowEffect(anchor.parent(),1000); // line number glowEffect(anchor.parent(),1000); // line number
hash=''; // strip line number anchors hash=''; // strip line number anchors
//root=root.replace(/_source\./,'.'); // source link to doc link
} }
var url=root+hash; var url=root+hash;
var i=-1; var i=-1;
...@@ -468,7 +481,7 @@ function toggleSyncButton(relpath) ...@@ -468,7 +481,7 @@ function toggleSyncButton(relpath)
if (navSync.hasClass('sync')) { if (navSync.hasClass('sync')) {
navSync.removeClass('sync'); navSync.removeClass('sync');
showSyncOff(navSync,relpath); showSyncOff(navSync,relpath);
storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash')); storeLink(stripPath2(pathName())+hashUrl());
} else { } else {
navSync.addClass('sync'); navSync.addClass('sync');
showSyncOn(navSync,relpath); showSyncOn(navSync,relpath);
...@@ -508,7 +521,7 @@ function initNavTree(toroot,relpath) ...@@ -508,7 +521,7 @@ function initNavTree(toroot,relpath)
} }
$(window).load(function(){ $(window).load(function(){
navTo(o,toroot,window.location.hash,relpath); navTo(o,toroot,hashUrl(),relpath);
showRoot(); showRoot();
}); });
...@@ -516,21 +529,20 @@ function initNavTree(toroot,relpath) ...@@ -516,21 +529,20 @@ function initNavTree(toroot,relpath)
if (window.location.hash && window.location.hash.length>1){ if (window.location.hash && window.location.hash.length>1){
var a; var a;
if ($(location).attr('hash')){ if ($(location).attr('hash')){
var clslink=stripPath($(location).attr('pathname'))+':'+ var clslink=stripPath(pathName())+':'+hashValue();
$(location).attr('hash').substring(1); a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
a=$('.item a[class$="'+clslink+'"]');
} }
if (a==null || !$(a).parent().parent().hasClass('selected')){ if (a==null || !$(a).parent().parent().hasClass('selected')){
$('.item').removeClass('selected'); $('.item').removeClass('selected');
$('.item').removeAttr('id'); $('.item').removeAttr('id');
} }
var link=stripPath2($(location).attr('pathname')); var link=stripPath2(pathName());
navTo(o,link,$(location).attr('hash'),relpath); navTo(o,link,hashUrl(),relpath);
} else if (!animationInProgress) { } else if (!animationInProgress) {
$('#doc-content').scrollTop(0); $('#doc-content').scrollTop(0);
$('.item').removeClass('selected'); $('.item').removeClass('selected');
$('.item').removeAttr('id'); $('.item').removeAttr('id');
navTo(o,toroot,window.location.hash,relpath); navTo(o,toroot,hashUrl(),relpath);
} }
}) })
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/> <meta name="generator" content="Doxygen 1.8.7"/>
<title>FlatBuffers: Related Pages</title> <title>FlatBuffers: Related Pages</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.js"></script>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</table> </table>
</div> </div>
<!-- end header part --> <!-- end header part -->
<!-- Generated by Doxygen 1.8.5 --> <!-- Generated by Doxygen 1.8.7 -->
</div><!-- top --> </div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree"> <div id="nav-tree">
...@@ -55,15 +55,15 @@ $(document).ready(function(){initNavTree('pages.html','');}); ...@@ -55,15 +55,15 @@ $(document).ready(function(){initNavTree('pages.html','');});
<div class="contents"> <div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory"> <div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table class="directory"> <table class="directory">
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__building.html" target="_self">Building</a></td><td class="desc"></td></tr> <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__building.html" target="_self">Building</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__compiler.html" target="_self">Using the schema compiler</a></td><td class="desc"></td></tr> <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__compiler.html" target="_self">Using the schema compiler</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__schemas.html" target="_self">Writing a schema</a></td><td class="desc"></td></tr> <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__schemas.html" target="_self">Writing a schema</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__cpp_usage.html" target="_self">Use in C++</a></td><td class="desc"></td></tr> <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__cpp_usage.html" target="_self">Use in C++</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__java_usage.html" target="_self">Use in Java</a></td><td class="desc"></td></tr> <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__java_usage.html" target="_self">Use in Java</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__benchmarks.html" target="_self">Benchmarks</a></td><td class="desc"></td></tr> <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__benchmarks.html" target="_self">Benchmarks</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__white_paper.html" target="_self">FlatBuffers white paper</a></td><td class="desc"></td></tr> <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__white_paper.html" target="_self">FlatBuffers white paper</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="md__internals.html" target="_self">FlatBuffer Internals</a></td><td class="desc"></td></tr> <tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__internals.html" target="_self">FlatBuffer Internals</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="md__grammar.html" target="_self">Formal Grammar of the schema language</a></td><td class="desc"></td></tr> <tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__grammar.html" target="_self">Formal Grammar of the schema language</a></td><td class="desc"></td></tr>
</table> </table>
</div><!-- directory --> </div><!-- directory -->
</div><!-- contents --> </div><!-- contents -->
......
...@@ -77,15 +77,19 @@ function initResizable() ...@@ -77,15 +77,19 @@ function initResizable()
var _preventDefault = function(evt) { evt.preventDefault(); }; var _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(document).bind('touchmove',function(e){ $(document).bind('touchmove',function(e){
try { var device = navigator.userAgent.toLowerCase();
var target = e.target; var ios = device.match(/(iphone|ipod|ipad)/);
while (target) { if (ios) {
if ($(target).css('-webkit-overflow-scrolling')=='touch') return; try {
target = target.parentNode; var target = e.target;
while (target) {
if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
target = target.parentNode;
}
e.preventDefault();
} catch(err) {
e.preventDefault();
} }
e.preventDefault();
} catch(err) {
e.preventDefault();
} }
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment