koffi 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog.md +8 -2
- package/build/qemu/2.0.1/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/2.0.1/koffi_win32_x64.tar.gz +0 -0
- package/doc/benchmarks.md +2 -2
- package/doc/changes.md +12 -12
- package/doc/conf.py +14 -1
- package/doc/dist/doctrees/benchmarks.doctree +0 -0
- package/doc/dist/doctrees/changes.doctree +0 -0
- package/doc/dist/doctrees/environment.pickle +0 -0
- package/doc/dist/doctrees/functions.doctree +0 -0
- package/doc/dist/doctrees/index.doctree +0 -0
- package/doc/dist/doctrees/types.doctree +0 -0
- package/doc/dist/html/.buildinfo +1 -1
- package/doc/dist/html/_sources/benchmarks.md.txt +2 -2
- package/doc/dist/html/_sources/changes.md.txt +12 -12
- package/doc/dist/html/_sources/functions.md.txt +6 -6
- package/doc/dist/html/_sources/types.md.txt +10 -2
- package/doc/dist/html/benchmarks.html +6 -2
- package/doc/dist/html/changes.html +18 -14
- package/doc/dist/html/contribute.html +4 -0
- package/doc/dist/html/functions.html +10 -6
- package/doc/dist/html/genindex.html +4 -0
- package/doc/dist/html/index.html +8 -4
- package/doc/dist/html/memory.html +4 -0
- package/doc/dist/html/objects.inv +0 -0
- package/doc/dist/html/platforms.html +5 -1
- package/doc/dist/html/search.html +4 -0
- package/doc/dist/html/searchindex.js +1 -1
- package/doc/dist/html/start.html +4 -0
- package/doc/dist/html/types.html +20 -4
- package/doc/functions.md +6 -6
- package/doc/templates/badges.html +5 -0
- package/doc/types.md +11 -3
- package/package.json +1 -1
- package/src/abi_arm32.cc +1 -1
- package/src/abi_arm64.cc +1 -1
- package/src/abi_riscv64.cc +1 -1
- package/src/abi_x64_sysv.cc +1 -1
- package/src/abi_x64_win.cc +1 -1
- package/src/abi_x86.cc +1 -1
- package/src/ffi.cc +3 -3
- package/test/sqlite.js +5 -5
- package/test/sync.js +3 -1
- package/build/qemu/2.0.0/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/2.0.0/koffi_win32_x64.tar.gz +0 -0
package/doc/dist/html/index.html
CHANGED
|
@@ -172,6 +172,10 @@
|
|
|
172
172
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
173
173
|
</ul>
|
|
174
174
|
|
|
175
|
+
</div>
|
|
176
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
177
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
178
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
175
179
|
</div>
|
|
176
180
|
</div>
|
|
177
181
|
|
|
@@ -204,7 +208,7 @@
|
|
|
204
208
|
</div>
|
|
205
209
|
<article role="main">
|
|
206
210
|
<section id="koffi-version">
|
|
207
|
-
<h1>Koffi
|
|
211
|
+
<h1>Koffi 2.0.0<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
|
|
208
212
|
<section id="overview">
|
|
209
213
|
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading">#</a></h2>
|
|
210
214
|
<p>Koffi is a <strong>fast and easy-to-use C FFI module for Node.js</strong>, featuring:</p>
|
|
@@ -237,8 +241,8 @@
|
|
|
237
241
|
<li class="toctree-l2"><a class="reference internal" href="types#struct-types">Struct types</a></li>
|
|
238
242
|
<li class="toctree-l2"><a class="reference internal" href="types#pointer-types">Pointer types</a></li>
|
|
239
243
|
<li class="toctree-l2"><a class="reference internal" href="types#fixed-size-c-arrays">Fixed-size C arrays</a></li>
|
|
240
|
-
<li class="toctree-l2"><a class="reference internal" href="types#
|
|
241
|
-
<li class="toctree-l2"><a class="reference internal" href="types#
|
|
244
|
+
<li class="toctree-l2"><a class="reference internal" href="types#disposable-types">Disposable types</a></li>
|
|
245
|
+
<li class="toctree-l2"><a class="reference internal" href="types#utility-functions">Utility functions</a></li>
|
|
242
246
|
</ul>
|
|
243
247
|
</li>
|
|
244
248
|
<li class="toctree-l1"><a class="reference internal" href="functions">Functions</a><ul>
|
|
@@ -331,7 +335,7 @@
|
|
|
331
335
|
<div class="toc-tree-container">
|
|
332
336
|
<div class="toc-tree">
|
|
333
337
|
<ul>
|
|
334
|
-
<li><a class="reference internal" href="#">Koffi
|
|
338
|
+
<li><a class="reference internal" href="#">Koffi 2.0.0</a><ul>
|
|
335
339
|
<li><a class="reference internal" href="#overview">Overview</a></li>
|
|
336
340
|
<li><a class="reference internal" href="#table-of-contents">Table of contents</a></li>
|
|
337
341
|
<li><a class="reference internal" href="#license">License</a></li>
|
|
@@ -172,6 +172,10 @@
|
|
|
172
172
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
173
173
|
</ul>
|
|
174
174
|
|
|
175
|
+
</div>
|
|
176
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
177
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
178
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
175
179
|
</div>
|
|
176
180
|
</div>
|
|
177
181
|
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head><meta charset="utf-8"/>
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
|
-
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi
|
|
6
|
+
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi 2.0.0" href="index" />
|
|
7
7
|
|
|
8
8
|
<meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/>
|
|
9
9
|
<title>Requirements - Koffi</title>
|
|
@@ -172,6 +172,10 @@
|
|
|
172
172
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
173
173
|
</ul>
|
|
174
174
|
|
|
175
|
+
</div>
|
|
176
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
177
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
178
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
175
179
|
</div>
|
|
176
180
|
</div>
|
|
177
181
|
|
|
@@ -169,6 +169,10 @@
|
|
|
169
169
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
170
170
|
</ul>
|
|
171
171
|
|
|
172
|
+
</div>
|
|
173
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
174
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
175
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
172
176
|
</div>
|
|
173
177
|
</div>
|
|
174
178
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Search.setIndex({"docnames": ["benchmarks", "changes", "contribute", "functions", "index", "memory", "platforms", "start", "types"], "filenames": ["benchmarks.md", "changes.md", "contribute.md", "functions.md", "index.rst", "memory.md", "platforms.md", "start.md", "types.md"], "titles": ["Benchmarks", "Changelog", "Contributing", "Functions", "Koffi 1.3.7", "Memory usage", "Requirements", "Quick start", "Data types"], "terms": {"here": [0, 2, 3, 4, 8], "quick": [0, 4], "execut": [0, 3], "time": [0, 2, 3, 5, 7], "koffi": [0, 2, 3, 5, 6, 8], "call": [0, 1, 4, 5, 6, 7, 8], "three": [0, 7, 8], "where": [0, 3, 8], "compar": 0, "theoret": 0, "ideal": 0, "ffi": [0, 1, 3, 4, 7], "implement": [0, 3, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": [0, 3], "n": [0, 2, 4, 6, 7, 8], "api": [0, 1, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8], "first": [0, 1, 2, 3, 7, 8], "base": [0, 3, 4, 8], "second": [0, 3, 7, 8], "third": 0, "These": [0, 2, 3, 8], "ar": [0, 1, 2, 3, 5, 6, 7, 8], "detail": 0, "explain": 0, "below": [0, 1, 2, 3, 7, 8], "node": [0, 1, 2, 3, 4, 7], "napi": 0, "present": 0, "were": [0, 1, 3, 8], "measur": 0, "my": [0, 2], "machin": [0, 2], "intel": 0, "core": 0, "i5": 0, "4460": 0, "thi": [0, 1, 2, 3, 4, 7, 8], "test": [0, 1, 4, 6], "around": [0, 5, 8], "repeat": 0, "simpl": [0, 2, 3, 8], "standard": [0, 3, 8], "c": [0, 1, 2, 4, 5, 6, 7], "function": [0, 1, 2, 4, 7, 8], "ha": [0, 2, 3, 8], "one": [0, 2, 3, 5, 7, 8], "refer": [0, 4, 8], "through": [0, 1, 3, 8], "an": [0, 1, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1, 3], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 4, 5, 8], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "offici": [0, 2, 6], "iter": [0, 8], "rel": 0, "perform": [0, 4], "rand_napi": 0, "644": 0, "ns": 0, "x1": 0, "00": 0, "ref": 0, "rand_koffi": 0, "950": 0, "x0": 0, "68": 0, "48": 0, "rand_node_ffi": 0, "30350": 0, "02": 0, "4613": 0, "becaus": [0, 2, 3, 8], "pretti": [0, 2], "small": [0, 3, 4], "clearli": 0, "visibl": 0, "similar": [0, 3], "which": [0, 1, 2, 3, 6, 7], "take": [0, 3, 8], "string": [0, 1, 3, 5, 7], "paramet": [0, 1, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3, 5], "convers": [0, 1, 4, 8], "slow": [0, 2], "heavi": 0, "atoi_napi": 0, "1104": 0, "atoi_koffi": 0, "1778": 0, "62": 0, "61": 0, "atoi_node_ffi": 0, "125300": 0, "009": 0, "11250": 0, "cpu": 0, "imag": 0, "draw": 0, "much": [0, 2], "heavier": 0, "than": [0, 1, 5], "thu": [0, 3], "reduc": [0, 1], "In": [0, 1, 3, 8], "baselin": 0, "full": [0, 2, 8], "version": [0, 1, 3, 4, 6, 8], "nativ": [0, 3], "wrapper": [0, 2], "raylib_cc": 0, "215": 0, "7": [0, 7], "\u00b5s": 0, "20": 0, "17": [0, 6], "raylib_node_raylib": 0, "258": 0, "9": 0, "raylib_koffi": 0, "311": 0, "6": [0, 3, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 8], "28": 0, "259": 0, "965": 0, "1248": 0, "77": 0, "29": 0, "41500": 0, "4203": 0, "1393": 0, "2246": 0, "157550": 0, "11210": 0, "without": [0, 2, 6], "ani": [0, 2, 3, 4, 5, 8], "211": 0, "8": [0, 2, 3, 4, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 3, 4, 5, 6, 8], "23": 0, "334": 0, "pleas": [0, 5], "note": [0, 2, 5, 8], "order": [0, 1, 2, 3], "get": [0, 1, 2, 3, 5, 7, 8], "fair": 0, "number": [0, 1, 3, 5, 8], "wa": [0, 1], "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 1, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 1, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": [0, 3], "clangcl": 0, "open": [0, 1, 3, 8], "consol": [0, 1, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "all": [0, 1, 3, 6, 8], "made": [0, 1, 3, 5, 8], "built": 0, "binari": [0, 1, 2, 6], "prefer": [0, 2, 3], "onc": [0, 2, 3, 5, 7, 8], "everyth": [0, 2], "readi": 0, "main": [1, 3], "fix": [1, 2, 4], "prebuild": 1, "compat": [1, 2, 3], "electron": 1, "window": [1, 3, 4, 6], "x64": 1, "chang": [1, 2, 3, 5, 8], "prevent": [1, 8], "callback": [4, 5, 6, 8], "reus": 1, "beyond": 1, "add": [1, 2, 8], "bti": 1, "support": [1, 2, 3, 4, 8], "aaarch64": 1, "platform": [1, 3, 4, 5, 8], "except": [1, 2], "other": [1, 3, 8], "harmon": 1, "few": [1, 8], "error": [1, 3, 8], "messag": [1, 7], "crash": [1, 3], "when": [1, 2, 3, 5, 8], "insid": [1, 3], "struct": [1, 2, 4, 5, 7], "null": [1, 3, 7, 8], "record": 1, "member": [1, 3, 8], "intptr_t": [1, 8], "uintptr_t": [1, 8], "primit": [1, 3, 4], "type": [2, 3, 4, 7], "str": [1, 3, 7, 8], "str16": [1, 3, 7, 8], "alias": [1, 4], "string16": [1, 8], "variou": [1, 2], "document": [1, 8], "improv": [1, 2], "instal": [1, 2, 4, 6], "15": [1, 6, 8], "system": [1, 2, 7], "bug": [1, 4], "detect": [1, 3], "incompat": 1, "linux": [1, 2, 4, 6], "memori": [1, 3, 4, 8], "leak": [1, 3], "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "configur": [1, 2], "maximum": [1, 3, 5], "max_async_cal": [1, 5], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 5], "size": [1, 2, 4, 5], "possibl": [1, 2, 8], "openbsd": [1, 6], "i386": 1, "void": [1, 3, 7, 8], "misconvers": 1, "sign": [1, 8], "integ": [1, 3, 8], "return": [1, 3, 8], "valu": [1, 4, 7, 8], "unsign": [1, 3, 7, 8], "empti": 1, "signatur": 1, "disabl": [1, 2], "unsaf": 1, "optim": [1, 2], "14": [1, 6, 8], "mode": [1, 3], "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "debian": [1, 2], "prebuilt": [1, 2, 6], "rebuild": 1, "happen": [1, 3, 8], "fail": [1, 2, 3, 8], "load": [1, 3, 7, 8], "major": 1, "expand": 1, "move": 1, "http": [1, 2, 4], "dev": [1, 2], "arrai": [1, 2, 4], "typedarrai": [1, 8], "pointer": [1, 3, 4], "argument": [1, 3, 7, 8], "input": [1, 3, 8], "output": [1, 7, 8], "mix": [1, 2, 8], "convert": [1, 3, 8], "instead": [1, 2, 8], "hint": [1, 8], "char": [1, 3, 7, 8], "char16": [1, 8], "char16_t": [1, 8], "definit": [1, 4, 8], "long": [1, 8], "llp64": [1, 8], "model": 1, "restrict": [1, 2, 3], "automat": [1, 3, 8], "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 3, 6, 8], "arm32": [1, 6], "risc": [1, 6], "v": [1, 6], "forbid": 1, "duplic": 1, "name": [1, 2, 3, 8], "new": [1, 3, 5, 8], "featur": [1, 4], "arm64": [1, 2, 6], "now": [1, 2, 3, 7, 8], "A": [1, 3, 6, 8], "maco": [1, 2, 6], "m1": 1, "includ": [1, 2, 3, 6, 8], "entri": 1, "sinc": [1, 4], "can": [1, 2, 3, 4, 5, 6, 7, 8], "cdecl": [1, 3, 6], "stdcall": [1, 3, 6, 7], "64": [1, 3, 5, 6, 8], "lp64d": [1, 6], "lp64": [1, 6, 8], "untest": [1, 6], "expos": [1, 8], "set": [1, 2, 4], "usag": [1, 4], "synchron": [1, 3, 5], "asynchron": [1, 5], "transpar": [1, 8], "between": [1, 3], "buffer": [1, 8], "tent": 1, "excess": 1, "align": [1, 8], "x86": [1, 3, 6, 7], "potenti": [1, 8], "problem": 1, "big": [1, 3, 5, 8], "int64_t": [1, 7, 8], "uint64_t": [1, 8], "layout": 1, "push": [1, 8], "pop": 1, "issu": [1, 3], "incomplet": 1, "buggi": 1, "hfa": [1, 2], "caus": [1, 3], "miss": [1, 2], "map_stack": 1, "flag": 1, "non": [1, 3, 8], "sens": 1, "intern": [1, 8], "fals": [1, 8], "normal": [1, 5, 8], "make": [1, 2, 3], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 3, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": [2, 4], "monorepo": 2, "contain": [2, 8], "multipl": [1, 2], "project": 2, "idea": 2, "github": [2, 4], "com": [2, 4], "koromix": [2, 4], "provid": [2, 3, 8], "packag": [1, 2, 6], "npm": [2, 6, 7], "archiv": 2, "so": [2, 3, 7, 8], "most": [2, 3, 8], "case": [2, 3, 8], "should": 2, "If": [2, 3, 8], "you": [1, 2, 3, 4, 6, 7, 8], "want": [2, 7], "hack": 2, "specif": [1, 2, 5], "instruct": [2, 3], "start": [2, 3, 4], "clone": 2, "git": 2, "As": 2, "said": 2, "monorepositori": 2, "conta": 2, "henc": 2, "depend": [2, 3, 8], "met": 2, "desktop": 2, "develop": 2, "workload": 2, "visual": 2, "studio": 2, "2022": 2, "2019": 2, "tool": 2, "option": [2, 3, 4, 8], "compon": 2, "meta": 2, "12": [2, 6], "later": [2, 3, 4, 6], "done": [2, 3, 8], "benchmark": [2, 4], "directori": [2, 8], "what": 2, "gcc": 2, "g": [2, 3, 8], "3": [2, 6, 8], "newer": [1, 2, 3, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [1, 2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [1, 2, 3, 5, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 4, 5], "file": [1, 2, 3, 8], "For": [1, 2, 3, 5, 6, 8], "exampl": [2, 4, 8], "wget": 2, "o": [2, 8], "qemu_debian_arm64": 2, "tar": 2, "zst": 2, "zstd": 2, "d": [2, 3, 8], "xv": 2, "sha256sum": 2, "ignor": [2, 3, 8], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [1, 2, 3], "each": [2, 3, 8], "checksum": 2, "been": [2, 3], "least": [2, 5], "And": [2, 7], "sever": [2, 3], "help": 2, "patient": 2, "ccach": 2, "subsequ": [2, 3, 5], "step": 2, "more": [1, 2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 3, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 3, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": [2, 3], "some": [1, 2, 3, 8], "debug": 2, "manual": [2, 3], "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": [2, 3], "displai": 2, "krdc": 2, "viewer": 2, "info": 2, "port": 2, "plan": 2, "necessarili": 2, "pass": [1, 2, 3, 8], "avoid": [2, 3, 8], "properti": 2, "helper": 2, "autom": 2, "aarch64": [2, 6], "how": [2, 3, 4, 8], "thank": [2, 8], "appl": 2, "creat": [2, 3, 8], "real": 2, "world": [2, 3, 7, 8], "librari": [2, 3, 7, 8], "raylib": 2, "sqlite": [2, 3], "libsodium": 2, "illustr": [1, 2, 3, 7, 8], "parser": [1, 2, 3], "wai": [1, 2, 3, 7, 8], "encod": [2, 8], "decod": 2, "byte": [2, 5, 8], "union": 2, "powerpc": 2, "power9": 2, "assembl": [2, 5], "unwind": 2, "cfi": 2, "direct": [2, 8], "better": 2, "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "goe": 2, "rather": 2, "like": [1, 2, 7, 8], "care": [2, 3, 8], "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [1, 3, 7, 8], "requir": [3, 4, 7, 8], "lib": [1, 3, 7, 8], "path": [1, 3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "etc": 3, "from": [3, 4, 6, 8], "two": [1, 3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [1, 3, 7, 8], "int": [1, 3, 7, 8], "atoi": 3, "tri": 3, "convent": [6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [1, 3, 4, 8], "subject": 3, "shown": [1, 3, 8], "fmt": 3, "onli": [1, 3, 6, 8], "per": 3, "process": 3, "32": 3, "bit": [3, 8], "form": 3, "descript": [3, 5], "__stdcall": [3, 8], "within": 3, "win32": [3, 7, 8], "fastcal": [3, 6], "__fastcal": 3, "rare": [3, 8], "ecx": 3, "edx": 3, "thiscal": [3, 6], "__thiscal": 3, "safe": 3, "simpli": [3, 8], "find": [3, 4, 7, 8], "show": [3, 7, 8], "user32": [3, 7], "equival": [1, 3, 8], "messageboxa_1": 3, "messageboxa": [3, 7], "uint": [3, 7, 8], "messageboxa_2": 3, "hwnd": 3, "text": 3, "caption": 3, "err": 3, "re": 3, "libc": [3, 7], "1257": 3, "log": [1, 3, 5, 8], "result": [3, 7, 8], "hello": [1, 3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [1, 3, 4], "respons": 3, "deal": [3, 8], "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": 3, "promisifi": 3, "cannot": [3, 5, 8], "must": [1, 3, 8], "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 5, 8], "simplic": 3, "semant": [3, 8], "marshal": 3, "out": [1, 3, 8], "e": [3, 8], "timev": [3, 7], "inout": 3, "dual": 3, "same": [3, 5, 8], "msdn": 3, "qualifi": 3, "_out_": [3, 7, 8], "_inout_": [3, 8], "posix": 3, "gettimeofdai": [3, 7], "tv_sec": [3, 7], "tv_usec": [3, 7], "timezon": [3, 7], "tz_minuteswest": [3, 7], "tz_dsttime": [3, 7], "tv": [3, 7], "tz": [3, 7], "let": [1, 3, 5, 7, 8], "databas": [1, 3], "sqlite3_db": [1, 3], "copi": [3, 8], "after": [1, 3], "sqlite3_open_v2": [1, 3], "sqlite3_close_v2": [1, 3], "sqlite_open_readwrit": [1, 3], "0x2": [1, 3], "sqlite_open_cr": [1, 3], "0x4": [1, 3, 7], "db": [1, 3], "0": [3, 4, 6, 8], "throw": [1, 3, 8], "while": [3, 8], "doe": [3, 5, 8], "know": 3, "someth": [3, 8], "freed": [3, 5], "matter": 3, "explicitli": [3, 8], "fclose": [1, 3, 8], "them": [1, 3, 8], "implicitli": 3, "lose": 3, "origin": 3, "dispos": [1, 3], "deriv": 3, "anoth": [3, 7, 8], "differ": [1, 3, 6, 8], "being": 3, "anymor": 3, "omit": [3, 8], "anonym": [3, 8], "free": [3, 4, 8], "ptr": [1, 3, 8], "under": [3, 4], "hood": 3, "anonheapstr": 3, "namedheapstr": 3, "heapstr": 3, "thing": 3, "usabl": [1, 3, 8], "explicitfre": 3, "heapstr16": 3, "strdup": 3, "asprintf": 3, "either": [3, 4, 8], "Be": 3, "crt": 3, "msvcrt": 3, "could": [3, 8], "malloc": [3, 8], "undefin": [3, 8], "behavior": [1, 3, 8], "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "1": [3, 5, 6, 7, 8], "x": [3, 6, 8], "defin": [1, 3, 8], "obscur": [1, 3, 8], "underli": [1, 3, 8], "callit": [1, 3], "callbacktyp": [1, 3], "becom": [1, 3], "predefin": 3, "trampolin": 3, "gener": [3, 4, 8], "runtim": 3, "harden": 3, "w": 3, "migit": 3, "pax": 3, "mprotect": 3, "impos": 3, "durat": 3, "distinguish": [3, 8], "invalid": 3, "though": 3, "thrown": [1, 3], "guarante": 3, "don": 3, "special": 3, "unregist": 3, "exist": 3, "qsort": 3, "progress": 3, "sqlite3_exec": 3, "part": [3, 8], "h": [1, 3, 8], "transfertoj": [1, 3], "ag": [1, 3], "cb": [1, 3], "buf": [1, 3], "snprintf": [1, 3], "sizeof": [1, 3, 8], "fake": 3, "transfercallback": [1, 3], "ret": [1, 3, 7], "niel": [1, 3], "27": [1, 3], "42": [1, 3, 8], "handler": 3, "event": 3, "fopencooki": 3, "funopen": 3, "releas": 3, "slot": 3, "16": [3, 6, 7, 8], "failur": [3, 8], "registr": 3, "delai": 3, "g_cb1": 3, "g_cb2": 3, "registerfunct": 3, "cb1": 3, "cb2": 3, "sayit": 3, "getcallback": 3, "printcallback": 3, "kyoto": 3, "receiv": 3, "yourself": [3, 8], "try": [3, 8], "catch": 3, "precis": [3, 6], "intepret": 3, "lead": 3, "mess": [3, 8], "ve": 3, "warn": 3, "fast": 4, "easi": 4, "low": 4, "aggreg": 4, "both": [4, 8], "well": 4, "popular": 4, "os": [4, 6, 8], "combin": [4, 6], "recent": [4, 6], "page": [4, 5], "sourc": [4, 6], "subdirectori": 4, "introspect": 4, "gotcha": 4, "thread": 4, "safeti": 4, "work": [1, 4], "x86_64": [4, 6], "contribut": 4, "request": 4, "todo": 4, "list": [1, 4, 8], "changelog": 4, "softwar": 4, "redistribut": 4, "modifi": [4, 8], "term": 4, "affero": 4, "public": 4, "publish": 4, "foundat": 4, "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": [1, 5, 8], "mib": 5, "unless": 5, "veri": 5, "extra": 5, "dure": 5, "engin": 5, "might": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "unus": 5, "resid": 5, "still": [1, 5], "finish": 5, "resident_async_pool": 5, "left": 5, "There": 5, "sync_stack_s": 5, "sync_heap_s": 5, "async_stack_s": 5, "256": 5, "kib": 5, "async_heap_s": 5, "512": 5, "pool": 5, "ongo": 5, "22": 6, "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": [3, 6], "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": [1, 7], "languag": 7, "syntax": [1, 7], "localtime_r": 7, "current": [7, 8], "time_t": 7, "tm": 7, "tm_sec": 7, "tm_min": 7, "tm_hour": 7, "tm_mdai": 7, "tm_mon": 7, "tm_year": 7, "tm_wdai": 7, "tm_ydai": 7, "tm_isdst": 7, "format": 7, "variad": 7, "02d": 7, "target": 7, "messagebox": 7, "user": [7, 8], "utf": [7, 8], "constant": 7, "mb_ok": 7, "0x0": 7, "mb_yesno": 7, "mb_iconquest": 7, "0x20": 7, "mb_iconinform": 7, "0x40": 7, "idok": 7, "idy": 7, "idno": 7, "messageboxw": 7, "box": 7, "allow": 8, "variat": 8, "enforc": 8, "signed": 8, "valid": 8, "int8": 8, "int8_t": 8, "uint8": 8, "uint8_t": 8, "uchar": 8, "int16": 8, "int16_t": 8, "uint16": 8, "uint16_t": 8, "short": 8, "int32": 8, "int32_t": 8, "uint32": 8, "uint32_t": [1, 8], "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "intptr": 8, "width": 8, "uintptr": 8, "line": 8, "struct1": 8, "dummi": [1, 8], "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "typedef": 8, "b": 8, "d1": 8, "d2": 8, "rule": 8, "regard": 8, "pad": 8, "latter": 8, "function1": 8, "function2": 8, "differenti": 8, "purpos": 8, "import": 8, "fall": 8, "expens": 8, "stabil": 8, "dynam": 8, "termin": 8, "sentinel": 8, "length": 8, "lot": 8, "getcursorpo": 8, "retriev": 8, "cursor": 8, "posit": 8, "kernel32": 8, "y": 8, "po": 8, "kind": 8, "pair": 8, "dedic": 8, "delet": 8, "obviou": 8, "found": 8, "stdio": 8, "fopen": [1, 8], "manipul": 8, "fread": 8, "ftell": 8, "manag": [1, 8], "look": 8, "concatnewout": 8, "describ": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatfre": 8, "fpic": 8, "wall": 8, "o2": 8, "stdlib": 8, "stdbool": 8, "errno": 8, "fragment": 8, "next": 8, "size_t": 8, "len": 8, "concat": 8, "total": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "just": 8, "findfirstfilew": 8, "findnextfilew": 8, "filetim": 8, "dwlowdatetim": 8, "dwhighdatetim": 8, "win32_find_data": 8, "dwfileattribut": 8, "ftcreationtim": 8, "ftlastaccesstim": 8, "ftlastwritetim": 8, "nfilesizehigh": 8, "nfilesizelow": 8, "dwreserved0": 8, "dwreserved1": 8, "cfilenam": 8, "260": 8, "calternatefilenam": 8, "dwfiletyp": 8, "obsolet": 8, "dwcreatortyp": 8, "wfinderflag": 8, "ushort": 8, "findfirstfil": 8, "findnextfil": 8, "findclos": 8, "getlasterror": 8, "dirnam": 8, "error_file_not_found": 8, "18": 8, "error_no_more_fil": 8, "among": 8, "variabl": 8, "invol": 8, "list1": 8, "list2": 8, "singl": [1, 8], "element": [1, 8], "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": [3, 8], "uint8arrai": 8, "those": 8, "exactli": 8, "foo1": 8, "foo": 8, "a16": 8, "foo2": 8, "hypothet": 8, "returnfoo1": 8, "returnfoo": 8, "p": 8, "returnfoo2": 8, "int16arrai": 8, "fill": 8, "truncat": 8, "alwai": 8, "nul": 8, "ask": 8, "explor": 8, "alignof": 8, "about": 8, "caller": [], "yarn": 1, "broken": 1, "pars": 1, "incorrect": 1, "stream": 1, "fp": 1, "touch": 1, "wb": 1, "would": 1, "initi": 1, "structtyp": 1, "sqlite3": 3, "histori": 4, "migrat": [3, 4, 8], "guid": [3, 4, 8], "given": 1, "transient": 1, "magic": 1, "instrospect": [], "consult": [1, 3, 8], "complex": 1, "outsid": 1, "minor": 1, "alia": [1, 8], "resolv": [1, 8], "correctli": 1, "break": 1, "complet": 8}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"benchmark": 0, "overview": [0, 4], "linux": [0, 7], "x86_64": 0, "rand": 0, "result": 0, "atoi": 0, "raylib": 0, "window": [0, 2, 7], "run": [0, 2], "changelog": 1, "koffi": [1, 4, 7], "1": [1, 4], "3": [1, 4], "9": 1, "8": 1, "7": [1, 4], "6": 1, "5": 1, "4": 1, "2": 1, "0": 1, "contribut": 2, "bug": 2, "featur": 2, "request": 2, "build": 2, "from": 2, "sourc": 2, "other": 2, "platform": [2, 6], "test": 2, "todo": 2, "list": 2, "code": 2, "style": 2, "function": 3, "call": 3, "definit": 3, "classic": 3, "syntax": 3, "c": [3, 8], "like": 3, "prototyp": 3, "synchron": [], "asynchron": 3, "variad": 3, "js": [3, 6], "convers": 3, "gotcha": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [1, 3, 8], "handl": [1, 3, 8], "heap": 3, "alloc": 3, "valu": 3, "javascript": 3, "callback": [1, 3], "transient": 3, "regist": 3, "except": 3, "thread": 3, "safeti": 3, "tabl": 4, "content": 4, "licens": 4, "memori": 5, "usag": 5, "how": 5, "work": 5, "default": 5, "set": 5, "requir": 6, "node": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": [1, 8], "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": [1, 8], "convent": 3, "histori": 1, "12": 1, "11": 1, "10": 1, "migrat": 1, "guid": 1, "x": 1, "alias": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
|
|
1
|
+
Search.setIndex({"docnames": ["benchmarks", "changes", "contribute", "functions", "index", "memory", "platforms", "start", "types"], "filenames": ["benchmarks.md", "changes.md", "contribute.md", "functions.md", "index.rst", "memory.md", "platforms.md", "start.md", "types.md"], "titles": ["Benchmarks", "Changelog", "Contributing", "Functions", "Koffi 2.0.0", "Memory usage", "Requirements", "Quick start", "Data types"], "terms": {"here": [0, 2, 3, 4, 8], "quick": [0, 4], "execut": [0, 3], "time": [0, 2, 3, 5, 7], "koffi": [0, 2, 3, 5, 6, 8], "call": [0, 1, 4, 5, 6, 7, 8], "three": [0, 7, 8], "where": [0, 3, 8], "compar": 0, "theoret": 0, "ideal": 0, "ffi": [0, 1, 3, 4, 7], "implement": [0, 3, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": [0, 3], "n": [0, 2, 4, 6, 7, 8], "api": [0, 1, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8], "first": [0, 1, 2, 3, 7, 8], "base": [0, 3, 4, 8], "second": [0, 3, 7, 8], "third": 0, "These": [0, 2, 3, 8], "ar": [0, 1, 2, 3, 5, 6, 7, 8], "detail": 0, "explain": 0, "below": [0, 1, 2, 3, 7, 8], "node": [0, 1, 2, 3, 4, 7], "napi": 0, "present": 0, "were": [0, 1, 3, 8], "measur": 0, "my": [0, 2], "machin": [0, 2], "intel": 0, "core": 0, "i5": 0, "4460": 0, "thi": [0, 1, 2, 3, 4, 7, 8], "test": [0, 1, 4, 6], "around": [0, 5, 8], "repeat": 0, "simpl": [0, 2, 3, 8], "standard": [0, 3, 8], "c": [0, 1, 2, 4, 5, 6, 7], "function": [0, 1, 2, 4, 7], "ha": [0, 2, 3, 8], "one": [0, 2, 3, 5, 7, 8], "refer": [0, 4, 8], "through": [0, 1, 3, 8], "an": [0, 1, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1, 3], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 4, 5, 8], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "offici": [0, 2, 6], "iter": [0, 8], "rel": 0, "perform": [0, 4, 8], "rand_napi": 0, "644": 0, "ns": 0, "x1": 0, "00": 0, "ref": 0, "rand_koffi": 0, "950": 0, "x0": 0, "68": 0, "48": 0, "rand_node_ffi": 0, "30350": 0, "02": 0, "4613": 0, "becaus": [0, 2, 3, 8], "pretti": [0, 2], "small": [0, 3, 4], "clearli": 0, "visibl": 0, "similar": [0, 3], "which": [0, 1, 2, 3, 6, 7], "take": [0, 3, 8], "string": [0, 1, 3, 5, 7], "paramet": [0, 1, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3, 5], "convers": [0, 1, 4, 8], "slow": [0, 2], "heavi": 0, "atoi_napi": 0, "1104": 0, "atoi_koffi": 0, "1778": 0, "62": 0, "61": 0, "atoi_node_ffi": 0, "125300": 0, "009": 0, "11250": 0, "cpu": 0, "imag": 0, "draw": 0, "much": [0, 2], "heavier": 0, "than": [0, 1, 5], "thu": [0, 3], "reduc": [0, 1], "In": [0, 1, 3, 8], "baselin": 0, "full": [0, 2, 8], "version": [0, 1, 3, 4, 6, 8], "nativ": [0, 3], "wrapper": [0, 2], "raylib_cc": 0, "215": 0, "7": [0, 7], "\u00b5s": 0, "20": 0, "17": [0, 6], "raylib_node_raylib": 0, "258": 0, "9": 0, "raylib_koffi": 0, "311": 0, "6": [0, 3, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 8], "28": 0, "259": 0, "965": 0, "1248": 0, "77": 0, "29": 0, "41500": 0, "4203": 0, "1393": 0, "2246": 0, "157550": 0, "11210": 0, "without": [0, 2, 6], "ani": [0, 2, 3, 4, 5, 8], "211": 0, "8": [0, 2, 3, 4, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 3, 5, 6, 8], "23": 0, "334": 0, "pleas": [0, 5], "note": [0, 2, 5, 8], "order": [0, 1, 2, 3], "get": [0, 1, 2, 3, 5, 7, 8], "fair": 0, "number": [0, 1, 3, 5, 8], "wa": [0, 1], "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 1, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 1, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": [0, 3], "clangcl": 0, "open": [0, 1, 3, 8], "consol": [0, 1, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "all": [0, 1, 3, 6, 8], "made": [0, 1, 3, 5, 8], "built": 0, "binari": [0, 1, 2, 6], "prefer": [0, 2, 3], "onc": [0, 2, 3, 5, 7, 8], "everyth": [0, 2], "readi": 0, "main": [1, 3], "fix": [1, 2, 4], "prebuild": 1, "compat": [1, 2, 3], "electron": 1, "window": [1, 3, 4, 6], "x64": 1, "chang": [1, 2, 3, 5, 8], "prevent": [1, 8], "callback": [4, 5, 6, 8], "reus": 1, "beyond": 1, "add": [1, 2, 8], "bti": 1, "support": [1, 2, 3, 4, 8], "aaarch64": 1, "platform": [1, 3, 4, 5, 8], "except": [1, 2], "other": [1, 3, 8], "harmon": 1, "few": [1, 8], "error": [1, 3, 8], "messag": [1, 7], "crash": [1, 3], "when": [1, 2, 3, 5, 8], "insid": [1, 3], "struct": [1, 2, 4, 5, 7], "null": [1, 3, 7, 8], "record": 1, "member": [1, 3, 8], "intptr_t": [1, 8], "uintptr_t": [1, 8], "primit": [1, 3, 4], "type": [2, 3, 4, 7], "str": [1, 3, 7, 8], "str16": [1, 3, 7, 8], "alias": 1, "string16": [1, 8], "variou": [1, 2], "document": [1, 8], "improv": [1, 2], "instal": [1, 2, 4, 6], "15": [1, 6, 8], "system": [1, 2, 7], "bug": [1, 4], "detect": [1, 3], "incompat": 1, "linux": [1, 2, 4, 6], "memori": [1, 3, 4, 8], "leak": [1, 3, 8], "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "configur": [1, 2], "maximum": [1, 3, 5], "max_async_cal": [1, 5], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 5, 8], "size": [1, 2, 4, 5], "possibl": [1, 2, 8], "openbsd": [1, 6], "i386": 1, "void": [1, 3, 7, 8], "misconvers": 1, "sign": [1, 8], "integ": [1, 3, 8], "return": [1, 3, 8], "valu": [1, 4, 7, 8], "unsign": [1, 3, 7, 8], "empti": 1, "signatur": 1, "disabl": [1, 2], "unsaf": 1, "optim": [1, 2], "14": [1, 6, 8], "mode": [1, 3], "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "debian": [1, 2], "prebuilt": [1, 2, 6], "rebuild": 1, "happen": [1, 3, 8], "fail": [1, 2, 3, 8], "load": [1, 3, 7, 8], "major": 1, "expand": 1, "move": 1, "http": [1, 2, 4], "dev": [1, 2], "arrai": [1, 2, 4], "typedarrai": [1, 8], "pointer": [1, 3, 4], "argument": [1, 3, 7, 8], "input": [1, 3, 8], "output": [1, 7, 8], "mix": [1, 2, 8], "convert": [1, 3, 8], "instead": [1, 2, 8], "hint": [1, 8], "char": [1, 3, 7, 8], "char16": [1, 8], "char16_t": [1, 8], "definit": [1, 4, 8], "long": [1, 8], "llp64": [1, 8], "model": 1, "restrict": [1, 2, 3], "automat": [1, 3, 8], "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 3, 6, 8], "arm32": [1, 6], "risc": [1, 6], "v": [1, 6], "forbid": 1, "duplic": 1, "name": [1, 2, 3, 8], "new": [1, 3, 5, 8], "featur": [1, 4], "arm64": [1, 2, 6], "now": [1, 2, 3, 7, 8], "A": [1, 3, 6, 8], "maco": [1, 2, 6], "m1": 1, "includ": [1, 2, 3, 6, 8], "entri": 1, "sinc": [1, 4], "can": [1, 2, 3, 4, 5, 6, 7, 8], "cdecl": [1, 3, 6], "stdcall": [1, 3, 6, 7], "64": [1, 3, 5, 6, 8], "lp64d": [1, 6], "lp64": [1, 6, 8], "untest": [1, 6], "expos": [1, 8], "set": [1, 2, 4], "usag": [1, 4], "synchron": [1, 3, 5], "asynchron": [1, 5], "transpar": [1, 8], "between": [1, 3], "buffer": [1, 8], "tent": 1, "excess": 1, "align": [1, 8], "x86": [1, 3, 6, 7], "potenti": [1, 8], "problem": 1, "big": [1, 3, 5, 8], "int64_t": [1, 7, 8], "uint64_t": [1, 8], "layout": 1, "push": [1, 8], "pop": 1, "issu": [1, 3], "incomplet": 1, "buggi": 1, "hfa": [1, 2], "caus": [1, 3], "miss": [1, 2], "map_stack": 1, "flag": 1, "non": [1, 3, 8], "sens": 1, "intern": [1, 8], "fals": [1, 8], "normal": [1, 5, 8], "make": [1, 2, 3], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 3, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": [2, 4], "monorepo": 2, "contain": [2, 8], "multipl": [1, 2], "project": 2, "idea": 2, "github": [2, 4], "com": [2, 4], "koromix": [2, 4], "provid": [2, 3, 8], "packag": [1, 2, 6], "npm": [2, 6, 7], "archiv": 2, "so": [2, 3, 7, 8], "most": [2, 3, 8], "case": [2, 3, 8], "should": 2, "If": [2, 3, 8], "you": [1, 2, 3, 4, 6, 7, 8], "want": [2, 7], "hack": 2, "specif": [1, 2, 5], "instruct": [2, 3], "start": [2, 3, 4], "clone": 2, "git": 2, "As": 2, "said": 2, "monorepositori": 2, "conta": 2, "henc": 2, "depend": [2, 3, 8], "met": 2, "desktop": 2, "develop": 2, "workload": 2, "visual": 2, "studio": 2, "2022": 2, "2019": 2, "tool": 2, "option": [2, 3, 4, 8], "compon": 2, "meta": 2, "12": [2, 6], "later": [2, 3, 4, 6], "done": [2, 3, 8], "benchmark": [2, 4], "directori": [2, 8], "what": 2, "gcc": 2, "g": [2, 3, 8], "3": [2, 4, 6, 8], "newer": [1, 2, 3, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [1, 2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [1, 2, 3, 5, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 4, 5], "file": [1, 2, 3, 8], "For": [1, 2, 3, 5, 6, 8], "exampl": [2, 4, 8], "wget": 2, "o": [2, 8], "qemu_debian_arm64": 2, "tar": 2, "zst": 2, "zstd": 2, "d": [2, 3, 8], "xv": 2, "sha256sum": 2, "ignor": [2, 3, 8], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [1, 2, 3], "each": [2, 3, 8], "checksum": 2, "been": [2, 3], "least": [2, 5], "And": [2, 7], "sever": [2, 3], "help": 2, "patient": 2, "ccach": 2, "subsequ": [2, 3, 5], "step": 2, "more": [1, 2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 3, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 3, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": [2, 3], "some": [1, 2, 3, 8], "debug": 2, "manual": [2, 3], "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": [2, 3], "displai": 2, "krdc": 2, "viewer": 2, "info": 2, "port": 2, "plan": 2, "necessarili": 2, "pass": [1, 2, 3, 8], "avoid": [2, 3, 8], "properti": 2, "helper": 2, "autom": 2, "aarch64": [2, 6], "how": [2, 3, 4, 8], "thank": [2, 8], "appl": 2, "creat": [2, 3, 8], "real": 2, "world": [2, 3, 7, 8], "librari": [2, 3, 7, 8], "raylib": 2, "sqlite": [2, 3], "libsodium": 2, "illustr": [1, 2, 3, 7, 8], "parser": [1, 2, 3], "wai": [1, 2, 3, 7, 8], "encod": [2, 8], "decod": 2, "byte": [2, 5, 8], "union": 2, "powerpc": 2, "power9": 2, "assembl": [2, 5], "unwind": 2, "cfi": 2, "direct": [2, 8], "better": 2, "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "goe": 2, "rather": 2, "like": [1, 2, 7, 8], "care": [2, 3, 8], "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [1, 3, 7, 8], "requir": [3, 4, 7, 8], "lib": [1, 3, 7, 8], "path": [3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "etc": 3, "from": [3, 4, 6, 8], "two": [1, 3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [1, 3, 7, 8], "int": [1, 3, 7, 8], "atoi": 3, "tri": 3, "convent": [6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [1, 3, 4, 8], "subject": 3, "shown": [1, 3, 8], "fmt": 3, "onli": [1, 3, 6, 8], "per": 3, "process": 3, "32": 3, "bit": [3, 8], "form": 3, "descript": [3, 5], "__stdcall": [3, 8], "within": 3, "win32": [3, 7, 8], "fastcal": [3, 6], "__fastcal": 3, "rare": [3, 8], "ecx": 3, "edx": 3, "thiscal": [3, 6], "__thiscal": 3, "safe": 3, "simpli": [3, 8], "find": [3, 4, 7, 8], "show": [3, 7, 8], "user32": [3, 7], "equival": [1, 3, 8], "messageboxa_1": 3, "messageboxa": [3, 7], "uint": [3, 7, 8], "messageboxa_2": 3, "hwnd": 3, "text": 3, "caption": 3, "err": 3, "re": 3, "libc": [3, 7], "1257": 3, "log": [1, 3, 5, 8], "result": [3, 7, 8], "hello": [1, 3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [1, 3, 4], "respons": 3, "deal": [3, 8], "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": [3, 4], "promisifi": 3, "cannot": [3, 5, 8], "must": [1, 3, 8], "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 5, 8], "simplic": 3, "semant": [3, 8], "marshal": 3, "out": [3, 8], "e": [3, 8], "timev": [3, 7], "inout": 3, "dual": 3, "same": [3, 5, 8], "msdn": 3, "qualifi": 3, "_out_": [1, 3, 7, 8], "_inout_": [3, 8], "posix": 3, "gettimeofdai": [3, 7], "tv_sec": [3, 7], "tv_usec": [3, 7], "timezon": [3, 7], "tz_minuteswest": [3, 7], "tz_dsttime": [3, 7], "tv": [3, 7], "tz": [3, 7], "let": [1, 3, 5, 7, 8], "databas": [1, 3], "sqlite3_db": [], "copi": [3, 8], "after": [1, 3, 8], "sqlite3_open_v2": [1, 3], "sqlite3_close_v2": [1, 3], "sqlite_open_readwrit": [1, 3], "0x2": [1, 3], "sqlite_open_cr": [1, 3], "0x4": [1, 3, 7], "db": [1, 3], "0": [3, 6, 8], "throw": [1, 3, 8], "while": [3, 8], "doe": [3, 5, 8], "know": 3, "someth": [3, 8], "freed": [3, 5], "matter": 3, "explicitli": [3, 8], "fclose": [1, 3, 8], "them": [1, 3, 8], "implicitli": 3, "lose": 3, "origin": 3, "dispos": [1, 3, 4], "deriv": 3, "anoth": [3, 7, 8], "differ": [1, 3, 6, 8], "being": 3, "anymor": 3, "omit": [3, 8], "anonym": [3, 8], "free": [3, 4, 8], "ptr": [1, 3, 8], "under": [3, 4], "hood": 3, "anonheapstr": 3, "namedheapstr": 3, "heapstr": 3, "thing": 3, "usabl": [1, 3, 8], "explicitfre": 3, "heapstr16": 3, "strdup": 3, "asprintf": [], "either": [3, 4, 8], "Be": 3, "crt": 3, "msvcrt": 3, "could": [3, 8], "malloc": [3, 8], "undefin": [3, 8], "behavior": [1, 3, 8], "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "1": [3, 4, 5, 6, 7, 8], "x": [3, 6, 8], "defin": [1, 3, 8], "obscur": [1, 3, 8], "underli": [1, 3, 8], "callit": [1, 3], "callbacktyp": [1, 3], "becom": [1, 3], "predefin": 3, "trampolin": 3, "gener": [3, 4, 8], "runtim": 3, "harden": 3, "w": 3, "migit": 3, "pax": 3, "mprotect": 3, "impos": 3, "durat": 3, "distinguish": [3, 8], "invalid": 3, "though": 3, "thrown": [1, 3], "guarante": 3, "don": 3, "special": 3, "unregist": 3, "exist": 3, "qsort": 3, "progress": 3, "sqlite3_exec": 3, "part": [3, 8], "h": [1, 3, 8], "transfertoj": [1, 3], "ag": [1, 3], "cb": [1, 3], "buf": [1, 3], "snprintf": [1, 3], "sizeof": [1, 3, 8], "fake": 3, "transfercallback": [1, 3], "ret": [1, 3, 7], "niel": [1, 3], "27": [1, 3], "42": [1, 3, 8], "handler": 3, "event": 3, "fopencooki": 3, "funopen": 3, "releas": 3, "slot": 3, "16": [3, 6, 7, 8], "failur": [3, 8], "registr": 3, "delai": 3, "g_cb1": 3, "g_cb2": 3, "registerfunct": 3, "cb1": 3, "cb2": 3, "sayit": 3, "getcallback": 3, "printcallback": 3, "kyoto": 3, "receiv": 3, "yourself": [3, 8], "try": [3, 8], "catch": 3, "precis": [3, 6], "intepret": 3, "lead": 3, "mess": [3, 8], "ve": 3, "warn": 3, "fast": 4, "easi": 4, "low": 4, "aggreg": 4, "both": [4, 8], "well": 4, "popular": 4, "os": [4, 6, 8], "combin": [4, 6], "recent": [4, 6], "page": [4, 5, 8], "sourc": [4, 6], "subdirectori": 4, "introspect": [], "gotcha": 4, "thread": 4, "safeti": 4, "work": [1, 4], "x86_64": [4, 6], "contribut": 4, "request": 4, "todo": 4, "list": [1, 4, 8], "changelog": 4, "softwar": 4, "redistribut": 4, "modifi": [4, 8], "term": 4, "affero": 4, "public": 4, "publish": 4, "foundat": 4, "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": [1, 5, 8], "mib": 5, "unless": 5, "veri": 5, "extra": 5, "dure": 5, "engin": 5, "might": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "unus": 5, "resid": 5, "still": [1, 5], "finish": 5, "resident_async_pool": 5, "left": 5, "There": 5, "sync_stack_s": 5, "sync_heap_s": 5, "async_stack_s": 5, "256": 5, "kib": 5, "async_heap_s": 5, "512": 5, "pool": 5, "ongo": 5, "22": 6, "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": [3, 6], "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": [1, 7], "languag": 7, "syntax": [1, 7], "localtime_r": 7, "current": [7, 8], "time_t": 7, "tm": 7, "tm_sec": 7, "tm_min": 7, "tm_hour": 7, "tm_mdai": 7, "tm_mon": 7, "tm_year": 7, "tm_wdai": 7, "tm_ydai": 7, "tm_isdst": 7, "format": 7, "variad": 7, "02d": 7, "target": 7, "messagebox": 7, "user": [7, 8], "utf": [7, 8], "constant": 7, "mb_ok": 7, "0x0": 7, "mb_yesno": 7, "mb_iconquest": 7, "0x20": 7, "mb_iconinform": 7, "0x40": 7, "idok": 7, "idy": 7, "idno": 7, "messageboxw": 7, "box": 7, "allow": 8, "variat": 8, "enforc": 8, "signed": 8, "valid": 8, "int8": 8, "int8_t": 8, "uint8": 8, "uint8_t": 8, "uchar": 8, "int16": 8, "int16_t": 8, "uint16": 8, "uint16_t": 8, "short": 8, "int32": 8, "int32_t": 8, "uint32": 8, "uint32_t": [1, 8], "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "intptr": 8, "width": 8, "uintptr": 8, "line": 8, "struct1": 8, "dummi": [1, 8], "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "typedef": 8, "b": 8, "d1": 8, "d2": 8, "rule": 8, "regard": 8, "pad": 8, "latter": 8, "function1": 8, "function2": 8, "differenti": 8, "purpos": 8, "import": 8, "fall": 8, "expens": 8, "stabil": 8, "dynam": 8, "termin": 8, "sentinel": 8, "length": 8, "lot": 8, "getcursorpo": 8, "retriev": 8, "cursor": 8, "posit": 8, "kernel32": 8, "y": 8, "po": 8, "kind": 8, "pair": 8, "dedic": 8, "delet": 8, "obviou": 8, "found": 8, "stdio": 8, "fopen": [1, 8], "manipul": 8, "fread": 8, "ftell": 8, "manag": [1, 8], "look": 8, "concatnewout": 8, "describ": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatfre": 8, "fpic": 8, "wall": 8, "o2": 8, "stdlib": 8, "stdbool": 8, "errno": 8, "fragment": 8, "next": 8, "size_t": 8, "len": 8, "concat": 8, "total": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "just": 8, "findfirstfilew": 8, "findnextfilew": 8, "filetim": 8, "dwlowdatetim": 8, "dwhighdatetim": 8, "win32_find_data": 8, "dwfileattribut": 8, "ftcreationtim": 8, "ftlastaccesstim": 8, "ftlastwritetim": 8, "nfilesizehigh": 8, "nfilesizelow": 8, "dwreserved0": 8, "dwreserved1": 8, "cfilenam": 8, "260": 8, "calternatefilenam": 8, "dwfiletyp": 8, "obsolet": 8, "dwcreatortyp": 8, "wfinderflag": 8, "ushort": 8, "findfirstfil": 8, "findnextfil": 8, "findclos": 8, "getlasterror": 8, "dirnam": 8, "error_file_not_found": 8, "18": 8, "error_no_more_fil": 8, "among": 8, "variabl": 8, "invol": 8, "list1": 8, "list2": 8, "singl": [1, 8], "element": [1, 8], "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": [3, 8], "uint8arrai": 8, "those": 8, "exactli": 8, "foo1": 8, "foo": 8, "a16": 8, "foo2": 8, "hypothet": 8, "returnfoo1": 8, "returnfoo": 8, "p": 8, "returnfoo2": 8, "int16arrai": 8, "fill": 8, "truncat": 8, "alwai": 8, "nul": 8, "ask": 8, "explor": 8, "alignof": 8, "about": 8, "caller": [], "yarn": 1, "broken": 1, "pars": 1, "incorrect": 1, "stream": [], "fp": 1, "touch": [], "wb": 1, "would": 1, "initi": 1, "structtyp": 1, "sqlite3": [1, 3], "histori": 4, "migrat": [3, 4, 8], "guid": [3, 4, 8], "given": 1, "transient": 1, "magic": 1, "instrospect": [], "consult": [1, 3, 8], "complex": 1, "outsid": 1, "minor": 1, "alia": [1, 8], "resolv": [1, 8], "correctli": 1, "break": 1, "complet": 8, "read": 8}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"benchmark": 0, "overview": [0, 4], "linux": [0, 7], "x86_64": 0, "rand": 0, "result": 0, "atoi": 0, "raylib": 0, "window": [0, 2, 7], "run": [0, 2], "changelog": 1, "koffi": [1, 4, 7], "1": 1, "3": 1, "9": 1, "8": 1, "7": 1, "6": 1, "5": 1, "4": 1, "2": [1, 4], "0": [1, 4], "contribut": 2, "bug": 2, "featur": 2, "request": 2, "build": 2, "from": 2, "sourc": 2, "other": 2, "platform": [2, 6], "test": 2, "todo": 2, "list": 2, "code": 2, "style": 2, "function": [3, 8], "call": 3, "definit": 3, "classic": 3, "syntax": 3, "c": [3, 8], "like": 3, "prototyp": 3, "synchron": [], "asynchron": 3, "variad": 3, "js": [3, 6], "convers": 3, "gotcha": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [1, 3, 8], "handl": [1, 3, 8], "heap": 3, "alloc": 3, "valu": 3, "javascript": 3, "callback": [1, 3], "transient": 3, "regist": 3, "except": 3, "thread": 3, "safeti": 3, "tabl": 4, "content": 4, "licens": 4, "memori": 5, "usag": 5, "how": 5, "work": 5, "default": 5, "set": 5, "requir": 6, "node": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": [1, 8], "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": [1, 8], "convent": 3, "histori": 1, "12": 1, "11": 1, "10": 1, "migrat": 1, "guid": 1, "x": 1, "alias": 8, "dispos": 8, "util": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
|
package/doc/dist/html/start.html
CHANGED
|
@@ -172,6 +172,10 @@
|
|
|
172
172
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
173
173
|
</ul>
|
|
174
174
|
|
|
175
|
+
</div>
|
|
176
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
177
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
178
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
175
179
|
</div>
|
|
176
180
|
</div>
|
|
177
181
|
|
package/doc/dist/html/types.html
CHANGED
|
@@ -172,6 +172,10 @@
|
|
|
172
172
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a></li>
|
|
173
173
|
</ul>
|
|
174
174
|
|
|
175
|
+
</div>
|
|
176
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
177
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
178
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/NPM-2.0.0-brightgreen" alt="NPM"/></a>
|
|
175
179
|
</div>
|
|
176
180
|
</div>
|
|
177
181
|
|
|
@@ -922,8 +926,15 @@
|
|
|
922
926
|
<p>The reverse case is also true, Koffi can convert a C fixed-size buffer to a JS string. This happens by default for char, char16 and char16_t arrays, but you can also explicitly ask for this with the <code class="docutils literal notranslate"><span class="pre">string</span></code> array hint (e.g. <code class="docutils literal notranslate"><span class="pre">koffi.array('char',</span> <span class="pre">8,</span> <span class="pre">'string')</span></code>).</p>
|
|
923
927
|
</section>
|
|
924
928
|
</section>
|
|
929
|
+
<section id="disposable-types">
|
|
930
|
+
<h2>Disposable types<a class="headerlink" href="#disposable-types" title="Permalink to this heading">#</a></h2>
|
|
931
|
+
<p>Disposable types allow you to register a function that will automatically called after each C to JS conversion performed by Koffi. This can be used to avoid leaking heap-allocated strings, for example.</p>
|
|
932
|
+
<p>Read the documentation for <a class="reference internal" href="functions#heap-allocated-values"><span class="std std-doc">disposable types</span></a> on the page about function calls.</p>
|
|
933
|
+
</section>
|
|
934
|
+
<section id="utility-functions">
|
|
935
|
+
<h2>Utility functions<a class="headerlink" href="#utility-functions" title="Permalink to this heading">#</a></h2>
|
|
925
936
|
<section id="type-introspection">
|
|
926
|
-
<
|
|
937
|
+
<h3>Type introspection<a class="headerlink" href="#type-introspection" title="Permalink to this heading">#</a></h3>
|
|
927
938
|
<p>Koffi exposes three functions to explore type information:</p>
|
|
928
939
|
<ul class="simple">
|
|
929
940
|
<li><p><code class="docutils literal notranslate"><span class="pre">koffi.sizeof(type)</span></code> to get the size of a type</p></li>
|
|
@@ -944,10 +955,11 @@
|
|
|
944
955
|
</pre></div>
|
|
945
956
|
</div>
|
|
946
957
|
</section>
|
|
947
|
-
<section id="type-
|
|
948
|
-
<
|
|
958
|
+
<section id="type-aliases">
|
|
959
|
+
<h3>Type aliases<a class="headerlink" href="#type-aliases" title="Permalink to this heading">#</a></h3>
|
|
949
960
|
<p>You can alias a type with <code class="docutils literal notranslate"><span class="pre">koffi.alias(name,</span> <span class="pre">type)</span></code>. Aliased types are completely equivalent.</p>
|
|
950
961
|
</section>
|
|
962
|
+
</section>
|
|
951
963
|
</section>
|
|
952
964
|
|
|
953
965
|
</article>
|
|
@@ -1021,8 +1033,12 @@
|
|
|
1021
1033
|
<li><a class="reference internal" href="#handling-of-strings">Handling of strings</a></li>
|
|
1022
1034
|
</ul>
|
|
1023
1035
|
</li>
|
|
1036
|
+
<li><a class="reference internal" href="#disposable-types">Disposable types</a></li>
|
|
1037
|
+
<li><a class="reference internal" href="#utility-functions">Utility functions</a><ul>
|
|
1024
1038
|
<li><a class="reference internal" href="#type-introspection">Type introspection</a></li>
|
|
1025
|
-
<li><a class="reference internal" href="#type-
|
|
1039
|
+
<li><a class="reference internal" href="#type-aliases">Type aliases</a></li>
|
|
1040
|
+
</ul>
|
|
1041
|
+
</li>
|
|
1026
1042
|
</ul>
|
|
1027
1043
|
</li>
|
|
1028
1044
|
</ul>
|
package/doc/functions.md
CHANGED
|
@@ -160,11 +160,11 @@ This example opens an in-memory SQLite database, and uses the node-ffi-style fun
|
|
|
160
160
|
const koffi = require('koffi');
|
|
161
161
|
const lib = koffi.load('sqlite3.so');
|
|
162
162
|
|
|
163
|
-
const
|
|
163
|
+
const sqlite3 = koffi.handle('sqlite3');
|
|
164
164
|
|
|
165
165
|
// Use koffi.out() on a double pointer to copy out (from C to JS) after the call
|
|
166
|
-
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['str', koffi.out(koffi.pointer(
|
|
167
|
-
const sqlite3_close_v2 = lib.func('sqlite3_close_v2', 'int', [koffi.pointer(
|
|
166
|
+
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['str', koffi.out(koffi.pointer(sqlite3, 2)), 'int', 'str']);
|
|
167
|
+
const sqlite3_close_v2 = lib.func('sqlite3_close_v2', 'int', [koffi.pointer(sqlite3)]);
|
|
168
168
|
|
|
169
169
|
const SQLITE_OPEN_READWRITE = 0x2;
|
|
170
170
|
const SQLITE_OPEN_CREATE = 0x4;
|
|
@@ -183,7 +183,7 @@ Some C functions return heap-allocated values directly or through output paramet
|
|
|
183
183
|
|
|
184
184
|
For opaque handles, such as FILE, this does not matter because you will explicitly call `fclose()` on them. But some values (such as strings) get implicitly converted by Koffi, and you lose access to the original pointer. This creates a leak if the string is heap-allocated.
|
|
185
185
|
|
|
186
|
-
To avoid this, you can instruct Koffi to call a function on the original pointer once the conversion is done, by creating a disposable type with `koffi.dispose(name, type, func)`. This creates a type derived from another type, the only difference being that *func* gets called with the original pointer once the value has been converted and is not needed anymore.
|
|
186
|
+
To avoid this, you can instruct Koffi to call a function on the original pointer once the conversion is done, by creating a **disposable type** with `koffi.dispose(name, type, func)`. This creates a type derived from another type, the only difference being that *func* gets called with the original pointer once the value has been converted and is not needed anymore.
|
|
187
187
|
|
|
188
188
|
The *name* can be omitted to create an anonymous disposable type. If *func* is omitted or is null, Koffi will use `koffi.free(ptr)` (which calls the standard C library *free* function under the hood).
|
|
189
189
|
|
|
@@ -199,7 +199,7 @@ The following example illustrates the use of a disposable type derived from *str
|
|
|
199
199
|
const koffi = require('koffi');
|
|
200
200
|
const lib = koffi.load('libc.so.6');
|
|
201
201
|
|
|
202
|
-
// You can also use: const strdup = lib.func('const char *!
|
|
202
|
+
// You can also use: const strdup = lib.func('const char *! strdup(const char *str)')
|
|
203
203
|
const HeapStr = koffi.disposable('str');
|
|
204
204
|
const strdup = lib.cdecl('strdup', HeapStr, ['str']);
|
|
205
205
|
|
|
@@ -207,7 +207,7 @@ let copy = strdup('Hello!');
|
|
|
207
207
|
console.log(copy); // Prints Hello!
|
|
208
208
|
```
|
|
209
209
|
|
|
210
|
-
When you declare functions with the [prototype-like syntax](#c-like-prototypes), you can either use named
|
|
210
|
+
When you declare functions with the [prototype-like syntax](#c-like-prototypes), you can either use named disposable types or use the '!' shortcut qualifier with compatibles types, as shown in the example below. This qualifier creates an anonymous disposable type that calls `koffi.free(ptr)`.
|
|
211
211
|
|
|
212
212
|
```js
|
|
213
213
|
const koffi = require('koffi');
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div style="text-align: center; margin-top: 2em;">
|
|
2
|
+
<a href="https://www.npmjs.com/package/koffi"><img src="https://img.shields.io/badge/NPM-{{version}}-brightgreen" alt="NPM"/></a>
|
|
3
|
+
<a href="https://github.com/Koromix/luigi/tree/master/koffi"><img src="https://img.shields.io/badge/GitHub-Koffi-ff6600" alt="GitHub"/></a>
|
|
4
|
+
</div>
|
|
5
|
+
|
package/doc/types.md
CHANGED
|
@@ -6,7 +6,7 @@ While the C standard allows for variation in the size of most integer types, Kof
|
|
|
6
6
|
|
|
7
7
|
JS type | C type | Bytes | Signedness | Note
|
|
8
8
|
----------------- | ------------------ | ----- | ---------- | ---------------------------
|
|
9
|
-
|
|
9
|
+
Undefined | void | 0 | | Only valid as a return type
|
|
10
10
|
Number (integer) | int8 | 1 | Signed |
|
|
11
11
|
Number (integer) | int8_t | 1 | Signed |
|
|
12
12
|
Number (integer) | uint8 | 1 | Unsigned |
|
|
@@ -515,7 +515,15 @@ Koffi can also convert JS strings to fixed-sized arrays in the following cases:
|
|
|
515
515
|
|
|
516
516
|
The reverse case is also true, Koffi can convert a C fixed-size buffer to a JS string. This happens by default for char, char16 and char16_t arrays, but you can also explicitly ask for this with the `string` array hint (e.g. `koffi.array('char', 8, 'string')`).
|
|
517
517
|
|
|
518
|
-
##
|
|
518
|
+
## Disposable types
|
|
519
|
+
|
|
520
|
+
Disposable types allow you to register a function that will automatically called after each C to JS conversion performed by Koffi. This can be used to avoid leaking heap-allocated strings, for example.
|
|
521
|
+
|
|
522
|
+
Read the documentation for [disposable types](functions.md#heap-allocated-values) on the page about function calls.
|
|
523
|
+
|
|
524
|
+
## Utility functions
|
|
525
|
+
|
|
526
|
+
### Type introspection
|
|
519
527
|
|
|
520
528
|
Koffi exposes three functions to explore type information:
|
|
521
529
|
|
|
@@ -540,6 +548,6 @@ console.log(koffi.sizeof('long'));
|
|
|
540
548
|
console.log(koffi.sizeof(koffi.types.long));
|
|
541
549
|
```
|
|
542
550
|
|
|
543
|
-
|
|
551
|
+
### Type aliases
|
|
544
552
|
|
|
545
553
|
You can alias a type with `koffi.alias(name, type)`. Aliased types are completely equivalent.
|
package/package.json
CHANGED
package/src/abi_arm32.cc
CHANGED
|
@@ -539,7 +539,7 @@ Napi::Value CallData::Complete()
|
|
|
539
539
|
};
|
|
540
540
|
|
|
541
541
|
switch (func->ret.type->primitive) {
|
|
542
|
-
case PrimitiveKind::Void: return env.
|
|
542
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
543
543
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
544
544
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
545
545
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/abi_arm64.cc
CHANGED
|
@@ -560,7 +560,7 @@ Napi::Value CallData::Complete()
|
|
|
560
560
|
};
|
|
561
561
|
|
|
562
562
|
switch (func->ret.type->primitive) {
|
|
563
|
-
case PrimitiveKind::Void: return env.
|
|
563
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
564
564
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
565
565
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
566
566
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/abi_riscv64.cc
CHANGED
|
@@ -473,7 +473,7 @@ Napi::Value CallData::Complete()
|
|
|
473
473
|
};
|
|
474
474
|
|
|
475
475
|
switch (func->ret.type->primitive) {
|
|
476
|
-
case PrimitiveKind::Void: return env.
|
|
476
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
477
477
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
478
478
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
479
479
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/abi_x64_sysv.cc
CHANGED
|
@@ -531,7 +531,7 @@ Napi::Value CallData::Complete()
|
|
|
531
531
|
};
|
|
532
532
|
|
|
533
533
|
switch (func->ret.type->primitive) {
|
|
534
|
-
case PrimitiveKind::Void: return env.
|
|
534
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
535
535
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
536
536
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
537
537
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/abi_x64_win.cc
CHANGED
|
@@ -339,7 +339,7 @@ Napi::Value CallData::Complete()
|
|
|
339
339
|
};
|
|
340
340
|
|
|
341
341
|
switch (func->ret.type->primitive) {
|
|
342
|
-
case PrimitiveKind::Void: return env.
|
|
342
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
343
343
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
344
344
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
345
345
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/abi_x86.cc
CHANGED
|
@@ -413,7 +413,7 @@ Napi::Value CallData::Complete()
|
|
|
413
413
|
};
|
|
414
414
|
|
|
415
415
|
switch (func->ret.type->primitive) {
|
|
416
|
-
case PrimitiveKind::Void: return env.
|
|
416
|
+
case PrimitiveKind::Void: return env.Undefined();
|
|
417
417
|
case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
|
|
418
418
|
case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
|
|
419
419
|
case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
|
package/src/ffi.cc
CHANGED
|
@@ -518,7 +518,7 @@ static Napi::Value CallFree(const Napi::CallbackInfo &info)
|
|
|
518
518
|
|
|
519
519
|
free(ptr);
|
|
520
520
|
|
|
521
|
-
return env.
|
|
521
|
+
return env.Undefined();
|
|
522
522
|
}
|
|
523
523
|
|
|
524
524
|
static Napi::Value CreateArrayType(const Napi::CallbackInfo &info)
|
|
@@ -1109,7 +1109,7 @@ static Napi::Value TranslateAsyncCall(const Napi::CallbackInfo &info)
|
|
|
1109
1109
|
}
|
|
1110
1110
|
async->Queue();
|
|
1111
1111
|
|
|
1112
|
-
return env.
|
|
1112
|
+
return env.Undefined();
|
|
1113
1113
|
}
|
|
1114
1114
|
|
|
1115
1115
|
static Napi::Value FindLibraryFunction(const Napi::CallbackInfo &info, CallConvention convention)
|
|
@@ -1350,7 +1350,7 @@ static Napi::Value UnregisterCallback(const Napi::CallbackInfo &info)
|
|
|
1350
1350
|
|
|
1351
1351
|
if (GetTrampoline(idx, trampoline.proto) == ptr) {
|
|
1352
1352
|
instance->registered_trampolines &= ~(1u << i);
|
|
1353
|
-
return env.
|
|
1353
|
+
return env.Undefined();
|
|
1354
1354
|
}
|
|
1355
1355
|
}
|
|
1356
1356
|
|
package/test/sqlite.js
CHANGED
|
@@ -20,7 +20,7 @@ const fs = require('fs');
|
|
|
20
20
|
const os = require('os');
|
|
21
21
|
const path = require('path');
|
|
22
22
|
|
|
23
|
-
const
|
|
23
|
+
const sqlite3 = koffi.handle('sqlite3');
|
|
24
24
|
const sqlite3_stmt = koffi.handle('sqlite3_stmt');
|
|
25
25
|
|
|
26
26
|
main();
|
|
@@ -39,9 +39,9 @@ async function test() {
|
|
|
39
39
|
let lib_filename = path.dirname(__filename) + '/build/sqlite3' + koffi.extension;
|
|
40
40
|
let lib = koffi.load(lib_filename);
|
|
41
41
|
|
|
42
|
-
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['str', koffi.out(koffi.pointer(
|
|
43
|
-
const sqlite3_exec = lib.func('sqlite3_exec', 'int', [koffi.pointer(
|
|
44
|
-
const sqlite3_prepare_v2 = lib.func('sqlite3_prepare_v2', 'int', [koffi.pointer(
|
|
42
|
+
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['str', koffi.out(koffi.pointer(sqlite3, 2)), 'int', 'str']);
|
|
43
|
+
const sqlite3_exec = lib.func('sqlite3_exec', 'int', [koffi.pointer(sqlite3), 'str', 'void *', 'void *', 'void *']);
|
|
44
|
+
const sqlite3_prepare_v2 = lib.func('sqlite3_prepare_v2', 'int', [koffi.pointer(sqlite3), 'str', 'int', koffi.out(koffi.pointer(sqlite3_stmt, 2)), 'string']);
|
|
45
45
|
const sqlite3_reset = lib.func('sqlite3_reset', 'int', [koffi.pointer(sqlite3_stmt)]);
|
|
46
46
|
const sqlite3_bind_text = lib.func('sqlite3_bind_text', 'int', [koffi.pointer(sqlite3_stmt), 'int', 'str', 'int', 'void *']);
|
|
47
47
|
const sqlite3_bind_int = lib.func('sqlite3_bind_int', 'int', [koffi.pointer(sqlite3_stmt), 'int', 'int']);
|
|
@@ -49,7 +49,7 @@ async function test() {
|
|
|
49
49
|
const sqlite3_column_int = lib.func('sqlite3_column_int', 'int', [koffi.pointer(sqlite3_stmt), 'int']);
|
|
50
50
|
const sqlite3_step = lib.func('sqlite3_step', 'int', [koffi.pointer(sqlite3_stmt)]);
|
|
51
51
|
const sqlite3_finalize = lib.func('sqlite3_finalize', 'int', [koffi.pointer(sqlite3_stmt)]);
|
|
52
|
-
const sqlite3_close_v2 = lib.func('sqlite3_close_v2', 'int', [koffi.pointer(
|
|
52
|
+
const sqlite3_close_v2 = lib.func('sqlite3_close_v2', 'int', [koffi.pointer(sqlite3)]);
|
|
53
53
|
|
|
54
54
|
const SQLITE_OPEN_READWRITE = 0x2;
|
|
55
55
|
const SQLITE_OPEN_CREATE = 0x4;
|
package/test/sync.js
CHANGED
|
@@ -372,10 +372,12 @@ async function test() {
|
|
|
372
372
|
let out1 = Array(10);
|
|
373
373
|
let out2 = new Int32Array(10);
|
|
374
374
|
let mult = -3;
|
|
375
|
+
let ret = null;
|
|
375
376
|
|
|
376
377
|
FillRange(2, 7, out1, out1.length);
|
|
377
|
-
FillRange(13, 3, out2, out2.length);
|
|
378
|
+
ret = FillRange(13, 3, out2, out2.length);
|
|
378
379
|
|
|
380
|
+
assert.strictEqual(ret, undefined);
|
|
379
381
|
assert.deepEqual(out1, [2, 9, 16, 23, 30, 37, 44, 51, 58, 65]);
|
|
380
382
|
assert.deepEqual(out2, new Int32Array([13, 16, 19, 22, 25, 28, 31, 34, 37, 40]));
|
|
381
383
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|