koffi 1.3.6 → 1.3.7
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 +13 -0
- package/benchmark/atoi_koffi.js +1 -1
- package/benchmark/raylib_koffi.js +4 -4
- package/build/qemu/1.3.7/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.3.7/koffi_win32_x64.tar.gz +0 -0
- package/doc/_static/perf_linux_20220628.png +0 -0
- package/doc/benchmarks.xlsx +0 -0
- package/doc/contribute.md +3 -6
- package/doc/dist/doctrees/changes.doctree +0 -0
- package/doc/dist/doctrees/contribute.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/start.doctree +0 -0
- package/doc/dist/doctrees/types.doctree +0 -0
- package/doc/dist/html/_sources/contribute.md.txt +3 -6
- package/doc/dist/html/_sources/functions.md.txt +9 -8
- package/doc/dist/html/_sources/start.md.txt +2 -2
- package/doc/dist/html/_sources/types.md.txt +15 -11
- package/doc/dist/html/_static/basic.css +12 -14
- package/doc/dist/html/_static/perf_linux_20220628.png +0 -0
- package/doc/dist/html/benchmarks.html +1 -1
- package/doc/dist/html/changes.html +16 -1
- package/doc/dist/html/contribute.html +4 -7
- package/doc/dist/html/functions.html +18 -17
- package/doc/dist/html/genindex.html +1 -1
- package/doc/dist/html/index.html +4 -3
- package/doc/dist/html/memory.html +1 -1
- package/doc/dist/html/objects.inv +0 -0
- package/doc/dist/html/platforms.html +2 -2
- package/doc/dist/html/search.html +1 -1
- package/doc/dist/html/searchindex.js +1 -1
- package/doc/dist/html/start.html +3 -3
- package/doc/dist/html/types.html +30 -10
- package/doc/functions.md +9 -8
- package/doc/start.md +2 -2
- package/doc/types.md +15 -11
- package/package.json +1 -1
- package/qemu/qemu.js +12 -2
- package/src/call.cc +17 -9
- package/src/ffi.cc +14 -5
- package/src/ffi.hh +0 -1
- package/src/util.cc +1 -1
- package/test/async.js +1 -1
- package/test/callbacks.js +25 -2
- package/test/misc.c +52 -2
- package/test/raylib.js +4 -4
- package/test/sqlite.js +5 -5
- package/test/sync.js +22 -7
- package/build/qemu/1.3.6/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.3.6/koffi_win32_x64.tar.gz +0 -0
package/doc/dist/html/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Requirements" href="platforms" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
</div>
|
|
205
205
|
<article role="main">
|
|
206
206
|
<section id="koffi-version">
|
|
207
|
-
<h1>Koffi 1.3.
|
|
207
|
+
<h1>Koffi 1.3.7<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
|
|
208
208
|
<section id="overview">
|
|
209
209
|
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading">#</a></h2>
|
|
210
210
|
<p>Koffi is a <strong>fast and easy-to-use C FFI module for Node.js</strong>, featuring:</p>
|
|
@@ -270,6 +270,7 @@
|
|
|
270
270
|
</ul>
|
|
271
271
|
</li>
|
|
272
272
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a><ul>
|
|
273
|
+
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-7">Koffi 1.3.7</a></li>
|
|
273
274
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-6">Koffi 1.3.6</a></li>
|
|
274
275
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-5">Koffi 1.3.5</a></li>
|
|
275
276
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-4">Koffi 1.3.4</a></li>
|
|
@@ -339,7 +340,7 @@
|
|
|
339
340
|
<div class="toc-tree-container">
|
|
340
341
|
<div class="toc-tree">
|
|
341
342
|
<ul>
|
|
342
|
-
<li><a class="reference internal" href="#">Koffi 1.3.
|
|
343
|
+
<li><a class="reference internal" href="#">Koffi 1.3.7</a><ul>
|
|
343
344
|
<li><a class="reference internal" href="#overview">Overview</a></li>
|
|
344
345
|
<li><a class="reference internal" href="#table-of-contents">Table of contents</a></li>
|
|
345
346
|
<li><a class="reference internal" href="#license">License</a></li>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Benchmarks" href="benchmarks" /><link rel="prev" title="Function calls" href="functions" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Memory usage - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
Binary file
|
|
@@ -3,9 +3,9 @@
|
|
|
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 1.3.
|
|
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 1.3.7" href="index" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Requirements - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="#" />
|
|
6
6
|
|
|
7
|
-
<meta name="generator" content="sphinx-5.0.
|
|
7
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/><title>Search - Koffi</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
8
8
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/custom.css" />
|
|
@@ -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", "Function calls", "Koffi 1.3.6", "Memory usage", "Requirements", "Quick start", "Data types"], "terms": {"here": [0, 2, 3, 4, 8], "quick": [0, 4], "execut": [0, 3], "time": [0, 2, 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, 3, 4, 7], "implement": [0, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": 0, "n": [0, 2, 4, 6, 7, 8], "api": [0, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 5, 6, 7, 8], "first": [0, 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, "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, 3, 8], "an": [0, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 3, 4, 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, 2, 6, 7], "take": [0, 3, 8], "string": [0, 1, 2, 3, 5, 7], "paramet": [0, 4, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3], "convers": [0, 1, 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, 5], "thu": 0, "reduc": [0, 1], "In": [0, 3, 8], "baselin": 0, "full": [0, 2, 8], "version": [0, 1, 2, 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, 1], "raylib_koffi": 0, "311": 0, "6": [0, 3, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 4, 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, 4, 8], "211": 0, "8": [0, 2, 3, 4, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 4, 5, 6, 8], "23": 0, "334": 0, "pleas": 0, "note": [0, 2, 8], "order": [0, 2, 3], "get": [0, 2, 5, 7, 8], "fair": 0, "number": [0, 1, 5, 8], "wa": 0, "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": 0, "clangcl": 0, "open": [0, 3, 8], "consol": [0, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "abov": [], "you": [2, 3, 4, 6, 7, 8], "can": [1, 2, 3, 4, 5, 6, 7, 8], "too": [], "toolset": [], "onc": [0, 2, 3, 5, 7, 8], "everyth": [0, 2], "built": 0, "readi": 0, "main": [1, 3], "chang": [1, 2, 3, 5, 8], "fix": [1, 2, 4], "memori": [1, 2, 3, 4, 8], "leak": 1, "when": [1, 2, 3, 5, 8], "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "add": [1, 2, 8], "configur": [1, 2], "maximum": [1, 5], "max_async_cal": [1, 5], "other": [1, 3, 8], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 2, 5], "size": [1, 2, 4, 5], "variou": [1, 2], "document": [1, 8], "improv": 1, "possibl": [1, 2, 8], "openbsd": [1, 6], "i386": 1, "crash": [1, 3], "void": [1, 3, 7, 8], "misconvers": 1, "sign": [1, 8], "integ": [1, 3, 8], "return": [1, 3, 8], "valu": [1, 3, 4, 7, 8], "unsign": [1, 3, 7, 8], "support": [1, 2, 3, 4, 8], "empti": 1, "signatur": 1, "disabl": [1, 2], "unsaf": 1, "optim": [1, 2], "14": [1, 6, 8], "mode": 1, "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "linux": [1, 2, 4, 6], "debian": [1, 2], "prebuilt": [1, 2, 6], "binari": [0, 1, 2, 6], "instal": [1, 2, 4, 6], "rebuild": 1, "happen": [1, 3, 5, 8], "fail": [1, 2, 3, 8], "load": [1, 3, 7, 8], "major": [1, 2], "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, 4, 7, 8], "mix": [1, 2, 8], "convert": [1, 3, 8], "null": [1, 3, 7, 8], "instead": [1, 2, 8], "struct": [1, 2, 4, 5, 7], "member": [1, 3, 8], "callback": [1, 4, 5, 6, 8], "hint": [1, 8], "char": [1, 3, 7, 8], "char16": [1, 8], "char16_t": [1, 8], "definit": [1, 4, 8], "long": [1, 8], "type": [1, 2, 3, 4, 7], "window": [1, 4, 6], "x64": 1, "llp64": [1, 8], "model": 1, "restrict": [1, 2], "automat": [1, 2, 3, 8], "detect": 1, "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 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, 7, 8], "A": [1, 6, 8], "maco": [1, 2, 6], "m1": 1, "includ": [1, 2, 3, 6, 8], "entri": 1, "sinc": [1, 4], "cdecl": [1, 3, 6], "stdcall": [1, 3, 6, 7], "all": [0, 1, 6, 8], "platform": [1, 3, 4, 5, 8], "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, 4, 5], "asynchron": [1, 4, 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, "error": [1, 3, 8], "push": [1, 8], "pop": 1, "issu": [1, 2, 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], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 2, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": 2, "monorepo": 2, "contain": [2, 8], "multipl": 2, "project": 2, "idea": 2, "github": 2, "com": 2, "koromix": 2, "provid": [2, 3, 8], "packag": [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], "want": [2, 7], "hack": 2, "specif": [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, "system": [1, 2, 7], "12": [2, 6], "later": [2, 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": [2, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [2, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 5], "file": [2, 3, 8], "For": [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], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [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, 5], "step": 2, "more": [2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": 2, "some": [2, 8], "debug": 2, "manual": 2, "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": 2, "displai": 2, "krdc": 2, "compat": 2, "viewer": 2, "info": 2, "port": 2, "after": [2, 3], "releas": 2, "1": [2, 5, 6, 7, 8], "0": [2, 3, 4, 6, 8], "current": [2, 7, 8], "prioriti": 2, "next": [2, 8], "pass": [2, 3, 8], "avoid": [2, 8], "properti": 2, "helper": 2, "better": 2, "wai": [2, 7, 8], "deal": [2, 3, 8], "caller": 2, "etc": [2, 3], "plan": 2, "eventu": 2, "necessarili": 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": [2, 7, 8], "work": [2, 4], "parser": [2, 3], "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], "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "prefer": [0, 2, 3], "goe": 2, "rather": 2, "like": [2, 7, 8], "care": 2, "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "except": [2, 3], "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [3, 7, 8], "requir": [3, 4, 7, 8], "lib": [3, 7, 8], "path": [3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "from": [3, 4, 6, 8], "two": [3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [3, 7, 8], "int": [3, 7, 8], "atoi": 3, "tri": 3, "convent": [3, 6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [3, 4, 8], "subject": 3, "shown": 3, "fmt": 3, "onli": [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": [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], "str": [3, 8], "1257": 3, "log": [3, 5, 8], "result": [3, 7, 8], "hello": [3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [3, 4], "respons": 3, "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": 3, "promisifi": 3, "cannot": [3, 5, 8], "must": 3, "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 4, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 8], "simplic": 3, "semant": [3, 8], "primit": [3, 4], "marshal": 3, "out": [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": [3, 5, 7, 8], "databas": 3, "sqlite3_db": 3, "copi": [3, 8], "sqlite3_open_v2": 3, "sqlite_open_readwrit": 3, "0x2": 3, "sqlite_open_cr": 3, "0x4": [3, 7], "db": 3, "throw": [3, 8], "sqlite3_close_v2": 3, "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "part": 3, "h": [3, 8], "transfertoj": 3, "ag": 3, "cb": 3, "buf": 3, "snprintf": 3, "sizeof": [3, 8], "transfercallback": 3, "ret": [3, 7], "niel": 3, "27": 3, "42": [3, 8], "precis": [3, 6], "intepret": 3, "anoth": [3, 7, 8], "undefin": [3, 8], "behavior": [3, 8], "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], "introspect": 4, "variad": [4, 7], "thread": 4, "safeti": 4, "x86_64": [4, 6], "contribut": 4, "bug": [1, 4], "request": 4, "sourc": [4, 6], "todo": 4, "list": [4, 8], "changelog": 4, "free": [4, 8], "softwar": 4, "redistribut": 4, "modifi": [4, 8], "under": 4, "term": 4, "affero": 4, "gener": [4, 8], "public": 4, "publish": 4, "foundat": 4, "either": [4, 8], "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": 5, "mib": 5, "unless": 5, "veri": 5, "extra": 5, "ever": 5, "dure": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "made": [0, 5], "unus": 5, "resid": 5, "still": 5, "finish": 5, "freed": 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, "x": [6, 8], "15": [1, 6, 8], "16": [6, 7, 8], "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": 6, "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "differ": [6, 8], "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": 7, "languag": 7, "syntax": 7, "localtime_r": 7, "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, "02d": 7, "target": 7, "messagebox": 7, "messag": 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, "string16": [7, 8], "box": 7, "while": 8, "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": 8, "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "defin": 8, "few": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "line": 8, "struct1": 8, "dummi": 8, "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "omit": 8, "anonym": 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, "distinguish": 8, "them": 8, "fall": 8, "expens": 8, "doe": 8, "someth": 8, "stabil": 8, "prevent": 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": 8, "fclose": 8, "manipul": 8, "fread": 8, "ftell": 8, "manag": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatnewout": 8, "concatfre": 8, "fpic": 8, "wall": 8, "o2": 8, "stdlib": 8, "stdbool": 8, "errno": 8, "fragment": 8, "size_t": 8, "len": 8, "concat": 8, "total": 8, "malloc": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "try": 8, "failur": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "yourself": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "ptr": 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": 8, "element": 8, "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": 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, "explicitli": 8, "ask": 8, "explor": 8, "alignof": 8, "prebuild": 1, "incompat": 1}, "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], "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": 3, "asynchron": 3, "variad": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [3, 8], "handl": [3, 8], "javascript": 3, "callback": 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, "js": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": 8, "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": 8, "6": [1, 4]}, "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", "Function calls", "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, 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, 3, 4, 7], "implement": [0, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": 0, "n": [0, 2, 4, 6, 7, 8], "api": [0, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 5, 6, 7, 8], "first": [0, 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, "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, 3, 8], "an": [0, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 3, 4, 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, 2, 6, 7], "take": [0, 3, 8], "string": [0, 1, 2, 3, 5, 7], "paramet": [0, 4, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3], "convers": [0, 1, 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, 5], "thu": 0, "reduc": [0, 1], "In": [0, 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, 1], "raylib_koffi": 0, "311": 0, "6": [0, 3, 4, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 4, 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, 4, 8], "211": 0, "8": [0, 2, 3, 4, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 4, 5, 6, 8], "23": 0, "334": 0, "pleas": 0, "note": [0, 2, 8], "order": [0, 2, 3], "get": [0, 2, 5, 7, 8], "fair": 0, "number": [0, 1, 5, 8], "wa": 0, "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": 0, "clangcl": 0, "open": [0, 3, 8], "consol": [0, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "all": [0, 1, 6, 8], "made": [0, 5], "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], "crash": [1, 3], "when": [1, 2, 3, 5, 8], "callback": [1, 4, 5, 6, 8], "insid": 1, "struct": [1, 2, 4, 5, 7], "support": [1, 2, 3, 4, 8], "null": [1, 3, 7, 8], "record": 1, "member": [1, 3, 8], "other": [1, 3, 8], "chang": [1, 2, 3, 5, 8], "add": [1, 2, 8], "intptr_t": [1, 8], "uintptr_t": [1, 8], "primit": [1, 3, 4], "type": [1, 2, 3, 4, 7], "variou": [1, 2], "document": [1, 8], "improv": [1, 2], "instal": [1, 2, 4, 6], "error": [1, 3, 8], "15": [1, 6, 8], "window": [1, 4, 6], "system": [1, 2, 7], "bug": [1, 4], "detect": 1, "incompat": 1, "prebuild": 1, "x64": 1, "linux": [1, 2, 4, 6], "memori": [1, 2, 3, 4, 8], "leak": 1, "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "configur": [1, 2], "maximum": [1, 5], "max_async_cal": [1, 5], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 2, 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, 3, 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, "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "debian": [1, 2], "prebuilt": [1, 2, 6], "rebuild": 1, "happen": [1, 3, 5, 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, 4, 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], "automat": [1, 2, 3, 8], "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 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, 7, 8], "A": [1, 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], "platform": [1, 3, 4, 5, 8], "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, 4, 5], "asynchron": [1, 4, 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, 2, 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], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 2, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": 2, "monorepo": 2, "contain": [2, 8], "multipl": 2, "project": 2, "idea": 2, "github": 2, "com": 2, "koromix": 2, "provid": [2, 3, 8], "packag": [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": [2, 3, 4, 6, 7, 8], "want": [2, 7], "hack": 2, "specif": [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, 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": [2, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [2, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 5], "file": [2, 3, 8], "For": [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], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [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, 5], "step": 2, "more": [2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": 2, "some": [2, 8], "debug": 2, "manual": 2, "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": 2, "displai": 2, "krdc": 2, "compat": 2, "viewer": 2, "info": 2, "port": 2, "plan": 2, "necessarili": 2, "better": 2, "wai": [2, 7, 8], "deal": [2, 3, 8], "caller": 2, "etc": [2, 3], "pass": [2, 3, 8], "avoid": [2, 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": [2, 7, 8], "parser": [2, 3], "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], "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "goe": 2, "rather": 2, "like": [2, 7, 8], "care": 2, "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "except": [2, 3], "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [3, 7, 8], "requir": [3, 4, 7, 8], "lib": [3, 7, 8], "path": [3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "from": [3, 4, 6, 8], "two": [3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [3, 7, 8], "int": [3, 7, 8], "str": [1, 3, 7, 8], "atoi": 3, "tri": 3, "convent": [3, 6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [3, 4, 8], "subject": 3, "shown": 3, "fmt": 3, "onli": [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": [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": [3, 5, 8], "result": [3, 7, 8], "hello": [3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [3, 4], "respons": 3, "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": 3, "promisifi": 3, "cannot": [3, 5, 8], "must": 3, "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 4, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 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_": [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": [3, 5, 7, 8], "databas": 3, "sqlite3_db": 3, "copi": [3, 8], "after": 3, "sqlite3_open_v2": 3, "sqlite3_close_v2": 3, "sqlite_open_readwrit": 3, "0x2": 3, "sqlite_open_cr": 3, "0x4": [3, 7], "db": 3, "0": [3, 4, 6, 8], "throw": [3, 8], "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "part": 3, "h": [3, 8], "transfertoj": 3, "ag": 3, "cb": 3, "buf": 3, "snprintf": 3, "sizeof": [3, 8], "transfercallback": 3, "ret": [3, 7], "niel": 3, "27": 3, "42": [3, 8], "precis": [3, 6], "intepret": 3, "anoth": [3, 7, 8], "undefin": [3, 8], "behavior": [3, 8], "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], "introspect": 4, "variad": [4, 7], "thread": 4, "safeti": 4, "work": 4, "x86_64": [4, 6], "contribut": 4, "request": 4, "sourc": [4, 6], "todo": 4, "list": [4, 8], "changelog": 4, "free": [4, 8], "softwar": 4, "redistribut": 4, "modifi": [4, 8], "under": 4, "term": 4, "affero": 4, "gener": [4, 8], "public": 4, "publish": 4, "foundat": 4, "either": [4, 8], "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": [5, 8], "1": [5, 6, 7, 8], "mib": 5, "unless": 5, "veri": 5, "extra": 5, "ever": 5, "dure": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "unus": 5, "resid": 5, "still": 5, "finish": 5, "freed": 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, "x": [6, 8], "16": [6, 7, 8], "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": 6, "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "differ": [6, 8], "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": 7, "languag": 7, "syntax": 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, "02d": 7, "target": 7, "messagebox": 7, "messag": 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, "str16": [1, 7, 8], "box": 7, "while": 8, "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": 8, "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "defin": 8, "few": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "intptr": 8, "width": 8, "uintptr": 8, "string16": [1, 8], "line": 8, "struct1": 8, "dummi": 8, "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "omit": 8, "anonym": 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, "distinguish": 8, "them": 8, "fall": 8, "expens": 8, "doe": 8, "someth": 8, "stabil": 8, "prevent": 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": 8, "fclose": 8, "manipul": 8, "fread": 8, "ftell": 8, "manag": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatnewout": 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, "malloc": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "try": 8, "failur": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "yourself": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "ptr": 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": 8, "element": 8, "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": 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, "explicitli": 8, "ask": 8, "explor": 8, "alignof": 8, "alias": 1}, "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], "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": 3, "asynchron": 3, "variad": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [3, 8], "handl": [3, 8], "javascript": 3, "callback": 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, "js": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": 8, "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": 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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Data types" href="types" /><link rel="prev" title="Requirements" href="platforms" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Quick start - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -288,8 +288,8 @@
|
|
|
288
288
|
<span class="linenos">13</span><span class="kd">const</span><span class="w"> </span><span class="nx">IDNO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">7</span><span class="p">;</span><span class="w"></span>
|
|
289
289
|
<span class="linenos">14</span>
|
|
290
290
|
<span class="linenos">15</span><span class="c1">// Find functions</span><span class="w"></span>
|
|
291
|
-
<span class="linenos">16</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxA'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'
|
|
292
|
-
<span class="linenos">17</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxW</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxW'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'
|
|
291
|
+
<span class="linenos">16</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxA'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'uint'</span><span class="p">]);</span><span class="w"></span>
|
|
292
|
+
<span class="linenos">17</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxW</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxW'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str16'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str16'</span><span class="p">,</span><span class="w"> </span><span class="s1">'uint'</span><span class="p">]);</span><span class="w"></span>
|
|
293
293
|
<span class="linenos">18</span>
|
|
294
294
|
<span class="linenos">19</span><span class="kd">let</span><span class="w"> </span><span class="nx">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MessageBoxA</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="s1">'Do you want another message box?'</span><span class="p">,</span><span class="w"> </span><span class="s1">'Koffi'</span><span class="p">,</span><span class="w"> </span><span class="nx">MB_YESNO</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">MB_ICONQUESTION</span><span class="p">);</span><span class="w"></span>
|
|
295
295
|
<span class="linenos">20</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">ret</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">IDYES</span><span class="p">)</span><span class="w"></span>
|
package/doc/dist/html/types.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Function calls" href="functions" /><link rel="prev" title="Quick start" href="start" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Data types - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -464,13 +464,33 @@
|
|
|
464
464
|
<td><p>Unsigned</p></td>
|
|
465
465
|
<td><p>4 or 8 bytes depending on platform (LP64, LLP64)</p></td>
|
|
466
466
|
</tr>
|
|
467
|
+
<tr class="row-even"><td><p>Number (integer)</p></td>
|
|
468
|
+
<td><p>intptr</p></td>
|
|
469
|
+
<td><p>Signed</p></td>
|
|
470
|
+
<td><p>4 or 8 bytes depending on register width</p></td>
|
|
471
|
+
</tr>
|
|
472
|
+
<tr class="row-odd"><td><p>Number (integer)</p></td>
|
|
473
|
+
<td><p>intptr_t</p></td>
|
|
474
|
+
<td><p>Signed</p></td>
|
|
475
|
+
<td><p>4 or 8 bytes depending on register width</p></td>
|
|
476
|
+
</tr>
|
|
477
|
+
<tr class="row-even"><td><p>Number (integer)</p></td>
|
|
478
|
+
<td><p>uintptr</p></td>
|
|
479
|
+
<td><p>Unsigned</p></td>
|
|
480
|
+
<td><p>4 or 8 bytes depending on register width</p></td>
|
|
481
|
+
</tr>
|
|
482
|
+
<tr class="row-odd"><td><p>Number (integer)</p></td>
|
|
483
|
+
<td><p>uintptr_t</p></td>
|
|
484
|
+
<td><p>Unsigned</p></td>
|
|
485
|
+
<td><p>4 or 8 bytes depending on register width</p></td>
|
|
486
|
+
</tr>
|
|
467
487
|
<tr class="row-even"><td><p>String</p></td>
|
|
468
|
-
<td><p>string</p></td>
|
|
488
|
+
<td><p>str (string)</p></td>
|
|
469
489
|
<td><p></p></td>
|
|
470
490
|
<td><p>JS strings are converted to and from UTF-8</p></td>
|
|
471
491
|
</tr>
|
|
472
492
|
<tr class="row-odd"><td><p>String</p></td>
|
|
473
|
-
<td><p>string16</p></td>
|
|
493
|
+
<td><p>str16 (string16)</p></td>
|
|
474
494
|
<td><p></p></td>
|
|
475
495
|
<td><p>JS strings are converted to and from UTF-16 (LE)</p></td>
|
|
476
496
|
</tr>
|
|
@@ -503,7 +523,7 @@
|
|
|
503
523
|
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">A</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">'A'</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
|
504
524
|
<span class="linenos">2</span><span class="w"> </span><span class="nx">a</span><span class="o">:</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"></span>
|
|
505
525
|
<span class="linenos">3</span><span class="w"> </span><span class="nx">b</span><span class="o">:</span><span class="w"> </span><span class="s1">'char'</span><span class="p">,</span><span class="w"></span>
|
|
506
|
-
<span class="linenos">4</span><span class="w"> </span><span class="nx">c</span><span class="o">:</span><span class="w"> </span><span class="s1">'
|
|
526
|
+
<span class="linenos">4</span><span class="w"> </span><span class="nx">c</span><span class="o">:</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"></span>
|
|
507
527
|
<span class="linenos">5</span><span class="w"> </span><span class="nx">d</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span><span class="w"></span>
|
|
508
528
|
<span class="linenos">6</span><span class="w"> </span><span class="nx">d1</span><span class="o">:</span><span class="w"> </span><span class="s1">'double'</span><span class="p">,</span><span class="w"></span>
|
|
509
529
|
<span class="linenos">7</span><span class="w"> </span><span class="nx">d2</span><span class="o">:</span><span class="w"> </span><span class="s1">'double'</span><span class="w"></span>
|
|
@@ -678,11 +698,11 @@
|
|
|
678
698
|
<span class="linenos"> 2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">'./handles.so'</span><span class="p">);</span><span class="w"></span>
|
|
679
699
|
<span class="linenos"> 3</span>
|
|
680
700
|
<span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">Concat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">'Concat'</span><span class="p">);</span><span class="w"></span>
|
|
681
|
-
<span class="linenos"> 5</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
682
|
-
<span class="linenos"> 6</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
683
|
-
<span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
684
|
-
<span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
685
|
-
<span class="linenos"> 9</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
701
|
+
<span class="linenos"> 5</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatNew</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'Concat ConcatNew()'</span><span class="p">);</span><span class="w"></span>
|
|
702
|
+
<span class="linenos"> 6</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatFree</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'void ConcatFree(Concat c)'</span><span class="p">);</span><span class="w"></span>
|
|
703
|
+
<span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatAppend</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'bool ConcatAppend(Concat c, const char *frag)'</span><span class="p">);</span><span class="w"></span>
|
|
704
|
+
<span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatBuild</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'const char *ConcatBuild(Concat c)'</span><span class="p">);</span><span class="w"></span>
|
|
705
|
+
<span class="linenos"> 9</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatNewOut</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'bool ConcatNewOut(_Out_ Concat out)'</span><span class="p">);</span><span class="w"></span>
|
|
686
706
|
<span class="linenos">10</span>
|
|
687
707
|
<span class="linenos">11</span><span class="kd">let</span><span class="w"> </span><span class="nx">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">ConcatNew</span><span class="p">();</span><span class="w"></span>
|
|
688
708
|
<span class="linenos">12</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">c</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
|
@@ -786,7 +806,7 @@
|
|
|
786
806
|
<span class="linenos">22</span><span class="w"> </span><span class="nx">wFinderFlags</span><span class="o">:</span><span class="w"> </span><span class="s1">'ushort'</span><span class="w"> </span><span class="c1">// Obsolete. Do not use</span><span class="w"></span>
|
|
787
807
|
<span class="linenos">23</span><span class="p">});</span><span class="w"></span>
|
|
788
808
|
<span class="linenos">24</span>
|
|
789
|
-
<span class="linenos">25</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindFirstFile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'HANDLE __stdcall FindFirstFileW(
|
|
809
|
+
<span class="linenos">25</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindFirstFile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'HANDLE __stdcall FindFirstFileW(str16 path, _Out_ WIN32_FIND_DATA *data)'</span><span class="p">);</span><span class="w"></span>
|
|
790
810
|
<span class="linenos">26</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindNextFile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'bool __stdcall FindNextFileW(HANDLE h, _Out_ WIN32_FIND_DATA *data)'</span><span class="p">);</span><span class="w"></span>
|
|
791
811
|
<span class="linenos">27</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindClose</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'bool __stdcall FindClose(HANDLE h)'</span><span class="p">);</span><span class="w"></span>
|
|
792
812
|
<span class="linenos">28</span><span class="kd">const</span><span class="w"> </span><span class="nx">GetLastError</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'uint GetLastError()'</span><span class="p">);</span><span class="w"></span>
|
package/doc/functions.md
CHANGED
|
@@ -19,8 +19,8 @@ You can use the returned object to load C functions from the library. To do so,
|
|
|
19
19
|
To declare a function, you need to specify its non-mangled name, its return type, and its parameters. Use an ellipsis as the last parameter for variadic functions.
|
|
20
20
|
|
|
21
21
|
```js
|
|
22
|
-
const printf = lib.func('printf', 'int', ['
|
|
23
|
-
const atoi = lib.func('atoi', 'int', ['
|
|
22
|
+
const printf = lib.func('printf', 'int', ['str', '...']);
|
|
23
|
+
const atoi = lib.func('atoi', 'int', ['str']);
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
Koffi automatically tries mangled names for non-standard x86 calling conventions. See the section [on standard calls](#synchronous-calls) for more information on this subject.
|
|
@@ -31,7 +31,7 @@ If you prefer, you can declare functions using simple C-like prototype strings,
|
|
|
31
31
|
|
|
32
32
|
```js
|
|
33
33
|
const printf = lib.func('int printf(const char *fmt, ...)');
|
|
34
|
-
const atoi = lib.func('int atoi(
|
|
34
|
+
const atoi = lib.func('int atoi(str)'); // The parameter name is not used by Koffi, and optional
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
You can use `()` or `(void)` for functions that take no argument.
|
|
@@ -58,8 +58,8 @@ const koffi = require('koffi');
|
|
|
58
58
|
const lib = koffi.load('user32.dll');
|
|
59
59
|
|
|
60
60
|
// The following two declarations are equivalent, and use Stdcall
|
|
61
|
-
const MessageBoxA_1 = lib.stdcall('MessageBoxA', 'int', ['void *', '
|
|
62
|
-
const MessageBoxA_2 = lib.func('int __stdcall MessageBoxA(void *hwnd,
|
|
61
|
+
const MessageBoxA_1 = lib.stdcall('MessageBoxA', 'int', ['void *', 'str', 'str', 'uint']);
|
|
62
|
+
const MessageBoxA_2 = lib.func('int __stdcall MessageBoxA(void *hwnd, str text, str caption, uint type)');
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
## Asynchronous calls
|
|
@@ -95,10 +95,10 @@ Variadic functions are declared with an ellipsis as the last argument.
|
|
|
95
95
|
In order to call a variadic function, you must provide two Javascript arguments for each additional C parameter, the first one is the expected type and the second one is the value.
|
|
96
96
|
|
|
97
97
|
```js
|
|
98
|
-
const printf = lib.func('printf', 'int', ['
|
|
98
|
+
const printf = lib.func('printf', 'int', ['str', '...']);
|
|
99
99
|
|
|
100
100
|
// The variadic arguments are: 6 (int), 8.5 (double), 'THE END' (const char *)
|
|
101
|
-
printf('Integer %d, double %g,
|
|
101
|
+
printf('Integer %d, double %g, str %s', 'int', 6, 'double', 8.5, 'str', 'THE END');
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
On x86 platforms, only the Cdecl convention can be used for variadic functions.
|
|
@@ -159,7 +159,8 @@ const lib = koffi.load('sqlite.so');
|
|
|
159
159
|
const sqlite3_db = koffi.handle('sqlite3_db');
|
|
160
160
|
|
|
161
161
|
// Use koffi.out() on a pointer to copy out (from C to JS) after the call
|
|
162
|
-
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['
|
|
162
|
+
const sqlite3_open_v2 = lib.func('sqlite3_open_v2', 'int', ['str', koffi.out(koffi.pointer(sqlite3_db)), 'int', 'str']);
|
|
163
|
+
const sqlite3_close_v2 = lib.func('sqlite3_close_v2', 'int', [sqlite3_db]);
|
|
163
164
|
|
|
164
165
|
const SQLITE_OPEN_READWRITE = 0x2;
|
|
165
166
|
const SQLITE_OPEN_CREATE = 0x4;
|
package/doc/start.md
CHANGED
|
@@ -91,8 +91,8 @@ const IDYES = 6;
|
|
|
91
91
|
const IDNO = 7;
|
|
92
92
|
|
|
93
93
|
// Find functions
|
|
94
|
-
const MessageBoxA = lib.stdcall('MessageBoxA', 'int', ['void *', '
|
|
95
|
-
const MessageBoxW = lib.stdcall('MessageBoxW', 'int', ['void *', '
|
|
94
|
+
const MessageBoxA = lib.stdcall('MessageBoxA', 'int', ['void *', 'str', 'str', 'uint']);
|
|
95
|
+
const MessageBoxW = lib.stdcall('MessageBoxW', 'int', ['void *', 'str16', 'str16', 'uint']);
|
|
96
96
|
|
|
97
97
|
let ret = MessageBoxA(null, 'Do you want another message box?', 'Koffi', MB_YESNO | MB_ICONQUESTION);
|
|
98
98
|
if (ret == IDYES)
|
package/doc/types.md
CHANGED
|
@@ -46,14 +46,18 @@ Koffi also accepts BigInt values when converting from JS to C integers. If the v
|
|
|
46
46
|
|
|
47
47
|
Koffi defines a few more types that can change size depending on the OS and the architecture:
|
|
48
48
|
|
|
49
|
-
JS type | C type
|
|
50
|
-
---------------- |
|
|
51
|
-
Boolean | bool
|
|
52
|
-
Number (integer) | long
|
|
53
|
-
Number (integer) | ulong
|
|
54
|
-
Number (integer) | unsigned long
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
JS type | C type | Signedness | Note
|
|
50
|
+
---------------- | ---------------- | ---------- | ------------------------------------------------
|
|
51
|
+
Boolean | bool | | Usually one byte
|
|
52
|
+
Number (integer) | long | Signed | 4 or 8 bytes depending on platform (LP64, LLP64)
|
|
53
|
+
Number (integer) | ulong | Unsigned | 4 or 8 bytes depending on platform (LP64, LLP64)
|
|
54
|
+
Number (integer) | unsigned long | Unsigned | 4 or 8 bytes depending on platform (LP64, LLP64)
|
|
55
|
+
Number (integer) | intptr | Signed | 4 or 8 bytes depending on register width
|
|
56
|
+
Number (integer) | intptr_t | Signed | 4 or 8 bytes depending on register width
|
|
57
|
+
Number (integer) | uintptr | Unsigned | 4 or 8 bytes depending on register width
|
|
58
|
+
Number (integer) | uintptr_t | Unsigned | 4 or 8 bytes depending on register width
|
|
59
|
+
String | str (string) | | JS strings are converted to and from UTF-8
|
|
60
|
+
String | str16 (string16) | | JS strings are converted to and from UTF-16 (LE)
|
|
57
61
|
|
|
58
62
|
Primitive types can be specified by name (in a string) or through `koffi.types`:
|
|
59
63
|
|
|
@@ -87,7 +91,7 @@ typedef struct A {
|
|
|
87
91
|
const A = koffi.struct('A', {
|
|
88
92
|
a: 'int',
|
|
89
93
|
b: 'char',
|
|
90
|
-
c: '
|
|
94
|
+
c: 'str',
|
|
91
95
|
d: koffi.struct({
|
|
92
96
|
d1: 'double',
|
|
93
97
|
d2: 'double'
|
|
@@ -270,11 +274,11 @@ const koffi = require('koffi');
|
|
|
270
274
|
const lib = koffi.load('./handles.so');
|
|
271
275
|
|
|
272
276
|
const Concat = koffi.handle('Concat');
|
|
273
|
-
const ConcatNewOut = lib.func('bool ConcatNewOut(Concat *out)');
|
|
274
277
|
const ConcatNew = lib.func('Concat ConcatNew()');
|
|
275
278
|
const ConcatFree = lib.func('void ConcatFree(Concat c)');
|
|
276
279
|
const ConcatAppend = lib.func('bool ConcatAppend(Concat c, const char *frag)');
|
|
277
280
|
const ConcatBuild = lib.func('const char *ConcatBuild(Concat c)');
|
|
281
|
+
const ConcatNewOut = lib.func('bool ConcatNewOut(_Out_ Concat out)');
|
|
278
282
|
|
|
279
283
|
let c = ConcatNew();
|
|
280
284
|
if (!c) {
|
|
@@ -385,7 +389,7 @@ const WIN32_FIND_DATA = koffi.struct('WIN32_FIND_DATA', {
|
|
|
385
389
|
wFinderFlags: 'ushort' // Obsolete. Do not use
|
|
386
390
|
});
|
|
387
391
|
|
|
388
|
-
const FindFirstFile = lib.func('HANDLE __stdcall FindFirstFileW(
|
|
392
|
+
const FindFirstFile = lib.func('HANDLE __stdcall FindFirstFileW(str16 path, _Out_ WIN32_FIND_DATA *data)');
|
|
389
393
|
const FindNextFile = lib.func('bool __stdcall FindNextFileW(HANDLE h, _Out_ WIN32_FIND_DATA *data)');
|
|
390
394
|
const FindClose = lib.func('bool __stdcall FindClose(HANDLE h)');
|
|
391
395
|
const GetLastError = lib.func('uint GetLastError()');
|
package/package.json
CHANGED
package/qemu/qemu.js
CHANGED
|
@@ -315,6 +315,11 @@ async function pack() {
|
|
|
315
315
|
|
|
316
316
|
let ready = ignore.size;
|
|
317
317
|
|
|
318
|
+
if (ready >= machines.length) {
|
|
319
|
+
console.log('>> Nothing to do!');
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
|
|
318
323
|
success &= await start(false);
|
|
319
324
|
success &= await copy(machine => Object.values(machine.builds).map(build => build.directory));
|
|
320
325
|
|
|
@@ -414,9 +419,14 @@ async function pack() {
|
|
|
414
419
|
|
|
415
420
|
if (machines.some(machine => machine.started))
|
|
416
421
|
success &= await stop(false);
|
|
422
|
+
success &= (ignore.size == ready);
|
|
417
423
|
|
|
418
|
-
|
|
419
|
-
|
|
424
|
+
console.log('');
|
|
425
|
+
if (success) {
|
|
426
|
+
console.log('>> Status: ' + chalk.bold.green('SUCCESS'));
|
|
427
|
+
} else {
|
|
428
|
+
console.log('>> Status: ' + chalk.bold.red('FAILED'));
|
|
429
|
+
}
|
|
420
430
|
|
|
421
431
|
return success;
|
|
422
432
|
}
|
package/src/call.cc
CHANGED
|
@@ -226,25 +226,33 @@ bool CallData::PushObject(Napi::Object obj, const TypeInfo *type, uint8_t *origi
|
|
|
226
226
|
*(uint64_t *)dest = v;
|
|
227
227
|
} break;
|
|
228
228
|
case PrimitiveKind::String: {
|
|
229
|
-
|
|
229
|
+
const char *str;
|
|
230
|
+
if (RG_LIKELY(value.IsString())) {
|
|
231
|
+
str = PushString(value);
|
|
232
|
+
if (RG_UNLIKELY(!str))
|
|
233
|
+
return false;
|
|
234
|
+
} else if (IsNullOrUndefined(value)) {
|
|
235
|
+
str = nullptr;
|
|
236
|
+
} else {
|
|
230
237
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for member '%2', expected string", GetValueType(instance, value), member.name);
|
|
231
238
|
return false;
|
|
232
239
|
}
|
|
233
240
|
|
|
234
|
-
const char *str = PushString(value);
|
|
235
|
-
if (RG_UNLIKELY(!str))
|
|
236
|
-
return false;
|
|
237
241
|
*(const char **)dest = str;
|
|
238
242
|
} break;
|
|
239
243
|
case PrimitiveKind::String16: {
|
|
240
|
-
|
|
244
|
+
const char16_t *str16;
|
|
245
|
+
if (RG_LIKELY(value.IsString())) {
|
|
246
|
+
str16 = PushString16(value);
|
|
247
|
+
if (RG_UNLIKELY(!str16))
|
|
248
|
+
return false;
|
|
249
|
+
} else if (IsNullOrUndefined(value)) {
|
|
250
|
+
str16 = nullptr;
|
|
251
|
+
} else {
|
|
241
252
|
ThrowError<Napi::TypeError>(env, "Unexpected %1 value for member '%2', expected string", GetValueType(instance, value), member.name);
|
|
242
253
|
return false;
|
|
243
254
|
}
|
|
244
255
|
|
|
245
|
-
const char16_t *str16 = PushString16(value);
|
|
246
|
-
if (RG_UNLIKELY(!str16))
|
|
247
|
-
return false;
|
|
248
256
|
*(const char16_t **)dest = str16;
|
|
249
257
|
} break;
|
|
250
258
|
case PrimitiveKind::Pointer: {
|
|
@@ -314,7 +322,7 @@ bool CallData::PushObject(Napi::Object obj, const TypeInfo *type, uint8_t *origi
|
|
|
314
322
|
if (value.IsFunction()) {
|
|
315
323
|
Napi::Function func = value.As<Napi::Function>();
|
|
316
324
|
|
|
317
|
-
ptr = ReserveTrampoline(type->proto, func);
|
|
325
|
+
ptr = ReserveTrampoline(member.type->proto, func);
|
|
318
326
|
if (RG_UNLIKELY(!ptr))
|
|
319
327
|
return false;
|
|
320
328
|
} else if (CheckValueTag(instance, value, member.type)) {
|