/usr/share/gluegen2/src/java/com/jogamp/gluegen/package.html is in libgluegen2-build-java 2.0-rc3-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>GlueGen Code Generator</title>
</head>
<body>
<h2><i>JogAmp GlueGen</i> Code Generator</h2>
<h4>GlueGen Data Type Mapping</h4>
Gluegen has build-in types (terminal symbols) for:<br/>
<br/>
<table border="1">
<tr><th>type</th> <th>java bits</th> <th colspan="2">native bits</th> <th>type</th> <th>signed</th> <th>origin</th></tr>
<tr><th></th> <th></th> <th>x32</th> <th>x64</th> <th></th> <th></th> <th></th></tr>
<tr><td>void</td> <td> 0</td> <td> 0</td> <td> 0</td> <td>void</td> <td>void</td> <td>ANSI-C</td></tr>
<tr><td>char</td> <td> 8</td> <td> 8</td> <td> 8</td> <td>integer</td><td>any</td> <td>ANSI-C</td></tr>
<tr><td>short</td> <td>16</td> <td>16</td> <td>16</td> <td>integer</td><td>any</td> <td>ANSI-C</td></tr>
<tr><td>int</td> <td>32</td> <td>32</td> <td>32</td> <td>integer</td><td>any</td> <td>ANSI-C</td></tr>
<tr><td>long</td> <td>64</td> <td>32</td> <td><b>32<sup>1</sup></b></td> <td>integer</td><td>any</td> <td>ANSI-C - Windows</td></tr>
<tr><td>long</td> <td>64</td> <td>32</td> <td><b>64</b></td> <td>integer</td><td>any</td> <td>ANSI-C - Unix</td></tr>
<tr><td>float</td> <td>32</td> <td>32</td> <td>32</td> <td>float</td> <td>signed</td> <td>ANSI-C</td></tr>
<tr><td>double</td> <td>64</td> <td>64</td> <td>64</td> <td>double</td> <td>signed</td> <td>ANSI-C</td></tr>
<tr><td>__int32</td> <td>32</td> <td>32</td> <td>32</td> <td>integer</td><td>any</td> <td>windows</td></tr>
<tr><td>__int64</td> <td>64</td> <td>64</td> <td>64</td> <td>integer</td><td>any</td> <td>windows</td></tr>
<tr><td>int8_t</td> <td> 8</td> <td> 8</td> <td> 8</td> <td>integer</td><td>signed</td> <td>stdint.h</td></tr>
<tr><td>uint8_t</td> <td> 8</td> <td> 8</td> <td> 8</td> <td>integer</td><td>unsigned</td> <td>stdint.h</td></tr>
<tr><td>int16_t</td> <td>16</td> <td>16</td> <td>16</td> <td>integer</td><td>signed</td> <td>stdint.h</td></tr>
<tr><td>uint16_t</td> <td>16</td> <td>16</td> <td>16</td> <td>integer</td><td>unsigned</td> <td>stdint.h</td></tr>
<tr><td>int32_t</td> <td>32</td> <td>32</td> <td>32</td> <td>integer</td><td>signed</td> <td>stdint.h</td></tr>
<tr><td>uint32_t</td> <td>32</td> <td>32</td> <td>32</td> <td>integer</td><td>unsigned</td> <td>stdint.h</td></tr>
<tr><td>int64_t</td> <td>64</td> <td>64</td> <td>64</td> <td>integer</td><td>signed</td> <td>stdint.h</td></tr>
<tr><td>uint64_t</td> <td>64</td> <td>64</td> <td>64</td> <td>integer</td><td>unsigned</td> <td>stdint.h</td></tr>
<tr><td>intptr_t</td> <td>64</td> <td>32</td> <td>64</td> <td>integer</td><td>signed</td> <td>stdint.h</td></tr>
<tr><td>uintptr_t</td> <td>64</td> <td>32</td> <td>64</td> <td>integer</td><td>unsigned</td> <td>stdint.h</td></tr>
<tr><td>ptrdiff_t</td> <td>64</td> <td>32</td> <td>64</td> <td>integer</td><td>signed</td> <td>stddef.h</td></tr>
<tr><td>size_t</td> <td>64</td> <td>32</td> <td>64</td> <td>integer</td><td>unsigned</td> <td>stddef.h</td></tr>
<tr><td>wchar_t</td> <td>32</td> <td>32</td> <td>32</td> <td>integer</td><td>signed</td> <td>stddef.h</td></tr>
</table>
<p>
<b>Warning:</b> Try to avoid unspecified bit sized types, especially <b>long</b>, since it differs on Unix and Windows!<br/>
<b>Note 1:</b> Type <b>long</b> will result in broken code on Windows, since we don't differentiate the OS and it's bit size is ambiguous.
</p>
<h4>GlueGen Internal Alignment for Compound Data</h4>
In general, depending on CPU and it's configuration (OS), alignment is set up
for each type (char, short, int, long, ..).
<p>Compounds (structures) are aligned naturally, i.e. their inner components are aligned<br>
and are itself aligned to it's largest element.</p>
See:<br>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Data_structure_alignment">Wikipedia Data Structure Alignment</a></li>
<li><a href="http://en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding">Wikipedia Data Structure Alignment - Padding</a></li>
<li><a href="http://www.viva64.com/en/l/0021/">Viva64 Data Alignment</a></li>
<li><a href="http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/64bitPorting/transition/transition.html#//apple_ref/doc/uid/TP40001064-CH207-SW1">Apple: Darwin 64bit Porting - Data Type Size & Alignment</a></li>
</ul>
<h5>Simple alignment arithmetic</h5>
<blockquote>remainder = offset % alignment</blockquote>
since alignment is a multiple of 2 <code>-> x % 2n == x & (2n - 1)</code><br>
<blockquote>remainder = offset & ( alignment - 1 )</blockquote>
<blockquote>
padding = (remainder > 0) ? alignment - remainder : 0 ;<br>
aligned_offset = offset + padding ;
</blockquote>
<h5>Type Size & Alignment for x86, x86_64, armv7l-32bit-eabi and Window(mingw/mingw64)</h5>
Runtime query is implemented as follows:
<pre>
typedef struct {
char fill; // nibble one byte
// padding to align s1: padding_0
type_t s1; //
} test_struct_type_t;
padding_0 = sizeof(test_struct_type_t) - sizeof(type_t) - sizeof(char) ;
alignmentOf(type_t) = sizeof(test_struct_type_t) - sizeof(type_t) ;
</pre>
<table border="1">
<tr><th>type</th> <th colspan="2">32 bits</th><th colspan="2">64 bits</th></tr>
<tr><th></th> <th>size</th><th>alignment</th><th>size</th><th>alignment</th></tr>
<tr><td>char</td> <td> 1</td> <td> 1</td> <td> 1</td> <td> 1</td></tr>
<tr><td>short</td> <td> 2</td> <td> 2</td> <td> 2</td> <td> 2</td></tr>
<tr><td>int</td> <td> 4</td> <td> 4</td> <td> 4</td> <td> 4</td></tr>
<tr><td>float</td> <td> 4</td> <td> 4</td> <td> 4</td> <td> 4</td></tr>
<tr><td>long</td> <td> 4</td> <td> 4</td> <td> 8<sup>†</sup>,4<sup>∗</sup></td> <td> 8<sup>†</sup>,4<sup>∗</sup></td></tr>
<tr><td>pointer</td> <td> 4</td> <td> 4</td> <td> 8</td> <td> 8</td></tr>
<tr><td>long long</td> <td> 8</td> <td>4<sup>†</sup>,8<sup>∗</sup><sup>+</sup></td> <td> 8</td> <td> 8</td></tr>
<tr><td>double</td> <td> 8</td> <td>4<sup>†</sup>,8<sup>∗</sup><sup>+</sup></td> <td> 8</td> <td> 8</td></tr>
<tr><td>long double</td><td>12<sup>†</sup><sup>∗</sup>,8<sup>+</sup></td> <td>4<sup>†</sup><sup>∗</sup>,8<sup>+</sup></td> <td> 16</td> <td>16</td></tr>
</table><br>
<sup>†</sup> Linux, Darwin<br>
<sup>+</sup>armv7l-eabi<br>
<sup>∗</sup> Windows<br>
</P>
<h4>GlueGen Platform Header Files</h4>
GlueGen provides convenient platform headers,<br/>
which can be included in your C header files for native compilation and GlueGen code generation.<br/>
<br/>
Example:<br/>
<pre>
#include <gluegen_stdint.h>
#include <gluegen_stddef.h>
uint64_t test64;
size_t size1;
ptrdiff_t ptr1;
</pre>
<br/>
To compile this file you have to include the following folder to your compilers system includes, ie <code>-I</code>:<br/>
<pre>
gluegen/make/stub_includes/platform
</pre>
<br>
To generate code for this file you have to include the following folder to your GlueGen <code>includeRefid</code> element:<br>
<pre>
gluegen/make/stub_includes/gluegen
</pre>
<h4>GlueGen Pre-Defined Macros</h4>
To identity a GlueGen code generation run, GlueGen defines the following macros:<br/>
<pre>
#define __GLUEGEN__ 2
</pre>
<br>
<br>
</body>
</html>
|