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.
Files changed (77) hide show
  1. package/ChangeLog.md +13 -0
  2. package/benchmark/atoi_koffi.js +1 -1
  3. package/benchmark/raylib_koffi.js +4 -4
  4. package/build/qemu/1.3.7/koffi_darwin_arm64.tar.gz +0 -0
  5. package/build/qemu/1.3.7/koffi_darwin_x64.tar.gz +0 -0
  6. package/build/qemu/1.3.7/koffi_freebsd_arm64.tar.gz +0 -0
  7. package/build/qemu/1.3.7/koffi_freebsd_ia32.tar.gz +0 -0
  8. package/build/qemu/1.3.7/koffi_freebsd_x64.tar.gz +0 -0
  9. package/build/qemu/1.3.7/koffi_linux_arm32hf.tar.gz +0 -0
  10. package/build/qemu/1.3.7/koffi_linux_arm64.tar.gz +0 -0
  11. package/build/qemu/1.3.7/koffi_linux_ia32.tar.gz +0 -0
  12. package/build/qemu/1.3.7/koffi_linux_riscv64hf64.tar.gz +0 -0
  13. package/build/qemu/1.3.7/koffi_linux_x64.tar.gz +0 -0
  14. package/build/qemu/1.3.7/koffi_openbsd_ia32.tar.gz +0 -0
  15. package/build/qemu/1.3.7/koffi_openbsd_x64.tar.gz +0 -0
  16. package/build/qemu/1.3.7/koffi_win32_arm64.tar.gz +0 -0
  17. package/build/qemu/1.3.7/koffi_win32_ia32.tar.gz +0 -0
  18. package/build/qemu/1.3.7/koffi_win32_x64.tar.gz +0 -0
  19. package/doc/_static/perf_linux_20220628.png +0 -0
  20. package/doc/benchmarks.xlsx +0 -0
  21. package/doc/contribute.md +3 -6
  22. package/doc/dist/doctrees/changes.doctree +0 -0
  23. package/doc/dist/doctrees/contribute.doctree +0 -0
  24. package/doc/dist/doctrees/environment.pickle +0 -0
  25. package/doc/dist/doctrees/functions.doctree +0 -0
  26. package/doc/dist/doctrees/index.doctree +0 -0
  27. package/doc/dist/doctrees/start.doctree +0 -0
  28. package/doc/dist/doctrees/types.doctree +0 -0
  29. package/doc/dist/html/_sources/contribute.md.txt +3 -6
  30. package/doc/dist/html/_sources/functions.md.txt +9 -8
  31. package/doc/dist/html/_sources/start.md.txt +2 -2
  32. package/doc/dist/html/_sources/types.md.txt +15 -11
  33. package/doc/dist/html/_static/basic.css +12 -14
  34. package/doc/dist/html/_static/perf_linux_20220628.png +0 -0
  35. package/doc/dist/html/benchmarks.html +1 -1
  36. package/doc/dist/html/changes.html +16 -1
  37. package/doc/dist/html/contribute.html +4 -7
  38. package/doc/dist/html/functions.html +18 -17
  39. package/doc/dist/html/genindex.html +1 -1
  40. package/doc/dist/html/index.html +4 -3
  41. package/doc/dist/html/memory.html +1 -1
  42. package/doc/dist/html/objects.inv +0 -0
  43. package/doc/dist/html/platforms.html +2 -2
  44. package/doc/dist/html/search.html +1 -1
  45. package/doc/dist/html/searchindex.js +1 -1
  46. package/doc/dist/html/start.html +3 -3
  47. package/doc/dist/html/types.html +30 -10
  48. package/doc/functions.md +9 -8
  49. package/doc/start.md +2 -2
  50. package/doc/types.md +15 -11
  51. package/package.json +1 -1
  52. package/qemu/qemu.js +12 -2
  53. package/src/call.cc +17 -9
  54. package/src/ffi.cc +14 -5
  55. package/src/ffi.hh +0 -1
  56. package/src/util.cc +1 -1
  57. package/test/async.js +1 -1
  58. package/test/callbacks.js +25 -2
  59. package/test/misc.c +52 -2
  60. package/test/raylib.js +4 -4
  61. package/test/sqlite.js +5 -5
  62. package/test/sync.js +22 -7
  63. package/build/qemu/1.3.6/koffi_darwin_arm64.tar.gz +0 -0
  64. package/build/qemu/1.3.6/koffi_darwin_x64.tar.gz +0 -0
  65. package/build/qemu/1.3.6/koffi_freebsd_arm64.tar.gz +0 -0
  66. package/build/qemu/1.3.6/koffi_freebsd_ia32.tar.gz +0 -0
  67. package/build/qemu/1.3.6/koffi_freebsd_x64.tar.gz +0 -0
  68. package/build/qemu/1.3.6/koffi_linux_arm32hf.tar.gz +0 -0
  69. package/build/qemu/1.3.6/koffi_linux_arm64.tar.gz +0 -0
  70. package/build/qemu/1.3.6/koffi_linux_ia32.tar.gz +0 -0
  71. package/build/qemu/1.3.6/koffi_linux_riscv64hf64.tar.gz +0 -0
  72. package/build/qemu/1.3.6/koffi_linux_x64.tar.gz +0 -0
  73. package/build/qemu/1.3.6/koffi_openbsd_ia32.tar.gz +0 -0
  74. package/build/qemu/1.3.6/koffi_openbsd_x64.tar.gz +0 -0
  75. package/build/qemu/1.3.6/koffi_win32_arm64.tar.gz +0 -0
  76. package/build/qemu/1.3.6/koffi_win32_ia32.tar.gz +0 -0
  77. package/build/qemu/1.3.6/koffi_win32_x64.tar.gz +0 -0
@@ -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.1, furo 2022.06.04.1"/>
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.6<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
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.6</a><ul>
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.1, furo 2022.06.04.1"/>
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" href="index" />
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.1, furo 2022.06.04.1"/>
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.1, furo 2022.06.04.1"/><title>Search - Koffi</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
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}})
@@ -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.1, furo 2022.06.04.1"/>
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">&#39;MessageBoxA&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;string&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;string&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</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">&#39;MessageBoxW&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;string16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;string16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">]);</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">&#39;MessageBoxA&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</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">&#39;MessageBoxW&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</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">&#39;Do you want another message box?&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Koffi&#39;</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>
@@ -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.1, furo 2022.06.04.1"/>
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">&#39;A&#39;</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">&#39;int&#39;</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">&#39;char&#39;</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">&#39;string&#39;</span><span class="p">,</span><span class="w"></span>
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">&#39;str&#39;</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">&#39;double&#39;</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">&#39;double&#39;</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">&#39;./handles.so&#39;</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">&#39;Concat&#39;</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">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">&#39;bool ConcatNewOut(Concat *out)&#39;</span><span class="p">);</span><span class="w"></span>
682
- <span class="linenos"> 6</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">&#39;Concat ConcatNew()&#39;</span><span class="p">);</span><span class="w"></span>
683
- <span class="linenos"> 7</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">&#39;void ConcatFree(Concat c)&#39;</span><span class="p">);</span><span class="w"></span>
684
- <span class="linenos"> 8</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">&#39;bool ConcatAppend(Concat c, const char *frag)&#39;</span><span class="p">);</span><span class="w"></span>
685
- <span class="linenos"> 9</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">&#39;const char *ConcatBuild(Concat c)&#39;</span><span class="p">);</span><span class="w"></span>
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">&#39;Concat ConcatNew()&#39;</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">&#39;void ConcatFree(Concat c)&#39;</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">&#39;bool ConcatAppend(Concat c, const char *frag)&#39;</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">&#39;const char *ConcatBuild(Concat c)&#39;</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">&#39;bool ConcatNewOut(_Out_ Concat out)&#39;</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">&#39;ushort&#39;</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">&#39;HANDLE __stdcall FindFirstFileW(string16 path, _Out_ WIN32_FIND_DATA *data)&#39;</span><span class="p">);</span><span class="w"></span>
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">&#39;HANDLE __stdcall FindFirstFileW(str16 path, _Out_ WIN32_FIND_DATA *data)&#39;</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">&#39;bool __stdcall FindNextFileW(HANDLE h, _Out_ WIN32_FIND_DATA *data)&#39;</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">&#39;bool __stdcall FindClose(HANDLE h)&#39;</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">&#39;uint GetLastError()&#39;</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', ['string', '...']);
23
- const atoi = lib.func('atoi', 'int', ['string']);
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(string)'); // The parameter name is not used by Koffi, and optional
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 *', 'string', 'string', 'uint']);
62
- const MessageBoxA_2 = lib.func('int __stdcall MessageBoxA(void *hwnd, string text, string caption, uint type)');
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', ['string', '...']);
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, string %s', 'int', 6, 'double', 8.5, 'string', 'THE END');
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', ['string', koffi.out(koffi.pointer(sqlite3_db)), 'int', 'string']);
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 *', 'string', 'string', 'uint']);
95
- const MessageBoxW = lib.stdcall('MessageBoxW', 'int', ['void *', 'string16', 'string16', 'uint']);
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 | 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
- String | string | | JS strings are converted to and from UTF-8
56
- String | string16 | | JS strings are converted to and from UTF-16 (LE)
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: 'string',
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(string16 path, _Out_ WIN32_FIND_DATA *data)');
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koffi",
3
- "version": "1.3.6",
3
+ "version": "1.3.7",
4
4
  "description": "Fast and simple C FFI (foreign function interface) for Node.js",
5
5
  "keywords": [
6
6
  "foreign",
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
- if (ignore.size > ready)
419
- throw new Error('Some machines are missing, refusing to pack');
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
- if (RG_UNLIKELY(!value.IsString())) {
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
- if (RG_UNLIKELY(!value.IsString())) {
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)) {