functionalscript 0.3.4 → 0.3.5
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/com/cpp/module.f.d.ts +10 -0
- package/com/cpp/module.f.js +107 -0
- package/com/cpp/test.f.d.ts +2 -0
- package/com/cpp/{test.f.ts → test.f.js} +9 -11
- package/com/cpp/testlib.f.d.ts +2 -0
- package/com/cpp/testlib.f.js +5 -0
- package/com/cs/module.f.d.ts +12 -0
- package/com/cs/module.f.js +80 -0
- package/com/cs/test.f.d.ts +2 -0
- package/com/cs/{test.f.ts → test.f.js} +9 -11
- package/com/cs/testlib.f.d.ts +2 -0
- package/com/cs/testlib.f.js +5 -0
- package/com/rust/module.f.d.ts +15 -0
- package/com/rust/module.f.js +169 -0
- package/com/rust/test.f.d.ts +2 -0
- package/com/rust/{test.f.ts → test.f.js} +7 -7
- package/com/rust/testlib.f.d.ts +2 -0
- package/com/rust/testlib.f.js +5 -0
- package/com/test/build.f.d.ts +20 -0
- package/com/test/build.f.js +58 -0
- package/com/types/module.f.d.ts +28 -0
- package/com/types/module.f.js +8 -0
- package/com/types/testlib.f.d.ts +44 -0
- package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
- package/commonjs/build/module.f.d.ts +6 -0
- package/commonjs/build/module.f.js +69 -0
- package/commonjs/build/test.f.d.ts +2 -0
- package/commonjs/build/test.f.js +96 -0
- package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
- package/commonjs/module/function/module.f.js +4 -0
- package/commonjs/module/module.f.d.ts +18 -0
- package/commonjs/module/module.f.js +12 -0
- package/commonjs/module.f.d.ts +6 -0
- package/commonjs/module.f.js +1 -0
- package/commonjs/package/dependencies/module.f.d.ts +7 -0
- package/commonjs/package/dependencies/module.f.js +13 -0
- package/commonjs/package/dependencies/test.f.d.ts +2 -0
- package/commonjs/package/dependencies/test.f.js +15 -0
- package/commonjs/package/module.f.d.ts +17 -0
- package/commonjs/package/module.f.js +18 -0
- package/commonjs/package/test.f.d.ts +2 -0
- package/commonjs/package/test.f.js +27 -0
- package/commonjs/path/module.f.d.ts +24 -0
- package/commonjs/path/module.f.js +114 -0
- package/commonjs/path/test.f.d.ts +25 -0
- package/commonjs/path/{test.f.ts → test.f.js} +123 -89
- package/crypto/prime_field/module.f.d.ts +43 -0
- package/crypto/prime_field/module.f.js +78 -0
- package/crypto/prime_field/test.f.d.ts +13 -0
- package/crypto/prime_field/test.f.js +149 -0
- package/crypto/secp/module.f.d.ts +68 -0
- package/crypto/secp/module.f.js +127 -0
- package/crypto/secp/test.f.d.ts +5 -0
- package/crypto/secp/test.f.js +72 -0
- package/crypto/sha2/module.f.d.ts +13 -0
- package/crypto/sha2/module.f.js +145 -0
- package/crypto/sha2/test.f.d.ts +9 -0
- package/crypto/sha2/test.f.js +82 -0
- package/dev/module.f.d.ts +1 -0
- package/dev/module.f.js +1 -0
- package/dev/test/module.f.d.ts +20 -0
- package/dev/test/module.f.js +75 -0
- package/dev/test.f.d.ts +9 -0
- package/dev/{test.f.ts → test.f.js} +22 -24
- package/djs/module.f.d.ts +17 -0
- package/djs/module.f.js +63 -0
- package/djs/parser/module.f.d.ts +12 -0
- package/djs/parser/module.f.js +333 -0
- package/djs/parser/test.f.d.ts +12 -0
- package/djs/parser/test.f.js +717 -0
- package/djs/serializer/module.f.d.ts +9 -0
- package/djs/serializer/module.f.js +81 -0
- package/djs/test/input.f.d.ts +2 -0
- package/djs/test/input.f.js +4 -0
- package/djs/test/m.f.d.ts +2 -0
- package/djs/test/m.f.js +1 -0
- package/djs/test.f.d.ts +12 -0
- package/djs/test.f.js +84 -0
- package/djs/tokenizer/module.f.d.ts +8 -0
- package/djs/tokenizer/module.f.js +60 -0
- package/djs/tokenizer/test.f.d.ts +7 -0
- package/djs/tokenizer/test.f.js +529 -0
- package/fsc/module.f.d.ts +5 -0
- package/fsc/module.f.js +75 -0
- package/fsc/test.f.d.ts +4 -0
- package/fsc/test.f.js +19 -0
- package/fsm/module.f.d.ts +13 -0
- package/fsm/module.f.js +59 -0
- package/fsm/test.f.d.ts +5 -0
- package/fsm/test.f.js +137 -0
- package/html/module.f.d.ts +13 -0
- package/html/module.f.js +58 -0
- package/html/test.f.d.ts +9 -0
- package/html/test.f.js +42 -0
- package/issues/test.f.d.ts +16 -0
- package/issues/test.f.js +70 -0
- package/js/tokenizer/module.f.d.ts +86 -0
- package/js/tokenizer/module.f.js +503 -0
- package/js/tokenizer/test.f.d.ts +9 -0
- package/js/tokenizer/test.f.js +905 -0
- package/json/module.f.d.ts +20 -0
- package/json/module.f.js +68 -0
- package/json/parser/module.f.d.ts +5 -0
- package/json/parser/module.f.js +155 -0
- package/json/parser/test.f.d.ts +5 -0
- package/json/parser/test.f.js +328 -0
- package/json/serializer/module.f.d.ts +7 -0
- package/json/serializer/module.f.js +21 -0
- package/json/serializer/test.f.d.ts +8 -0
- package/json/serializer/test.f.js +87 -0
- package/json/test.f.d.ts +8 -0
- package/json/test.f.js +61 -0
- package/json/tokenizer/module.f.d.ts +8 -0
- package/json/tokenizer/module.f.js +52 -0
- package/json/tokenizer/test.f.d.ts +6 -0
- package/json/tokenizer/test.f.js +419 -0
- package/nanvm-lib/tests/test.f.d.ts +27 -0
- package/nanvm-lib/tests/test.f.js +84 -0
- package/nodejs/version/module.f.d.ts +11 -0
- package/nodejs/version/module.f.js +16 -0
- package/nodejs/version/test.f.d.ts +2 -0
- package/nodejs/version/{test.f.ts → test.f.js} +13 -22
- package/package.json +9 -5
- package/text/ascii/module.f.d.ts +129 -0
- package/text/ascii/module.f.js +148 -0
- package/text/ascii/test.f.d.ts +4 -0
- package/text/ascii/test.f.js +14 -0
- package/text/module.f.d.ts +8 -0
- package/text/module.f.js +10 -0
- package/text/sgr/module.f.d.ts +8 -0
- package/text/sgr/module.f.js +8 -0
- package/text/test.f.d.ts +2 -0
- package/text/test.f.js +18 -0
- package/text/utf16/module.f.d.ts +9 -0
- package/text/utf16/module.f.js +66 -0
- package/text/utf16/test.f.d.ts +6 -0
- package/text/utf16/test.f.js +144 -0
- package/text/utf8/module.f.d.ts +6 -0
- package/text/utf8/module.f.js +112 -0
- package/text/utf8/test.f.d.ts +6 -0
- package/text/utf8/test.f.js +175 -0
- package/types/array/module.f.d.ts +21 -0
- package/types/array/module.f.js +23 -0
- package/types/array/test.f.d.ts +10 -0
- package/types/array/test.f.js +116 -0
- package/types/bigfloat/module.f.d.ts +3 -0
- package/types/bigfloat/module.f.js +66 -0
- package/types/bigfloat/test.f.d.ts +6 -0
- package/types/bigfloat/test.f.js +349 -0
- package/types/bigint/module.f.d.ts +54 -0
- package/types/bigint/{module.f.ts → module.f.js} +42 -65
- package/types/bigint/test.f.d.ts +16 -0
- package/types/bigint/test.f.js +199 -0
- package/types/bit_vec/module.f.d.ts +134 -0
- package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
- package/types/bit_vec/test.f.d.ts +22 -0
- package/types/bit_vec/test.f.js +210 -0
- package/types/btree/find/module.f.d.ts +20 -0
- package/types/btree/find/module.f.js +84 -0
- package/types/btree/find/test.f.d.ts +2 -0
- package/types/btree/find/test.f.js +152 -0
- package/types/btree/module.f.d.ts +4 -0
- package/types/btree/module.f.js +31 -0
- package/types/btree/remove/module.f.d.ts +4 -0
- package/types/btree/remove/module.f.js +174 -0
- package/types/btree/remove/test.f.d.ts +5 -0
- package/types/btree/remove/test.f.js +634 -0
- package/types/btree/set/module.f.d.ts +3 -0
- package/types/btree/set/module.f.js +103 -0
- package/types/btree/set/test.f.d.ts +2 -0
- package/types/btree/set/test.f.js +360 -0
- package/types/btree/test.f.d.ts +8 -0
- package/types/btree/test.f.js +75 -0
- package/types/btree/types/module.f.d.ts +11 -0
- package/types/btree/types/module.f.js +1 -0
- package/types/byte_set/module.f.d.ts +16 -0
- package/types/byte_set/module.f.js +28 -0
- package/types/byte_set/test.f.d.ts +12 -0
- package/types/byte_set/test.f.js +122 -0
- package/types/function/compare/module.f.d.ts +10 -0
- package/types/function/compare/module.f.js +7 -0
- package/types/function/compare/test.f.d.ts +2 -0
- package/types/function/compare/test.f.js +8 -0
- package/types/function/module.f.d.ts +28 -0
- package/types/function/module.f.js +19 -0
- package/types/function/operator/module.f.d.ts +20 -0
- package/types/function/operator/module.f.js +18 -0
- package/types/function/test.f.d.ts +2 -0
- package/types/function/test.f.js +12 -0
- package/types/list/module.f.d.ts +50 -0
- package/types/list/module.f.js +171 -0
- package/types/list/test.f.d.ts +22 -0
- package/types/list/test.f.js +395 -0
- package/types/map/module.f.d.ts +14 -0
- package/types/map/module.f.js +31 -0
- package/types/map/test.f.d.ts +5 -0
- package/types/map/test.f.js +114 -0
- package/types/nibble_set/module.f.d.ts +10 -0
- package/types/nibble_set/module.f.js +9 -0
- package/types/nibble_set/test.f.d.ts +12 -0
- package/types/nibble_set/test.f.js +90 -0
- package/types/nullable/module.f.d.ts +3 -0
- package/types/nullable/module.f.js +2 -0
- package/types/nullable/test.f.d.ts +2 -0
- package/types/nullable/test.f.js +12 -0
- package/types/number/module.f.d.ts +6 -0
- package/types/number/module.f.js +8 -0
- package/types/number/test.f.d.ts +11 -0
- package/types/number/test.f.js +124 -0
- package/types/object/module.f.d.ts +10 -0
- package/types/object/module.f.js +12 -0
- package/types/object/test.f.d.ts +5 -0
- package/types/object/test.f.js +17 -0
- package/types/range/module.f.d.ts +3 -0
- package/types/range/module.f.js +2 -0
- package/types/range/test.f.d.ts +2 -0
- package/types/range/test.f.js +18 -0
- package/types/range_map/module.f.d.ts +14 -0
- package/types/range_map/module.f.js +51 -0
- package/types/range_map/test.f.d.ts +6 -0
- package/types/range_map/test.f.js +176 -0
- package/types/result/module.f.d.ts +7 -0
- package/types/result/module.f.js +8 -0
- package/types/sorted_list/module.f.d.ts +16 -0
- package/types/sorted_list/module.f.js +56 -0
- package/types/sorted_list/test.f.d.ts +5 -0
- package/types/sorted_list/test.f.js +64 -0
- package/types/sorted_set/module.f.d.ts +7 -0
- package/types/sorted_set/module.f.js +14 -0
- package/types/sorted_set/test.f.d.ts +6 -0
- package/types/sorted_set/test.f.js +78 -0
- package/types/string/module.f.d.ts +6 -0
- package/types/string/module.f.js +11 -0
- package/types/string/test.f.d.ts +15 -0
- package/types/string/test.f.js +58 -0
- package/types/string_set/module.f.d.ts +9 -0
- package/types/string_set/module.f.js +22 -0
- package/types/string_set/test.f.d.ts +5 -0
- package/types/string_set/test.f.js +65 -0
- package/.github/FUNDING.yml +0 -12
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -88
- package/.github/workflows/npm-publish.yml +0 -53
- package/CHANGELOG.md +0 -29
- package/Cargo.lock +0 -18
- package/Cargo.toml +0 -7
- package/com/README.md +0 -3
- package/com/cpp/README.md +0 -80
- package/com/cpp/module.f.ts +0 -180
- package/com/cpp/nanocom.hpp +0 -195
- package/com/cpp/testlib.f.ts +0 -8
- package/com/cs/module.f.ts +0 -145
- package/com/cs/testlib.f.ts +0 -8
- package/com/proposals.md +0 -28
- package/com/rust/module.f.ts +0 -287
- package/com/rust/nanocom/Cargo.lock +0 -7
- package/com/rust/nanocom/Cargo.toml +0 -15
- package/com/rust/nanocom/README.md +0 -56
- package/com/rust/nanocom/src/class.rs +0 -6
- package/com/rust/nanocom/src/cobject.rs +0 -90
- package/com/rust/nanocom/src/guid.rs +0 -15
- package/com/rust/nanocom/src/hresult.rs +0 -7
- package/com/rust/nanocom/src/interface.rs +0 -9
- package/com/rust/nanocom/src/iunknown.rs +0 -13
- package/com/rust/nanocom/src/lib.rs +0 -20
- package/com/rust/nanocom/src/object.rs +0 -34
- package/com/rust/nanocom/src/ref.rs +0 -57
- package/com/rust/nanocom/src/vmt.rs +0 -7
- package/com/rust/nanocom/tests/it.rs +0 -186
- package/com/rust/nanocom/tests/itmod.rs +0 -195
- package/com/rust/testlib.f.ts +0 -8
- package/com/test/build.f.ts +0 -111
- package/com/test/build.ts +0 -45
- package/com/test/cpp/main.cpp +0 -74
- package/com/test/cs/Program.cs +0 -31
- package/com/test/cs/cs.csproj +0 -16
- package/com/test/rust/Cargo.toml +0 -12
- package/com/test/rust/src/lib.rs +0 -56
- package/com/types/module.f.ts +0 -62
- package/commonjs/README.md +0 -94
- package/commonjs/build/module.f.ts +0 -100
- package/commonjs/build/test.f.ts +0 -107
- package/commonjs/module/module.f.ts +0 -41
- package/commonjs/module.f.ts +0 -7
- package/commonjs/module.ts +0 -31
- package/commonjs/package/dependencies/module.f.ts +0 -22
- package/commonjs/package/dependencies/test.f.ts +0 -8
- package/commonjs/package/module.f.ts +0 -31
- package/commonjs/package/test.f.ts +0 -12
- package/commonjs/path/README.md +0 -17
- package/commonjs/path/module.f.ts +0 -171
- package/commonjs/test.ts +0 -64
- package/crypto/README.md +0 -3
- package/crypto/prime_field/module.f.ts +0 -114
- package/crypto/prime_field/test.f.ts +0 -95
- package/crypto/secp/module.f.ts +0 -182
- package/crypto/secp/test.f.ts +0 -68
- package/crypto/sha2/module.f.ts +0 -215
- package/crypto/sha2/test.f.ts +0 -83
- package/deno.json +0 -71
- package/dev/README.md +0 -8
- package/dev/index.ts +0 -3
- package/dev/module.f.ts +0 -1
- package/dev/module.ts +0 -195
- package/dev/test/module.f.ts +0 -135
- package/dev/test.ts +0 -53
- package/djs/README.md +0 -54
- package/djs/module.f.ts +0 -76
- package/djs/parser/module.f.ts +0 -509
- package/djs/parser/test.f.ts +0 -461
- package/djs/serializer/module.f.ts +0 -90
- package/djs/test.f.ts +0 -67
- package/djs/tokenizer/module.f.ts +0 -99
- package/djs/tokenizer/test.f.ts +0 -364
- package/doc/LANGUAGE.md +0 -255
- package/doc/README.md +0 -61
- package/doc/byte-code.md +0 -59
- package/doc/fa.md +0 -174
- package/doc/predefined.md +0 -143
- package/doc/proposals.md +0 -21
- package/doc/vm/README.md +0 -24
- package/doc/vm-rearchitecture.md +0 -129
- package/doc/vm.md +0 -150
- package/fsc/README.md +0 -111
- package/fsc/module.f.ts +0 -122
- package/fsc/test.f.ts +0 -21
- package/fsm/README.md +0 -113
- package/fsm/module.f.ts +0 -107
- package/fsm/test.f.ts +0 -139
- package/funding.json +0 -61
- package/html/README.md +0 -32
- package/html/module.f.ts +0 -109
- package/html/test.f.ts +0 -37
- package/issues/01-test-debug.md +0 -3
- package/issues/02-esm.md +0 -8
- package/issues/03-djs.md +0 -57
- package/issues/05-publish.md +0 -40
- package/issues/11-fs-load.md +0 -13
- package/issues/17-djs-extension.md +0 -6
- package/issues/README.md +0 -42
- package/issues/lang/1000-json.md +0 -50
- package/issues/lang/2110-default-export.md +0 -11
- package/issues/lang/2120-const.md +0 -14
- package/issues/lang/2130-default-import.md +0 -10
- package/issues/lang/2210-block-comment.md +0 -12
- package/issues/lang/2220-namespace-import.md +0 -25
- package/issues/lang/2310-undefined.md +0 -7
- package/issues/lang/2320-bigint.md +0 -7
- package/issues/lang/2330-property-accessor.md +0 -225
- package/issues/lang/2340-operators.md +0 -41
- package/issues/lang/2350-grouping.md +0 -11
- package/issues/lang/2360-built-in.md +0 -81
- package/issues/lang/2410-identifier-property.md +0 -9
- package/issues/lang/2420-line-comment.md +0 -10
- package/issues/lang/2430-trailing-comma.md +0 -13
- package/issues/lang/2440-shorthand.md +0 -8
- package/issues/lang/2450-destructuring.md +0 -12
- package/issues/lang/3110-function.md +0 -35
- package/issues/lang/3120-parameters.md +0 -9
- package/issues/lang/3130-body-const.md +0 -12
- package/issues/lang/3220-let.md +0 -11
- package/issues/lang/3240-export.md +0 -44
- package/issues/lang/3370-type-inference.md +0 -69
- package/issues/lang/3380-promise.md +0 -22
- package/issues/lang/3390-class.md +0 -3
- package/issues/lang/3410-expression.md +0 -12
- package/issues/lang/3420-one-parameter.md +0 -10
- package/issues/lang/3430-assignments.md +0 -23
- package/issues/lang/README.md +0 -193
- package/issues/test.f.ts +0 -58
- package/js/tokenizer/module.f.ts +0 -882
- package/js/tokenizer/test.f.ts +0 -617
- package/json/html/README.md +0 -49
- package/json/module.f.ts +0 -94
- package/json/parser/module.f.ts +0 -221
- package/json/parser/test.f.ts +0 -255
- package/json/serializer/module.f.ts +0 -74
- package/json/serializer/test.f.ts +0 -64
- package/json/test.f.ts +0 -48
- package/json/tokenizer/module.f.ts +0 -85
- package/json/tokenizer/test.f.ts +0 -290
- package/nanvm-lib/Cargo.toml +0 -6
- package/nanvm-lib/src/extension.rs +0 -130
- package/nanvm-lib/src/interface.rs +0 -133
- package/nanvm-lib/src/lib.rs +0 -7
- package/nanvm-lib/src/naive.rs +0 -236
- package/nanvm-lib/src/nanenum.rs +0 -236
- package/nanvm-lib/src/nullish.rs +0 -7
- package/nanvm-lib/src/sign.rs +0 -5
- package/nanvm-lib/src/simple.rs +0 -32
- package/nanvm-lib/tests/test.f.ts +0 -80
- package/nanvm-lib/tests/test.rs +0 -108
- package/nodejs/version/main.ts +0 -4
- package/nodejs/version/module.f.ts +0 -42
- package/text/README.md +0 -110
- package/text/ascii/module.f.ts +0 -219
- package/text/ascii/test.f.ts +0 -14
- package/text/module.f.ts +0 -30
- package/text/sgr/README.md +0 -3
- package/text/sgr/module.f.ts +0 -11
- package/text/test.f.ts +0 -19
- package/text/utf16/module.f.ts +0 -120
- package/text/utf16/test.f.ts +0 -107
- package/text/utf8/module.f.ts +0 -116
- package/text/utf8/test.f.ts +0 -125
- package/tsconfig.json +0 -104
- package/types/array/module.f.ts +0 -89
- package/types/array/test.f.ts +0 -88
- package/types/bigfloat/module.f.ts +0 -93
- package/types/bigfloat/test.f.ts +0 -218
- package/types/bigint/README.md +0 -35
- package/types/bigint/test.f.ts +0 -144
- package/types/bit_vec/README.md +0 -18
- package/types/bit_vec/test.f.ts +0 -129
- package/types/btree/README.md +0 -160
- package/types/btree/find/module.f.ts +0 -92
- package/types/btree/find/test.f.ts +0 -122
- package/types/btree/module.f.ts +0 -35
- package/types/btree/remove/module.f.ts +0 -151
- package/types/btree/remove/test.f.ts +0 -498
- package/types/btree/set/module.f.ts +0 -89
- package/types/btree/set/test.f.ts +0 -415
- package/types/btree/test.f.ts +0 -92
- package/types/btree/types/module.f.ts +0 -27
- package/types/byte_set/module.f.ts +0 -73
- package/types/byte_set/test.f.ts +0 -84
- package/types/function/compare/module.f.ts +0 -26
- package/types/function/compare/test.f.ts +0 -7
- package/types/function/module.f.ts +0 -43
- package/types/function/operator/module.f.ts +0 -65
- package/types/function/test.f.ts +0 -20
- package/types/list/module.f.ts +0 -350
- package/types/list/test.f.ts +0 -327
- package/types/map/module.f.ts +0 -65
- package/types/map/test.f.ts +0 -76
- package/types/nibble_set/module.f.ts +0 -34
- package/types/nibble_set/test.f.ts +0 -57
- package/types/nullable/module.f.ts +0 -9
- package/types/nullable/test.f.ts +0 -9
- package/types/number/module.f.ts +0 -20
- package/types/number/test.f.ts +0 -194
- package/types/object/module.f.ts +0 -30
- package/types/object/test.f.ts +0 -14
- package/types/range/module.f.ts +0 -10
- package/types/range/test.f.ts +0 -9
- package/types/range_map/module.f.ts +0 -70
- package/types/range_map/test.f.ts +0 -189
- package/types/result/module.f.ts +0 -20
- package/types/result/module.ts +0 -18
- package/types/sorted_list/module.f.ts +0 -83
- package/types/sorted_list/test.f.ts +0 -57
- package/types/sorted_set/module.f.ts +0 -36
- package/types/sorted_set/test.f.ts +0 -67
- package/types/string/module.f.ts +0 -26
- package/types/string/test.f.ts +0 -43
- package/types/string_set/module.f.ts +0 -37
- package/types/string_set/test.f.ts +0 -34
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as Compare from "../function/compare/module.f.js";
|
|
2
|
+
import * as list from "../list/module.f.js";
|
|
3
|
+
const { toArray } = list;
|
|
4
|
+
import * as sortedList from "../sorted_list/module.f.js";
|
|
5
|
+
const { merge, genericMerge, find } = sortedList;
|
|
6
|
+
export const union = cmp => a => b => toArray(merge(cmp)(a)(b));
|
|
7
|
+
export const intersect = cmp => a => b => toArray(intersectMerge(cmp)(a)(b));
|
|
8
|
+
const tailReduce = () => () => null;
|
|
9
|
+
const intersectMerge = cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null);
|
|
10
|
+
const intersectReduce = cmp => state => a => b => {
|
|
11
|
+
const sign = cmp(a)(b);
|
|
12
|
+
return [sign === 0 ? a : null, sign, state];
|
|
13
|
+
};
|
|
14
|
+
export const has = cmp => value => set => find(cmp)(value)(set) === value;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as _ from "./module.f.js";
|
|
2
|
+
import * as compare from "../function/compare/module.f.js";
|
|
3
|
+
const { unsafeCmp } = compare;
|
|
4
|
+
import * as json from "../../json/module.f.js";
|
|
5
|
+
import * as object from "../object/module.f.js";
|
|
6
|
+
const { sort } = object;
|
|
7
|
+
import * as list from "../list/module.f.js";
|
|
8
|
+
const { toArray, countdown, length } = list;
|
|
9
|
+
import * as Map from "../map/module.f.js";
|
|
10
|
+
import * as f from "../function/module.f.js";
|
|
11
|
+
const { flip } = f;
|
|
12
|
+
const stringify = a => json.stringify(sort)(a);
|
|
13
|
+
const reverseCmp = flip(unsafeCmp);
|
|
14
|
+
export default {
|
|
15
|
+
union: [
|
|
16
|
+
() => {
|
|
17
|
+
const result = stringify(toArray(_.union(unsafeCmp)([2, 3, 4])([1, 3, 5])));
|
|
18
|
+
if (result !== '[1,2,3,4,5]') {
|
|
19
|
+
throw result;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
() => {
|
|
23
|
+
const result = stringify(toArray(_.union(unsafeCmp)([1, 2, 3])([])));
|
|
24
|
+
if (result !== '[1,2,3]') {
|
|
25
|
+
throw result;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
() => {
|
|
29
|
+
const n = 10_000;
|
|
30
|
+
const sortedSet = toArray(countdown(n));
|
|
31
|
+
const result = _.union(reverseCmp)(sortedSet)(sortedSet);
|
|
32
|
+
const len = length(result);
|
|
33
|
+
if (len != n) {
|
|
34
|
+
throw result;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
intersect: [
|
|
39
|
+
() => {
|
|
40
|
+
const result = stringify(toArray(_.intersect(unsafeCmp)([2, 3, 4])([1, 3, 5])));
|
|
41
|
+
if (result !== '[3]') {
|
|
42
|
+
throw result;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
() => {
|
|
46
|
+
const result = stringify(toArray(_.intersect(unsafeCmp)([1, 2, 3])([])));
|
|
47
|
+
if (result !== '[]') {
|
|
48
|
+
throw result;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
has: [
|
|
53
|
+
() => {
|
|
54
|
+
const result = _.has(unsafeCmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
55
|
+
if (!result) {
|
|
56
|
+
throw result;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
() => {
|
|
60
|
+
const result = _.has(unsafeCmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
61
|
+
if (result) {
|
|
62
|
+
throw result;
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
() => {
|
|
66
|
+
const result = _.has(unsafeCmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
67
|
+
if (result) {
|
|
68
|
+
throw result;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
() => {
|
|
72
|
+
const result = _.has(unsafeCmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
73
|
+
if (!result) {
|
|
74
|
+
throw result;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as list from '../list/module.f.ts';
|
|
2
|
+
import * as compare from '../function/compare/module.f.ts';
|
|
3
|
+
export declare const join: (_: string) => (input: list.List<string>) => string;
|
|
4
|
+
export declare const concat: (input: list.List<string>) => string;
|
|
5
|
+
export declare const repeat: (n: string) => (v: number) => string;
|
|
6
|
+
export declare const cmp: (a: string) => (b: string) => compare.Sign;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as list from "../list/module.f.js";
|
|
2
|
+
const { reduce: listReduce, repeat: listRepeat } = list;
|
|
3
|
+
import { compose } from "../function/module.f.js";
|
|
4
|
+
import * as compare from "../function/compare/module.f.js";
|
|
5
|
+
const { unsafeCmp } = compare;
|
|
6
|
+
import { join as joinOp, concat as concatOp } from "../function/operator/module.f.js";
|
|
7
|
+
const reduce = o => listReduce(o)('');
|
|
8
|
+
export const join = compose(joinOp)(reduce);
|
|
9
|
+
export const concat = reduce(concatOp);
|
|
10
|
+
export const repeat = v => compose(listRepeat(v))(concat);
|
|
11
|
+
export const cmp = unsafeCmp;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as _ from "./module.f.js";
|
|
2
|
+
const { join, concat, repeat, cmp } = _;
|
|
3
|
+
import * as list from "../list/module.f.js";
|
|
4
|
+
const { repeat: repeatList } = list;
|
|
5
|
+
export default {
|
|
6
|
+
join: {
|
|
7
|
+
0: () => {
|
|
8
|
+
const result = join('/')([]);
|
|
9
|
+
if (result !== '') {
|
|
10
|
+
throw result;
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
1: () => {
|
|
14
|
+
const result = join('/')(['']);
|
|
15
|
+
if (result !== '') {
|
|
16
|
+
throw result;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
3: () => {
|
|
20
|
+
const result = join(' ')(['hello', 'world', '!']);
|
|
21
|
+
if (result !== 'hello world !') {
|
|
22
|
+
throw result;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
concat: () => {
|
|
27
|
+
const result = concat(['hello', 'world']);
|
|
28
|
+
if (result !== 'helloworld') {
|
|
29
|
+
throw result;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
repeatList: {
|
|
33
|
+
0: () => {
|
|
34
|
+
const s = join('.')(repeatList('x')(0));
|
|
35
|
+
if (s != '') {
|
|
36
|
+
throw s;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
5: () => {
|
|
40
|
+
const s = join('.')(repeatList('x')(5));
|
|
41
|
+
if (s != 'x.x.x.x.x') {
|
|
42
|
+
throw s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
repeat: () => {
|
|
47
|
+
const s = repeat('x')(5);
|
|
48
|
+
if (s != 'xxxxx') {
|
|
49
|
+
throw s;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
cmp: () => {
|
|
53
|
+
const result = cmp('3')('4');
|
|
54
|
+
if (result !== -1) {
|
|
55
|
+
throw result;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as BtreeTypes from '../btree/types/module.f.ts';
|
|
2
|
+
import { type List } from '../list/module.f.ts';
|
|
3
|
+
export declare const values: (s: StringSet) => List<string>;
|
|
4
|
+
export declare const empty: null;
|
|
5
|
+
export type StringSet = BtreeTypes.Tree<string>;
|
|
6
|
+
export declare const contains: (value: string) => (set: StringSet) => boolean;
|
|
7
|
+
export declare const set: (value: string) => (s: StringSet) => StringSet;
|
|
8
|
+
export declare const fromValues: (input: List<string>) => StringSet;
|
|
9
|
+
export declare const remove: (value: string) => (s: StringSet) => StringSet;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as BtreeTypes from "../btree/types/module.f.js";
|
|
2
|
+
import * as btree from "../btree/module.f.js";
|
|
3
|
+
import * as btf from "../btree/find/module.f.js";
|
|
4
|
+
const { find, isFound } = btf;
|
|
5
|
+
import * as btr from "../btree/remove/module.f.js";
|
|
6
|
+
const { remove: btreeRemove } = btr;
|
|
7
|
+
import * as bts from "../btree/set/module.f.js";
|
|
8
|
+
const { set: btreeSet } = bts;
|
|
9
|
+
import * as string from "../string/module.f.js";
|
|
10
|
+
const { cmp } = string;
|
|
11
|
+
import { fold } from "../list/module.f.js";
|
|
12
|
+
import * as f from "../function/module.f.js";
|
|
13
|
+
const { compose } = f;
|
|
14
|
+
export const values = btree.values;
|
|
15
|
+
export const empty = btree.empty;
|
|
16
|
+
export const contains = value => {
|
|
17
|
+
const f = find(cmp(value));
|
|
18
|
+
return s => s !== null && isFound(f(s).first);
|
|
19
|
+
};
|
|
20
|
+
export const set = value => btreeSet(cmp(value))(() => value);
|
|
21
|
+
export const fromValues = fold(set)(null);
|
|
22
|
+
export const remove = compose(cmp)(btreeRemove);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as _ from "./module.f.js";
|
|
2
|
+
export default {
|
|
3
|
+
contains: () => {
|
|
4
|
+
const r = _.set('hello')(null);
|
|
5
|
+
if (!_.contains('hello')(r)) {
|
|
6
|
+
throw r;
|
|
7
|
+
}
|
|
8
|
+
if (_.contains('hello1')(r)) {
|
|
9
|
+
throw r;
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
remove: () => {
|
|
13
|
+
let r = _.set('hello')(null);
|
|
14
|
+
r = _.set('world')(r);
|
|
15
|
+
r = _.set('HELLO')(r);
|
|
16
|
+
r = _.set('WORLD!')(r);
|
|
17
|
+
if (!_.contains('hello')(r)) {
|
|
18
|
+
throw r;
|
|
19
|
+
}
|
|
20
|
+
if (_.contains('hello1')(r)) {
|
|
21
|
+
throw r;
|
|
22
|
+
}
|
|
23
|
+
if (!_.contains('HELLO')(r)) {
|
|
24
|
+
throw r;
|
|
25
|
+
}
|
|
26
|
+
if (_.contains('WORLD')(r)) {
|
|
27
|
+
throw r;
|
|
28
|
+
}
|
|
29
|
+
if (!_.contains('world')(r)) {
|
|
30
|
+
throw r;
|
|
31
|
+
}
|
|
32
|
+
if (_.contains('world!')(r)) {
|
|
33
|
+
throw r;
|
|
34
|
+
}
|
|
35
|
+
if (!_.contains('WORLD!')(r)) {
|
|
36
|
+
throw r;
|
|
37
|
+
}
|
|
38
|
+
//
|
|
39
|
+
r = _.remove('hello')(r);
|
|
40
|
+
if (_.contains('hello')(r)) {
|
|
41
|
+
throw r;
|
|
42
|
+
}
|
|
43
|
+
if (!_.contains('world')(r)) {
|
|
44
|
+
throw r;
|
|
45
|
+
}
|
|
46
|
+
r = _.remove('world')(r);
|
|
47
|
+
if (_.contains('world')(r)) {
|
|
48
|
+
throw r;
|
|
49
|
+
}
|
|
50
|
+
if (!_.contains('HELLO')(r)) {
|
|
51
|
+
throw r;
|
|
52
|
+
}
|
|
53
|
+
r = _.remove('HELLO')(r);
|
|
54
|
+
if (_.contains('HELLO')(r)) {
|
|
55
|
+
throw r;
|
|
56
|
+
}
|
|
57
|
+
if (!_.contains('WORLD!')(r)) {
|
|
58
|
+
throw r;
|
|
59
|
+
}
|
|
60
|
+
r = _.remove('WORLD!')(r);
|
|
61
|
+
if (r !== null) {
|
|
62
|
+
throw r;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
package/.github/FUNDING.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# These are supported funding model platforms
|
|
2
|
-
|
|
3
|
-
github: [sergey-shandar] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
|
4
|
-
patreon: # Replace with a single Patreon username
|
|
5
|
-
open_collective: functionalscript # Replace with a single Open Collective username
|
|
6
|
-
ko_fi: # Replace with a single Ko-fi username
|
|
7
|
-
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
8
|
-
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
9
|
-
liberapay: # Replace with a single Liberapay username
|
|
10
|
-
issuehunt: # Replace with a single IssueHunt username
|
|
11
|
-
otechie: # Replace with a single Otechie username
|
|
12
|
-
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
package/.github/dependabot.yml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
-
# package ecosystems to update and where the package manifests are located.
|
|
3
|
-
# Please see the documentation for all configuration options:
|
|
4
|
-
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
5
|
-
|
|
6
|
-
version: 2
|
|
7
|
-
updates:
|
|
8
|
-
- package-ecosystem: "npm" # See documentation for possible values
|
|
9
|
-
directory: "/" # Location of package manifests
|
|
10
|
-
schedule:
|
|
11
|
-
interval: "weekly"
|
package/.github/workflows/ci.yml
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
|
3
|
-
|
|
4
|
-
name: CI
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
push:
|
|
8
|
-
branches:
|
|
9
|
-
- master
|
|
10
|
-
pull_request:
|
|
11
|
-
|
|
12
|
-
jobs:
|
|
13
|
-
node20:
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
|
|
16
|
-
strategy:
|
|
17
|
-
matrix:
|
|
18
|
-
node-version: [16, 18, 20]
|
|
19
|
-
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
20
|
-
|
|
21
|
-
steps:
|
|
22
|
-
- uses: actions/checkout@v2
|
|
23
|
-
- uses: actions/setup-node@v2
|
|
24
|
-
with:
|
|
25
|
-
node-version: ${{ matrix.node-version }}
|
|
26
|
-
- run: npm ci
|
|
27
|
-
- run: npm run test20
|
|
28
|
-
|
|
29
|
-
node:
|
|
30
|
-
runs-on: ubuntu-latest
|
|
31
|
-
|
|
32
|
-
strategy:
|
|
33
|
-
matrix:
|
|
34
|
-
node-version: [22, 23]
|
|
35
|
-
|
|
36
|
-
steps:
|
|
37
|
-
- uses: actions/checkout@v2
|
|
38
|
-
- uses: actions/setup-node@v2
|
|
39
|
-
with:
|
|
40
|
-
node-version: ${{ matrix.node-version }}
|
|
41
|
-
- run: npm ci
|
|
42
|
-
- run: npm test
|
|
43
|
-
- run: npm run version
|
|
44
|
-
- run: npm pack
|
|
45
|
-
|
|
46
|
-
deno:
|
|
47
|
-
|
|
48
|
-
runs-on: ubuntu-latest
|
|
49
|
-
|
|
50
|
-
strategy:
|
|
51
|
-
matrix:
|
|
52
|
-
deno-version: [1, 2]
|
|
53
|
-
|
|
54
|
-
steps:
|
|
55
|
-
- uses: actions/checkout@v2
|
|
56
|
-
- uses: denoland/setup-deno@v1
|
|
57
|
-
with:
|
|
58
|
-
deno-version: ${{ matrix.deno-version }}
|
|
59
|
-
- run: deno task test
|
|
60
|
-
- run: deno publish --dry-run --allow-slow-types
|
|
61
|
-
|
|
62
|
-
bun:
|
|
63
|
-
|
|
64
|
-
runs-on: ubuntu-latest
|
|
65
|
-
|
|
66
|
-
steps:
|
|
67
|
-
- uses: actions/checkout@v2
|
|
68
|
-
- run: curl https://bun.sh/install | bash
|
|
69
|
-
- run: /home/runner/.bun/bin/bun ./dev/test.ts
|
|
70
|
-
|
|
71
|
-
COM:
|
|
72
|
-
strategy:
|
|
73
|
-
matrix:
|
|
74
|
-
# https://docs.github.com/en/actions/using-jobs/choosing-the-runner-for-a-job#choosing-github-hosted-runners
|
|
75
|
-
os: ['ubuntu-latest', 'windows-latest', 'macos-latest']
|
|
76
|
-
|
|
77
|
-
runs-on: ${{ matrix.os }}
|
|
78
|
-
|
|
79
|
-
steps:
|
|
80
|
-
- uses: actions/checkout@v3
|
|
81
|
-
- uses: actions/setup-node@v2
|
|
82
|
-
with:
|
|
83
|
-
node-version: 23
|
|
84
|
-
- uses: actions/setup-dotnet@v3
|
|
85
|
-
with:
|
|
86
|
-
dotnet-version: 9
|
|
87
|
-
- run: npm ci
|
|
88
|
-
- run: npm run comtest
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
2
|
-
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
|
3
|
-
|
|
4
|
-
name: node publish
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
push:
|
|
8
|
-
branches: [ main ]
|
|
9
|
-
|
|
10
|
-
jobs:
|
|
11
|
-
publish-npm:
|
|
12
|
-
runs-on: ubuntu-latest
|
|
13
|
-
permissions:
|
|
14
|
-
contents: read
|
|
15
|
-
id-token: write # This is required for requesting the JWT
|
|
16
|
-
steps:
|
|
17
|
-
- uses: actions/checkout@v2
|
|
18
|
-
with:
|
|
19
|
-
fetch-depth: 0
|
|
20
|
-
- uses: actions/setup-node@v2
|
|
21
|
-
with:
|
|
22
|
-
node-version: 22
|
|
23
|
-
registry-url: https://registry.npmjs.org/
|
|
24
|
-
- uses: denoland/setup-deno@v1
|
|
25
|
-
with:
|
|
26
|
-
deno-version: 2
|
|
27
|
-
- run: npm ci
|
|
28
|
-
- run: npm run version
|
|
29
|
-
- run: npm run index
|
|
30
|
-
- run: npm publish
|
|
31
|
-
continue-on-error: true
|
|
32
|
-
env:
|
|
33
|
-
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
|
34
|
-
- run: deno publish --allow-dirty --allow-slow-types
|
|
35
|
-
continue-on-error: true
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# publish-gpr:
|
|
40
|
-
# runs-on: ubuntu-latest
|
|
41
|
-
# permissions:
|
|
42
|
-
# contents: read
|
|
43
|
-
# packages: write
|
|
44
|
-
# steps:
|
|
45
|
-
# - uses: actions/checkout@v2
|
|
46
|
-
# - uses: actions/setup-node@v2
|
|
47
|
-
# with:
|
|
48
|
-
# node-version: 14
|
|
49
|
-
# registry-url: https://npm.pkg.github.com/
|
|
50
|
-
# - run: npm ci
|
|
51
|
-
# - run: npm publish
|
|
52
|
-
# env:
|
|
53
|
-
# NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
package/CHANGELOG.md
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## Unreleased
|
|
9
|
-
|
|
10
|
-
## 0.3.0
|
|
11
|
-
|
|
12
|
-
- Switching to TypeScript file [PR #330] https://github.com/functionalscript/functionalscript/pull/330
|
|
13
|
-
- DJS: add serializer [PR #326] https://github.com/functionalscript/functionalscript/pull/326
|
|
14
|
-
|
|
15
|
-
## 0.2.6
|
|
16
|
-
|
|
17
|
-
- Refactoring of a vector of bits [PR #328](https://github.com/functionalscript/functionalscript/pull/328)
|
|
18
|
-
|
|
19
|
-
## 0.2.5
|
|
20
|
-
|
|
21
|
-
- new [crypto/] directory [PR #327](https://github.com/functionalscript/functionalscript/pull/327).
|
|
22
|
-
- simplified HTML [PR #327](https://github.com/functionalscript/functionalscript/pull/327).
|
|
23
|
-
- djs: add undefined and comments [PR #325](https://github.com/functionalscript/functionalscript/pull/325).
|
|
24
|
-
|
|
25
|
-
## 0.2.3
|
|
26
|
-
|
|
27
|
-
- BitVec and documentation update [PR #322](https://github.com/functionalscript/functionalscript/pull/322).
|
|
28
|
-
|
|
29
|
-
## 0.1.608
|
package/Cargo.lock
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# This file is automatically @generated by Cargo.
|
|
2
|
-
# It is not intended for manual editing.
|
|
3
|
-
version = 3
|
|
4
|
-
|
|
5
|
-
[[package]]
|
|
6
|
-
name = "nanocom"
|
|
7
|
-
version = "0.2.1"
|
|
8
|
-
|
|
9
|
-
[[package]]
|
|
10
|
-
name = "nanvm-lib"
|
|
11
|
-
version = "0.1.0"
|
|
12
|
-
|
|
13
|
-
[[package]]
|
|
14
|
-
name = "testrust"
|
|
15
|
-
version = "0.1.0"
|
|
16
|
-
dependencies = [
|
|
17
|
-
"nanocom",
|
|
18
|
-
]
|
package/Cargo.toml
DELETED
package/com/README.md
DELETED
package/com/cpp/README.md
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# COM C++ library
|
|
2
|
-
|
|
3
|
-
## Example
|
|
4
|
-
|
|
5
|
-
### `nanocom` library
|
|
6
|
-
|
|
7
|
-
```cpp
|
|
8
|
-
class IUnknown
|
|
9
|
-
{
|
|
10
|
-
public:
|
|
11
|
-
virtual HRESULT QueryInterface(GUID const &riid, IUnknown const **ppvObject) const noexcept = 0;
|
|
12
|
-
virtual ULONG AddRef() const noexcept = 0;
|
|
13
|
-
virtual ULONG Release() const noexcept = 0;
|
|
14
|
-
protected:
|
|
15
|
-
IUnknown() {}
|
|
16
|
-
private:
|
|
17
|
-
IUnknown(IUnknown const&);
|
|
18
|
-
IUnknown& operator=(IUnknown const &);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
template<class I>
|
|
22
|
-
class base: public I
|
|
23
|
-
{
|
|
24
|
-
public:
|
|
25
|
-
HRESULT QueryInterface(GUID const &riid, IUnknown const **ppvObject) const noexcept override { ... }
|
|
26
|
-
ULONG AddRef() const noexcept override { ... }
|
|
27
|
-
ULONG Release() const noexcept override { ... }
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
template<class I, class T>
|
|
31
|
-
class impl;
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Generated
|
|
35
|
-
|
|
36
|
-
```cpp
|
|
37
|
-
class IAbc : public IUnknown
|
|
38
|
-
{
|
|
39
|
-
public:
|
|
40
|
-
constexpr static GUID const guid = GUID(...);
|
|
41
|
-
virtual IAbc* GetIAbc_() const noexcept = 0;
|
|
42
|
-
ref<IAbc> GetIAbc() const noexcept
|
|
43
|
-
{
|
|
44
|
-
return move_to_ref(GetIAbc_());
|
|
45
|
-
}
|
|
46
|
-
protected:
|
|
47
|
-
IAbc() {}
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
template<class T>
|
|
51
|
-
class impl<IAbc, T> : public base<IAbc>
|
|
52
|
-
{
|
|
53
|
-
public:
|
|
54
|
-
T value;
|
|
55
|
-
IAbc* GetIAbc_() const noexcept override
|
|
56
|
-
{
|
|
57
|
-
return IAbc_GetIAbc(*this).copy_to_ref();
|
|
58
|
-
}
|
|
59
|
-
template <class... U>
|
|
60
|
-
static ref<T> create(U... u)
|
|
61
|
-
{
|
|
62
|
-
T const *const p = new implementation(u...);
|
|
63
|
-
return to_ref(*p);
|
|
64
|
-
}
|
|
65
|
-
private:
|
|
66
|
-
template <class... U>
|
|
67
|
-
explicit implementation(U... u) : value(u...) {}
|
|
68
|
-
};
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Manually Written Code
|
|
72
|
-
|
|
73
|
-
```cpp
|
|
74
|
-
struct Abc {};
|
|
75
|
-
|
|
76
|
-
ref<IAbc> IAbc_GetIAbc(impl<IAbc, Abc> const & self)
|
|
77
|
-
{
|
|
78
|
-
return to_ref(self);
|
|
79
|
-
}
|
|
80
|
-
```
|