Compare commits
No commits in common. "master" and "gh-pages" have entirely different histories.
|
@ -1,2 +0,0 @@
|
||||||
[target.armv7-unknown-linux-gnueabihf]
|
|
||||||
linker = "arm-linux-gnueabihf-gcc"
|
|
|
@ -1,9 +0,0 @@
|
||||||
root = true
|
|
||||||
[*]
|
|
||||||
indent_style=space
|
|
||||||
indent_size = 4
|
|
||||||
end_of_line=lf
|
|
||||||
charset=utf-8
|
|
||||||
trim_trailing_whitespace=true
|
|
||||||
max_line_length=120
|
|
||||||
insert_final_newline=true
|
|
|
@ -1,6 +0,0 @@
|
||||||
|
|
||||||
/target/
|
|
||||||
**/*.rs.bk
|
|
||||||
Cargo.lock
|
|
||||||
spec/target
|
|
||||||
.idea
|
|
|
@ -1,3 +0,0 @@
|
||||||
[submodule "tests/spec/testsuite"]
|
|
||||||
path = tests/spec/testsuite
|
|
||||||
url = https://github.com/WebAssembly/testsuite.git
|
|
56
.travis.yml
56
.travis.yml
|
@ -1,56 +0,0 @@
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
language:
|
|
||||||
- rust
|
|
||||||
- cpp
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
include:
|
|
||||||
- rust: nightly
|
|
||||||
- rust: stable
|
|
||||||
- rust: stable
|
|
||||||
env: TARGET=armv7-unknown-linux-gnueabihf
|
|
||||||
|
|
||||||
install:
|
|
||||||
- if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then rustup target add wasm32-unknown-unknown; fi
|
|
||||||
- if [ -n "$TARGET" ]; then rustup target add "$TARGET" && sudo apt-get install --yes qemu-user-static; fi
|
|
||||||
- if [ "$TARGET" == "armv7-unknown-linux-gnueabihf" ]; then sudo apt-get install --yes crossbuild-essential-armhf && export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf; fi
|
|
||||||
- rustup component add rustfmt
|
|
||||||
- sudo apt-get install --yes cmake
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cargo fmt --all -- --check
|
|
||||||
# Make sure nightly targets are not broken.
|
|
||||||
- if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then cargo check --tests --manifest-path=fuzz/Cargo.toml; fi
|
|
||||||
- if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then cargo check --benches --manifest-path=benches/Cargo.toml; fi
|
|
||||||
# Make sure `no_std` version checks.
|
|
||||||
- if [ "$TRAVIS_RUST_VERSION" == "nightly" ]; then cargo +nightly check --no-default-features --features core; fi
|
|
||||||
# Check that `vec_memory` feature works.
|
|
||||||
- cargo check --features vec_memory
|
|
||||||
- travis_wait 60 ./test.sh
|
|
||||||
- ./doc.sh
|
|
||||||
|
|
||||||
after_success: |
|
|
||||||
# Build documentation and deploy it to github pages.
|
|
||||||
[ $TRAVIS_BRANCH = master ] &&
|
|
||||||
[ $TRAVIS_PULL_REQUEST = false ] &&
|
|
||||||
echo "<meta http-equiv=refresh content=0;url=`echo $TRAVIS_REPO_SLUG | cut -d '/' -f 2`/index.html>" > target/doc/index.html &&
|
|
||||||
sudo pip install ghp-import &&
|
|
||||||
ghp-import -n target/doc &&
|
|
||||||
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
|
||||||
|
|
||||||
cache:
|
|
||||||
# Don't use `cache: cargo` since it adds the `target` directory and that can be huge.
|
|
||||||
# Saving and loading this directory dwarfes actual compilation and test times. But what is more
|
|
||||||
# important, is that travis timeouts the build since the job doesn't produce any output for more
|
|
||||||
# than 10 minutes.
|
|
||||||
#
|
|
||||||
# So we just cache ~/.cargo directory
|
|
||||||
directories:
|
|
||||||
- /home/travis/.cargo
|
|
||||||
before_cache:
|
|
||||||
# Travis can't cache files that are not readable by "others"
|
|
||||||
- chmod -R a+r $HOME/.cargo
|
|
||||||
# According to the Travis CI docs for building Rust project this is done by,
|
|
||||||
- rm -rf /home/travis/.cargo/registry
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
These documentation pages include resources by third parties. This copyright
|
||||||
|
file applies only to those resources. The following third party resources are
|
||||||
|
included, and carry their own copyright notices and license terms:
|
||||||
|
|
||||||
|
* Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff):
|
||||||
|
|
||||||
|
Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
|
||||||
|
with Reserved Font Name Fira Sans.
|
||||||
|
|
||||||
|
Copyright (c) 2014, Telefonica S.A.
|
||||||
|
|
||||||
|
Licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
See FiraSans-LICENSE.txt.
|
||||||
|
|
||||||
|
* rustdoc.css, main.js, and playpen.js:
|
||||||
|
|
||||||
|
Copyright 2015 The Rust Developers.
|
||||||
|
Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or
|
||||||
|
the MIT license (LICENSE-MIT.txt) at your option.
|
||||||
|
|
||||||
|
* normalize.css:
|
||||||
|
|
||||||
|
Copyright (c) Nicolas Gallagher and Jonathan Neal.
|
||||||
|
Licensed under the MIT license (see LICENSE-MIT.txt).
|
||||||
|
|
||||||
|
* Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff):
|
||||||
|
|
||||||
|
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
|
||||||
|
with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark
|
||||||
|
of Adobe Systems Incorporated in the United States and/or other countries.
|
||||||
|
|
||||||
|
Licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
See SourceCodePro-LICENSE.txt.
|
||||||
|
|
||||||
|
* Source Serif Pro (SourceSerifPro-Regular.ttf.woff,
|
||||||
|
SourceSerifPro-Bold.ttf.woff, SourceSerifPro-It.ttf.woff):
|
||||||
|
|
||||||
|
Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with
|
||||||
|
Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of
|
||||||
|
Adobe Systems Incorporated in the United States and/or other countries.
|
||||||
|
|
||||||
|
Licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
See SourceSerifPro-LICENSE.txt.
|
||||||
|
|
||||||
|
This copyright file is intended to be distributed with rustdoc output.
|
52
Cargo.toml
52
Cargo.toml
|
@ -1,52 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "wasmi"
|
|
||||||
version = "0.5.1"
|
|
||||||
authors = ["Nikolay Volf <nikvolf@gmail.com>", "Svyatoslav Nikolsky <svyatonik@yandex.ru>", "Sergey Pepyakin <s.pepyakin@gmail.com>"]
|
|
||||||
license = "MIT/Apache-2.0"
|
|
||||||
readme = "README.md"
|
|
||||||
repository = "https://github.com/paritytech/wasmi"
|
|
||||||
documentation = "https://paritytech.github.io/wasmi/"
|
|
||||||
description = "WebAssembly interpreter"
|
|
||||||
keywords = ["wasm", "webassembly", "bytecode", "interpreter"]
|
|
||||||
exclude = [ "/res/*", "/tests/*", "/fuzz/*", "/benches/*" ]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
wasmi-validation = { version = "0.2", path = "validation", default-features = false }
|
|
||||||
parity-wasm = { version = "0.40.1", default-features = false }
|
|
||||||
memory_units = "0.3.0"
|
|
||||||
libm = { version = "0.1.2", optional = true }
|
|
||||||
num-rational = { version = "0.2.2", default-features = false }
|
|
||||||
num-traits = { version = "0.2.8", default-features = false }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
assert_matches = "1.1"
|
|
||||||
rand = "0.4.2"
|
|
||||||
wabt = "0.9"
|
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["std"]
|
|
||||||
# Disable for no_std support
|
|
||||||
std = [
|
|
||||||
"parity-wasm/std",
|
|
||||||
"wasmi-validation/std",
|
|
||||||
"num-rational/std",
|
|
||||||
"num-rational/bigint-std",
|
|
||||||
"num-traits/std"
|
|
||||||
]
|
|
||||||
# Enable for no_std support
|
|
||||||
core = [
|
|
||||||
# `core` doesn't support vec_memory
|
|
||||||
"vec_memory",
|
|
||||||
"wasmi-validation/core",
|
|
||||||
"libm"
|
|
||||||
]
|
|
||||||
# Enforce using the linear memory implementation based on `Vec` instead of
|
|
||||||
# mmap on unix systems.
|
|
||||||
#
|
|
||||||
# Useful for tests and if you need to minimize unsafe usage at the cost of performance on some
|
|
||||||
# workloads.
|
|
||||||
vec_memory = []
|
|
||||||
|
|
||||||
[workspace]
|
|
||||||
members = ["validation"]
|
|
||||||
exclude = ["benches"]
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
|
||||||
|
with Reserved Font Name < Fira >,
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Binary file not shown.
Binary file not shown.
|
@ -186,7 +186,7 @@ APPENDIX: How to apply the Apache License to your work.
|
||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright 2018 Nikolay Volf
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
|
@ -1,5 +1,3 @@
|
||||||
Copyright (c) 2018 Nikolay Volf
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any
|
Permission is hereby granted, free of charge, to any
|
||||||
person obtaining a copy of this software and associated
|
person obtaining a copy of this software and associated
|
||||||
documentation files (the "Software"), to deal in the
|
documentation files (the "Software"), to deal in the
|
53
README.md
53
README.md
|
@ -1,53 +0,0 @@
|
||||||
[![crates.io link](https://img.shields.io/crates/v/wasmi.svg)](https://crates.io/crates/wasmi)
|
|
||||||
[![Build Status](https://travis-ci.org/paritytech/wasmi.svg?branch=master)](https://travis-ci.org/paritytech/wasmi)
|
|
||||||
|
|
||||||
# `wasmi`
|
|
||||||
|
|
||||||
`wasmi` - a Wasm interpreter.
|
|
||||||
|
|
||||||
`wasmi` was conceived as a component of [parity-ethereum](https://github.com/paritytech/parity-ethereum) (ethereum-like contracts in wasm) and [substrate](https://github.com/paritytech/substrate). These projects are related to blockchain and require a high degree of correctness, even if that might be over conservative. This specifically means that we are not trying to be involved in any implementation of any of work-in-progress Wasm proposals. We are also trying to be as close as possible to the spec, which means we are trying to avoid features that is not directly supported by the spec. This means that it is flexible on the one hand and on the other hand there shouldn't be a problem migrating to another spec compliant execution engine.
|
|
||||||
|
|
||||||
With all that said, `wasmi` should be a good option for initial prototyping.
|
|
||||||
|
|
||||||
# Build & Test
|
|
||||||
|
|
||||||
As `wasmi` contains a git submodule, you need to use `--recursive` for cloning or to checkout the submodule explicitly, otherwise the testing would fail.
|
|
||||||
|
|
||||||
```
|
|
||||||
git clone https://github.com/paritytech/wasmi.git --recursive
|
|
||||||
cd wasmi
|
|
||||||
cargo build
|
|
||||||
cargo test
|
|
||||||
```
|
|
||||||
|
|
||||||
# `no_std` support
|
|
||||||
|
|
||||||
This crate supports `no_std` environments.
|
|
||||||
Enable the `core` feature and disable default features:
|
|
||||||
```toml
|
|
||||||
[dependencies]
|
|
||||||
wasmi = {
|
|
||||||
version = "*",
|
|
||||||
default-features = false,
|
|
||||||
features = "core"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The `core` feature requires the `core` and `alloc` libraries and a nightly compiler.
|
|
||||||
Also, code related to `std::error` is disabled.
|
|
||||||
|
|
||||||
Floating point operations in `no_std` use [`libm`](https://crates.io/crates/libm), which sometimes panics in debug mode (https://github.com/japaric/libm/issues/4).
|
|
||||||
So make sure to either use release builds or avoid WASM with floating point operations, for example by using [`deny_floating_point`](https://docs.rs/wasmi/0.4.0/wasmi/struct.Module.html#method.deny_floating_point).
|
|
||||||
|
|
||||||
# License
|
|
||||||
|
|
||||||
`wasmi` is primarily distributed under the terms of both the MIT
|
|
||||||
license and the Apache License (Version 2.0), at your choice.
|
|
||||||
|
|
||||||
See LICENSE-APACHE, and LICENSE-MIT for details.
|
|
||||||
|
|
||||||
## Contribution
|
|
||||||
|
|
||||||
Unless you explicitly state otherwise, any contribution intentionally submitted
|
|
||||||
for inclusion in `wasmi` by you, as defined in the Apache-2.0 license, shall be
|
|
||||||
dual licensed as above, without any additional terms or conditions.
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
|
||||||
|
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,93 @@
|
||||||
|
Copyright 2014-2018 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
|
||||||
|
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
var ALIASES = {};
|
||||||
|
ALIASES["instantiate"] = {};
|
||||||
|
ALIASES["libc"] = {};
|
||||||
|
ALIASES["memory_units"] = {};
|
||||||
|
ALIASES["num_bigint"] = {};
|
||||||
|
ALIASES["num_integer"] = {};
|
||||||
|
ALIASES["num_rational"] = {};
|
||||||
|
ALIASES["num_traits"] = {};
|
||||||
|
ALIASES["parity_wasm"] = {};
|
||||||
|
ALIASES["wasmi"] = {};
|
||||||
|
ALIASES["wasmi_validation"] = {};
|
|
@ -1,3 +0,0 @@
|
||||||
/target
|
|
||||||
*.trace
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "benches"
|
|
||||||
version = "0.1.0"
|
|
||||||
authors = ["Sergey Pepyakin <s.pepyakin@gmail.com>"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
wasmi = { path = ".." }
|
|
||||||
assert_matches = "1.2"
|
|
||||||
wabt = "0.9"
|
|
||||||
|
|
||||||
[profile.bench]
|
|
||||||
debug = true
|
|
|
@ -1,31 +0,0 @@
|
||||||
use std::env;
|
|
||||||
use std::process;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
println!("cargo:rerun-if-changed=./wasm-kernel/");
|
|
||||||
|
|
||||||
// The CARGO environment variable provides a path to the executable that
|
|
||||||
// runs this build process.
|
|
||||||
let cargo_bin = env::var("CARGO").expect("CARGO env variable should be defined");
|
|
||||||
|
|
||||||
// Build a release version of wasm-kernel. The code in the output wasm binary
|
|
||||||
// will be used in benchmarks.
|
|
||||||
let output = process::Command::new(cargo_bin)
|
|
||||||
.arg("build")
|
|
||||||
.arg("--target=wasm32-unknown-unknown")
|
|
||||||
.arg("--release")
|
|
||||||
.arg("--manifest-path=./wasm-kernel/Cargo.toml")
|
|
||||||
.arg("--verbose")
|
|
||||||
.output()
|
|
||||||
.expect("failed to execute `cargo`");
|
|
||||||
|
|
||||||
if !output.status.success() {
|
|
||||||
let msg = format!(
|
|
||||||
"status: {status}\nstdout: {stdout}\nstderr: {stderr}\n",
|
|
||||||
status = output.status,
|
|
||||||
stdout = String::from_utf8_lossy(&output.stdout),
|
|
||||||
stderr = String::from_utf8_lossy(&output.stderr),
|
|
||||||
);
|
|
||||||
panic!("{}", msg);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,278 +0,0 @@
|
||||||
#![feature(test)]
|
|
||||||
|
|
||||||
extern crate test;
|
|
||||||
extern crate wasmi;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate assert_matches;
|
|
||||||
extern crate wabt;
|
|
||||||
|
|
||||||
use std::error;
|
|
||||||
use std::fs::File;
|
|
||||||
use wasmi::{ImportsBuilder, Module, ModuleInstance, NopExternals, RuntimeValue};
|
|
||||||
|
|
||||||
use test::Bencher;
|
|
||||||
|
|
||||||
// Load a module from a file.
|
|
||||||
fn load_from_file(filename: &str) -> Result<Module, Box<dyn error::Error>> {
|
|
||||||
use std::io::prelude::*;
|
|
||||||
let mut file = File::open(filename)?;
|
|
||||||
let mut buf = Vec::new();
|
|
||||||
file.read_to_end(&mut buf)?;
|
|
||||||
Ok(Module::from_buffer(buf)?)
|
|
||||||
}
|
|
||||||
|
|
||||||
const REVCOMP_INPUT: &'static [u8] = include_bytes!("./revcomp-input.txt");
|
|
||||||
const REVCOMP_OUTPUT: &'static [u8] = include_bytes!("./revcomp-output.txt");
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn bench_tiny_keccak(b: &mut Bencher) {
|
|
||||||
let wasm_kernel = load_from_file(
|
|
||||||
"./wasm-kernel/target/wasm32-unknown-unknown/release/wasm_kernel.wasm",
|
|
||||||
).expect("failed to load wasm_kernel. Is `build.rs` broken?");
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&wasm_kernel, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
let test_data_ptr = assert_matches!(
|
|
||||||
instance.invoke_export("prepare_tiny_keccak", &[], &mut NopExternals),
|
|
||||||
Ok(Some(v @ RuntimeValue::I32(_))) => v
|
|
||||||
);
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
instance
|
|
||||||
.invoke_export("bench_tiny_keccak", &[test_data_ptr], &mut NopExternals)
|
|
||||||
.unwrap();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn bench_rev_comp(b: &mut Bencher) {
|
|
||||||
let wasm_kernel = load_from_file(
|
|
||||||
"./wasm-kernel/target/wasm32-unknown-unknown/release/wasm_kernel.wasm",
|
|
||||||
).expect("failed to load wasm_kernel. Is `build.rs` broken?");
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&wasm_kernel, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
// Allocate buffers for the input and output.
|
|
||||||
let test_data_ptr: RuntimeValue = {
|
|
||||||
let input_size = RuntimeValue::I32(REVCOMP_INPUT.len() as i32);
|
|
||||||
assert_matches!(
|
|
||||||
instance.invoke_export("prepare_rev_complement", &[input_size], &mut NopExternals),
|
|
||||||
Ok(Some(v @ RuntimeValue::I32(_))) => v,
|
|
||||||
"",
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the pointer to the input buffer.
|
|
||||||
let input_data_mem_offset = assert_matches!(
|
|
||||||
instance.invoke_export("rev_complement_input_ptr", &[test_data_ptr], &mut NopExternals),
|
|
||||||
Ok(Some(RuntimeValue::I32(v))) => v as u32,
|
|
||||||
"",
|
|
||||||
);
|
|
||||||
|
|
||||||
// Copy test data inside the wasm memory.
|
|
||||||
let memory = instance.export_by_name("memory")
|
|
||||||
.expect("Expected export with a name 'memory'")
|
|
||||||
.as_memory()
|
|
||||||
.expect("'memory' should be a memory instance")
|
|
||||||
.clone();
|
|
||||||
memory
|
|
||||||
.set(input_data_mem_offset, REVCOMP_INPUT)
|
|
||||||
.expect("can't load test data into a wasm memory");
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
instance
|
|
||||||
.invoke_export("bench_rev_complement", &[test_data_ptr], &mut NopExternals)
|
|
||||||
.unwrap();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Verify the result.
|
|
||||||
let output_data_mem_offset = assert_matches!(
|
|
||||||
instance.invoke_export("rev_complement_output_ptr", &[test_data_ptr], &mut NopExternals),
|
|
||||||
Ok(Some(RuntimeValue::I32(v))) => v as u32,
|
|
||||||
"",
|
|
||||||
);
|
|
||||||
let result = memory
|
|
||||||
.get(output_data_mem_offset, REVCOMP_OUTPUT.len())
|
|
||||||
.expect("can't get result data from a wasm memory");
|
|
||||||
assert_eq!(&*result, REVCOMP_OUTPUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn bench_regex_redux(b: &mut Bencher) {
|
|
||||||
let wasm_kernel = load_from_file(
|
|
||||||
"./wasm-kernel/target/wasm32-unknown-unknown/release/wasm_kernel.wasm",
|
|
||||||
).expect("failed to load wasm_kernel. Is `build.rs` broken?");
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&wasm_kernel, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
// Allocate buffers for the input and output.
|
|
||||||
let test_data_ptr: RuntimeValue = {
|
|
||||||
let input_size = RuntimeValue::I32(REVCOMP_INPUT.len() as i32);
|
|
||||||
assert_matches!(
|
|
||||||
instance.invoke_export("prepare_regex_redux", &[input_size], &mut NopExternals),
|
|
||||||
Ok(Some(v @ RuntimeValue::I32(_))) => v,
|
|
||||||
"",
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the pointer to the input buffer.
|
|
||||||
let input_data_mem_offset = assert_matches!(
|
|
||||||
instance.invoke_export("regex_redux_input_ptr", &[test_data_ptr], &mut NopExternals),
|
|
||||||
Ok(Some(RuntimeValue::I32(v))) => v as u32,
|
|
||||||
"",
|
|
||||||
);
|
|
||||||
|
|
||||||
// Copy test data inside the wasm memory.
|
|
||||||
let memory = instance.export_by_name("memory")
|
|
||||||
.expect("Expected export with a name 'memory'")
|
|
||||||
.as_memory()
|
|
||||||
.expect("'memory' should be a memory instance")
|
|
||||||
.clone();
|
|
||||||
memory
|
|
||||||
.set(input_data_mem_offset, REVCOMP_INPUT)
|
|
||||||
.expect("can't load test data into a wasm memory");
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
instance
|
|
||||||
.invoke_export("bench_regex_redux", &[test_data_ptr], &mut NopExternals)
|
|
||||||
.unwrap();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn fac_recursive(b: &mut Bencher) {
|
|
||||||
let wasm = wabt::wat2wasm(
|
|
||||||
r#"
|
|
||||||
;; Recursive factorial
|
|
||||||
(func (export "fac-rec") (param i64) (result i64)
|
|
||||||
(if (result i64) (i64.eq (get_local 0) (i64.const 0))
|
|
||||||
(then (i64.const 1))
|
|
||||||
(else
|
|
||||||
(i64.mul (get_local 0) (call 0 (i64.sub (get_local 0) (i64.const 1))))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
"#
|
|
||||||
).unwrap();
|
|
||||||
|
|
||||||
let module = Module::from_buffer(&wasm).unwrap();
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&module, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
let value = instance
|
|
||||||
.invoke_export("fac-rec", &[RuntimeValue::I64(25)], &mut NopExternals);
|
|
||||||
assert_matches!(value, Ok(Some(RuntimeValue::I64(7034535277573963776))));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn fac_opt(b: &mut Bencher) {
|
|
||||||
let wasm = wabt::wat2wasm(
|
|
||||||
r#"
|
|
||||||
;; Optimized factorial.
|
|
||||||
(func (export "fac-opt") (param i64) (result i64)
|
|
||||||
(local i64)
|
|
||||||
(set_local 1 (i64.const 1))
|
|
||||||
(block
|
|
||||||
(br_if 0 (i64.lt_s (get_local 0) (i64.const 2)))
|
|
||||||
(loop
|
|
||||||
(set_local 1 (i64.mul (get_local 1) (get_local 0)))
|
|
||||||
(set_local 0 (i64.add (get_local 0) (i64.const -1)))
|
|
||||||
(br_if 0 (i64.gt_s (get_local 0) (i64.const 1)))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(get_local 1)
|
|
||||||
)
|
|
||||||
"#
|
|
||||||
).unwrap();
|
|
||||||
|
|
||||||
let module = Module::from_buffer(&wasm).unwrap();
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&module, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
let value = instance
|
|
||||||
.invoke_export("fac-opt", &[RuntimeValue::I64(25)], &mut NopExternals);
|
|
||||||
assert_matches!(value, Ok(Some(RuntimeValue::I64(7034535277573963776))));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is used for testing overhead of a function call
|
|
||||||
// is not too large.
|
|
||||||
#[bench]
|
|
||||||
fn recursive_ok(b: &mut Bencher) {
|
|
||||||
let wasm = wabt::wat2wasm(
|
|
||||||
r#"
|
|
||||||
(module
|
|
||||||
(func $call (export "call") (param i32) (result i32)
|
|
||||||
block (result i32)
|
|
||||||
get_local 0
|
|
||||||
get_local 0
|
|
||||||
i32.eqz
|
|
||||||
br_if 0
|
|
||||||
|
|
||||||
i32.const 1
|
|
||||||
i32.sub
|
|
||||||
call $call
|
|
||||||
end
|
|
||||||
)
|
|
||||||
)
|
|
||||||
"#
|
|
||||||
).unwrap();
|
|
||||||
let module = Module::from_buffer(&wasm).unwrap();
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&module, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
let value = instance
|
|
||||||
.invoke_export("call", &[RuntimeValue::I32(8000)], &mut NopExternals);
|
|
||||||
assert_matches!(value, Ok(Some(RuntimeValue::I32(0))));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#[bench]
|
|
||||||
fn recursive_trap(b: &mut Bencher) {
|
|
||||||
let wasm = wabt::wat2wasm(
|
|
||||||
r#"
|
|
||||||
(module
|
|
||||||
(func $call (export "call") (param i32) (result i32)
|
|
||||||
block (result i32)
|
|
||||||
get_local 0
|
|
||||||
get_local 0
|
|
||||||
i32.eqz
|
|
||||||
br_if 0
|
|
||||||
|
|
||||||
i32.const 1
|
|
||||||
i32.sub
|
|
||||||
call $call
|
|
||||||
end
|
|
||||||
unreachable
|
|
||||||
)
|
|
||||||
)
|
|
||||||
"#
|
|
||||||
).unwrap();
|
|
||||||
let module = Module::from_buffer(&wasm).unwrap();
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&module, &ImportsBuilder::default())
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
b.iter(|| {
|
|
||||||
let value = instance
|
|
||||||
.invoke_export("call", &[RuntimeValue::I32(1000)], &mut NopExternals);
|
|
||||||
assert_matches!(value, Err(_));
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,171 +0,0 @@
|
||||||
>ONE Homo sapiens alu
|
|
||||||
GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
|
|
||||||
TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
|
|
||||||
AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
|
|
||||||
GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
|
|
||||||
CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
|
|
||||||
GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
|
|
||||||
GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
|
|
||||||
TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
|
|
||||||
AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
|
|
||||||
GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
|
|
||||||
AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
|
|
||||||
AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
|
|
||||||
GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
|
|
||||||
CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
|
|
||||||
AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
|
|
||||||
TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
|
|
||||||
TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
|
|
||||||
GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
|
|
||||||
TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
|
|
||||||
CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
|
|
||||||
CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
|
|
||||||
TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
|
|
||||||
CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
|
|
||||||
AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
|
|
||||||
GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
|
|
||||||
TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
|
|
||||||
TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
|
|
||||||
GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
|
|
||||||
GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
|
|
||||||
ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
|
|
||||||
TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
|
|
||||||
CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
|
|
||||||
CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
|
|
||||||
GGCGACAGAGCGAGACTCCG
|
|
||||||
>TWO IUB ambiguity codes
|
|
||||||
cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
|
|
||||||
tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
|
|
||||||
NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
|
|
||||||
cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
|
|
||||||
gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
|
|
||||||
HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
|
|
||||||
tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
|
|
||||||
tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
|
|
||||||
acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
|
|
||||||
tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
|
|
||||||
gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
|
|
||||||
accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
|
|
||||||
RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
|
|
||||||
tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
|
|
||||||
cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
|
|
||||||
ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
|
|
||||||
actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
|
|
||||||
YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
|
|
||||||
KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
|
|
||||||
aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
|
|
||||||
aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
|
|
||||||
gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
|
|
||||||
tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
|
|
||||||
tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
|
|
||||||
ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
|
|
||||||
ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
|
|
||||||
BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
|
|
||||||
aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
|
|
||||||
tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
|
|
||||||
cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
|
|
||||||
aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
|
|
||||||
tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
|
|
||||||
aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
|
|
||||||
gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
|
|
||||||
ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
|
|
||||||
taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
|
|
||||||
ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
|
|
||||||
gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
|
|
||||||
gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
|
|
||||||
tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
|
|
||||||
tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
|
|
||||||
taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
|
|
||||||
cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
|
|
||||||
aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
|
|
||||||
cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
|
|
||||||
ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
|
|
||||||
attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
|
|
||||||
ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
|
|
||||||
attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
|
|
||||||
tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
|
|
||||||
>THREE Homo sapiens frequency
|
|
||||||
aacacttcaccaggtatcgtgaaggctcaagattacccagagaacctttgcaatataaga
|
|
||||||
atatgtatgcagcattaccctaagtaattatattctttttctgactcaaagtgacaagcc
|
|
||||||
ctagtgtatattaaatcggtatatttgggaaattcctcaaactatcctaatcaggtagcc
|
|
||||||
atgaaagtgatcaaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaa
|
|
||||||
tagattgcgcaaaattcgtaccttaagtctctcgccaagatattaggatcctattactca
|
|
||||||
tatcgtgtttttctttattgccgccatccccggagtatctcacccatccttctcttaaag
|
|
||||||
gcctaatattacctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgat
|
|
||||||
tcttatgtgtaccatatgtatagtaatcacgcgactatatagtgctttagtatcgcccgt
|
|
||||||
gggtgagtgaatattctgggctagcgtgagatagtttcttgtcctaatatttttcagatc
|
|
||||||
gaatagcttctatttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtc
|
|
||||||
atgaccagatccacgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtc
|
|
||||||
taacttatatcccgtcgcttactttctaacaccccttatgtatttttaaaattacgttta
|
|
||||||
ttcgaacgtacttggcggaagcgttattttttgaagtaagttacattgggcagactcttg
|
|
||||||
acattttcgatacgactttctttcatccatcacaggactcgttcgtattgatatcagaag
|
|
||||||
ctcgtgatgattagttgtcttctttaccaatactttgaggcctattctgcgaaatttttg
|
|
||||||
ttgccctgcgaacttcacataccaaggaacacctcgcaacatgccttcatatccatcgtt
|
|
||||||
cattgtaattcttacacaatgaatcctaagtaattacatccctgcgtaaaagatggtagg
|
|
||||||
ggcactgaggatatattaccaagcatttagttatgagtaatcagcaatgtttcttgtatt
|
|
||||||
aagttctctaaaatagttacatcgtaatgttatctcgggttccgcgaataaacgagatag
|
|
||||||
attcattatatatggccctaagcaaaaacctcctcgtattctgttggtaattagaatcac
|
|
||||||
acaatacgggttgagatattaattatttgtagtacgaagagatataaaaagatgaacaat
|
|
||||||
tactcaagtcaagatgtatacgggatttataataaaaatcgggtagagatctgctttgca
|
|
||||||
attcagacgtgccactaaatcgtaatatgtcgcgttacatcagaaagggtaactattatt
|
|
||||||
aattaataaagggcttaatcactacatattagatcttatccgatagtcttatctattcgt
|
|
||||||
tgtatttttaagcggttctaattcagtcattatatcagtgctccgagttctttattattg
|
|
||||||
ttttaaggatgacaaaatgcctcttgttataacgctgggagaagcagactaagagtcgga
|
|
||||||
gcagttggtagaatgaggctgcaaaagacggtctcgacgaatggacagactttactaaac
|
|
||||||
caatgaaagacagaagtagagcaaagtctgaagtggtatcagcttaattatgacaaccct
|
|
||||||
taatacttccctttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttaga
|
|
||||||
ggcatctctcgctcataaataggtagactactcgcaatccaatgtgactatgtaatactg
|
|
||||||
ggaacatcagtccgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacat
|
|
||||||
gagaccacccccgtggggattattagtccgcagtaatcgactcttgacaatccttttcga
|
|
||||||
ttatgtcatagcaatttacgacagttcagcgaagtgactactcggcgaaatggtattact
|
|
||||||
aaagcattcgaacccacatgaatgtgattcttggcaatttctaatccactaaagcttttc
|
|
||||||
cgttgaatctggttgtagatatttatataagttcactaattaagatcacggtagtatatt
|
|
||||||
gatagtgatgtctttgcaagaggttggccgaggaatttacggattctctattgatacaat
|
|
||||||
ttgtctggcttataactcttaaggctgaaccaggcgtttttagacgacttgatcagctgt
|
|
||||||
tagaatggtttggactccctctttcatgtcagtaacatttcagccgttattgttacgata
|
|
||||||
tgcttgaacaatattgatctaccacacacccatagtatattttataggtcatgctgttac
|
|
||||||
ctacgagcatggtattccacttcccattcaatgagtattcaacatcactagcctcagaga
|
|
||||||
tgatgacccacctctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagac
|
|
||||||
gatatcaagcgctttaaattgcatataacatttgagggtaaagctaagcggatgctttat
|
|
||||||
ataatcaatactcaataataagatttgattgcattttagagttatgacacgacatagttc
|
|
||||||
actaacgagttactattcccagatctagactgaagtactgatcgagacgatccttacgtc
|
|
||||||
gatgatcgttagttatcgacttaggtcgggtctctagcggtattggtacttaaccggaca
|
|
||||||
ctatactaataacccatgatcaaagcataacagaatacagacgataatttcgccaacata
|
|
||||||
tatgtacagaccccaagcatgagaagctcattgaaagctatcattgaagtcccgctcaca
|
|
||||||
atgtgtcttttccagacggtttaactggttcccgggagtcctggagtttcgacttacata
|
|
||||||
aatggaaacaatgtattttgctaatttatctatagcgtcatttggaccaatacagaatat
|
|
||||||
tatgttgcctagtaatccactataacccgcaagtgctgatagaaaatttttagacgattt
|
|
||||||
ataaatgccccaagtatccctcccgtgaatcctccgttatactaattagtattcgttcat
|
|
||||||
acgtataccgcgcatatatgaacatttggcgataaggcgcgtgaattgttacgtgacaga
|
|
||||||
gatagcagtttcttgtgatatggttaacagacgtacatgaagggaaactttatatctata
|
|
||||||
gtgatgcttccgtagaaataccgccactggtctgccaatgatgaagtatgtagctttagg
|
|
||||||
tttgtactatgaggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgac
|
|
||||||
gaatttatactaatacgctttcactattggctacaaaatagggaagagtttcaatcatga
|
|
||||||
gagggagtatatggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcat
|
|
||||||
tcttgaaagatacataagcgataagttacgacaattataagcaacatccctaccttcgta
|
|
||||||
acgatttcactgttactgcgcttgaaatacactatggggctattggcggagagaagcaga
|
|
||||||
tcgcgccgagcatatacgagacctataatgttgatgatagagaaggcgtctgaattgata
|
|
||||||
catcgaagtacactttctttcgtagtatctctcgtcctctttctatctccggacacaaga
|
|
||||||
attaagttatatatatagagtcttaccaatcatgttgaatcctgattctcagagttcttt
|
|
||||||
ggcgggccttgtgatgactgagaaacaatgcaatattgctccaaatttcctaagcaaatt
|
|
||||||
ctcggttatgttatgttatcagcaaagcgttacgttatgttatttaaatctggaatgacg
|
|
||||||
gagcgaagttcttatgtcggtgtgggaataattcttttgaagacagcactccttaaataa
|
|
||||||
tatcgctccgtgtttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtgg
|
|
||||||
tgtatatatcggataacaattaatacgatgttcatagtgacagtatactgatcgagtcct
|
|
||||||
ctaaagtcaattacctcacttaacaatctcattgatgttgtgtcattcccggtatcgccc
|
|
||||||
gtagtatgtgctctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgtta
|
|
||||||
ggtaagatctctctgaattccttcgtgccaacttaaaacattatcaaaatttcttctact
|
|
||||||
tggattaactacttttacgagcatggcaaattcccctgtggaagacggttcattattatc
|
|
||||||
ggaaaccttatagaaattgcgtgttgactgaaattagatttttattgtaagagttgcatc
|
|
||||||
tttgcgattcctctggtctagcttccaatgaacagtcctcccttctattcgacatcgggt
|
|
||||||
ccttcgtacatgtctttgcgatgtaataattaggttcggagtgtggccttaatgggtgca
|
|
||||||
actaggaatacaacgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaac
|
|
||||||
gtgctccttgcttagcttgtgaatgagactcagtagttaaataaatccatatctgcaatc
|
|
||||||
gattccacaggtattgtccactatctttgaactactctaagagatacaagcttagctgag
|
|
||||||
accgaggtgtatatgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcga
|
|
||||||
gaagctaataccggctgtttccagctttataagattaaaatttggctgtcctggcggcct
|
|
||||||
cagaattgttctatcgtaatcagttggttcattaattagctaagtacgaggtacaactta
|
|
||||||
tctgtcccagaacagctccacaagtttttttacagccgaaacccctgtgtgaatcttaat
|
|
||||||
atccaagcgcgttatctgattagagtttacaactcagtattttatcagtacgttttgttt
|
|
||||||
ccaacattacccggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgta
|
|
||||||
ggaagtgaaaagataaatat
|
|
|
@ -1,171 +0,0 @@
|
||||||
>ONE Homo sapiens alu
|
|
||||||
CGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAAC
|
|
||||||
CTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACA
|
|
||||||
GGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCAT
|
|
||||||
GTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAA
|
|
||||||
AGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTC
|
|
||||||
TGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGG
|
|
||||||
GTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACC
|
|
||||||
ACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTG
|
|
||||||
GTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTA
|
|
||||||
CAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCT
|
|
||||||
GGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTC
|
|
||||||
TCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAAT
|
|
||||||
TTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCT
|
|
||||||
GACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCA
|
|
||||||
CCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGC
|
|
||||||
GCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCC
|
|
||||||
TCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTA
|
|
||||||
GTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGAT
|
|
||||||
CCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCT
|
|
||||||
TTTTGAGACGGAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTC
|
|
||||||
ACTGCAACCTCCGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTG
|
|
||||||
GGATTACAGGCGCGCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGT
|
|
||||||
TTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGG
|
|
||||||
CCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAG
|
|
||||||
TCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCG
|
|
||||||
CCTCCCGGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGC
|
|
||||||
GCGCCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGG
|
|
||||||
CCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGC
|
|
||||||
TGGGATTACAGGCGTGAGCCACCGCGCCCGGCCTTTTTGAGACGGAGTCTCGCTCTGTCG
|
|
||||||
CCCAGGCTGGAGTGCAGTGGCGCGATCTCGGCTCACTGCAACCTCCGCCTCCCGGGTTCA
|
|
||||||
AGCGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGATTACAGGCGCGCGCCACCACGCC
|
|
||||||
CGGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGCTGGTCTC
|
|
||||||
GAACTCCTGACCTCAGGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGC
|
|
||||||
GTGAGCCACCGCGCCCGGCC
|
|
||||||
>TWO IUB ambiguity codes
|
|
||||||
TAGGDHACHATCRGTRGVTGAGWTATGYTGCTGTCABACDWVTRTAAGAVVAGATTTNDA
|
|
||||||
GASMTCTGCATBYTTCAAKTTACMTATTACTTCATARGGYACMRTGTTTTYTATACVAAT
|
|
||||||
TTCTAKGDACKADACTATATNTANTCGTTCACGBCGYSCBHTANGGTGATCGTAAAGTAA
|
|
||||||
CTATBAAAAGATSTGWATBCSGAKHTTABBAACGTSYCATGCAAVATKTSKTASCGGAAT
|
|
||||||
WVATTTNTCCTTCTTCTTDDAGTGGTTGGATACVGTTAYMTMTBTACTTTHAGCTAGBAA
|
|
||||||
AAGAGKAAGTTRATWATCAGATTMDDTTTAAAVAAATATTKTCYTAAATTVCNKTTRACG
|
|
||||||
ADTATATTTATGATSADSCAATAWAGCGRTAGTGTAAGTGACVGRADYGTGCTACHVSDT
|
|
||||||
CTVCARCSYTTAATATARAAAATTTAATTTACDAATTGBACAGTAYAABATBTGCAGBVG
|
|
||||||
TGATGGDCAAAATBNMSTTABKATTGGSTCCTAGBTTACTTGTTTAGTTTATHCGATSTA
|
|
||||||
AAGTCGAKAAASTGTTTTAWAKCAGATATACTTTTMTTTTGBATAGAGGAGCMATGATRA
|
|
||||||
AAGGNCAYDCCDDGAAAGTHGBTAATCKYTBTACBGTBCTTTTTGDTAASSWTAAWAARA
|
|
||||||
TTGGCTAAGWGRADTYACATAGCTCBTAGATAWAGCAATNGTATMATGTTKMMAGTAWTC
|
|
||||||
CCNTSGAAWATWCAAAAMACTGAADNTYGATNAATCCGAYWNCTAACGTTAGAGDTTTTC
|
|
||||||
ATCTGGKRTAVGAABVCTGWGBTCTDVGKATTBTCTAAGGVADAAAVWTCTAGGGGAGGG
|
|
||||||
TTAGAACAATTAAHTAATNAAATGCATKATCTAAYRTDTCAGSAYTTYHGATRTTWAVTA
|
|
||||||
BGNTCDACAGBCCRCAGWCRTCABTGMMAWGMCTCAACCGATRTGBCAVAATCGTDWDAA
|
|
||||||
CAYAWAATWCTGGTAHCCCTAAGATAACSCTTAGTGSAACAWTBGTCDTTDGACWDBAAC
|
|
||||||
HTTTNGSKTYYAAYGGATNTGATTTAARTTAMBAATCTAAGTBTCATYTAACTTADTGTT
|
|
||||||
TCGATACGAAHGGCYATATACCWDTKYATDCSHTDTCAAAATGTGBACTGSCCVGATGTA
|
|
||||||
TCMMAGCCTTDAAABAATGAAGAGTAACTHATMGVTTAATAACCCGGTTVSANTGCAATT
|
|
||||||
GTGAGATTTAMGTTTAMAAYGCTGACAYAAAAAGGCACAMYTAAGVGGCTGGAABVTACG
|
|
||||||
GATTSTYGTBVAKTATWACCGTGTKAGTDTGTATGTTTAAAGGAAAAAGTAACATARAAA
|
|
||||||
GGTYCAMNYAAABTATAGNTSATANAGTCATCCTATWADKAACTRGTMSACDGTATSAYT
|
|
||||||
AAHSHGTAABYGACTYTATADTGSTATAGAGAAATCGNTAAAGGAAATCAGTTGTNCYMV
|
|
||||||
TNACDRTATBNATATASTAGAAMSCGGGANRCKKMCAAACATTNAGTCTRMAATBMTACC
|
|
||||||
CGTACTTCTBGDSYAATWGAAAATGACADDCHAKAAAYATATTKTTTTCACANACWAGAA
|
|
||||||
AKATCCTTATTAYKHKCTAAACARTATTTTDATBTVWCYGCAATACTAGGKAAASTTDGA
|
|
||||||
MGGCHTTHAATVCAHDRYAGGRCTATACGTCMAGAGAGCTBTHGNACARTCCBDCTAAGA
|
|
||||||
GCGGCTTTARTAAAGAATCCNAGTAWBTGACTTGAATTACWTVACAGAAABCAATNAAAC
|
|
||||||
CGTNTRANTTGAYCMAWBADTANABRGGTKTHTWTAGTTVCTMBKTAGMTVKCCAGCANT
|
|
||||||
TVAGSWTTAGCCGCRHTTTCCTTHNTATTAAGAAGAATAGGMTRAARTCTABGTACDTTT
|
|
||||||
TATAAVDHAHTATAGATCCTAGTAAGYTWATDWCATGAGGGATAGTAAMDMNGBASTWAM
|
|
||||||
TSTATRBAYDABATGTATATYCGCACTGTTTTAACMCWBTATAWAGTATBTSTATVTTAR
|
|
||||||
CCTMTTAAKADATCAACTAATYTSVTAKGDATTATGCKTCAYCAKAATACTTKAANGAGT
|
|
||||||
ATTSDAGATCGGAAATACTTAAYAAVGTATMCGCTTGTGTDCTAATYTATTTTATTTWAA
|
|
||||||
CAGWRCTATGTAGMTGTTTGTTYKTNGTTKTCAGAACNTRACCTACKTGSRATGTGGGGG
|
|
||||||
CTGTCATTAAGTAAATNGSTTABCCCCTCGCAGCTCWHTCGCGAAGCAVATGCKACGHCA
|
|
||||||
ACAKTTAATAACASAAADATTWNYTGTAATTGTTCGTMHACHTWATGTGCWTTTTGAAHY
|
|
||||||
ACTTTGTAYAMSAAACTTAADAAATATAGTABMATATYAATGSGGTAGTTTGTGTBYGGT
|
|
||||||
TWSGSVGWMATTDMTCCWWCABTCSVACAGBAATGTTKATBGTCAATAATCTTCTTAAAC
|
|
||||||
ARVAATHAGYBWCTRWCABGTWWAATCTAAGTCASTAAAKTAAGVKBAATTBGABACGTA
|
|
||||||
AGGTTAAATAAAAACTRMDTWBCTTTTTAATAAAAGATMGCCTACKAKNTBAGYRASTGT
|
|
||||||
ASSTCGTHCGAAKTTATTATATTYTTTGTAGAACATGTCAAAACTWTWTHGKTCCYAATA
|
|
||||||
AAGTGGAYTMCYTAARCSTAAATWAKTGAATTTRAGTCTSSATACGACWAKAASATDAAA
|
|
||||||
TGYYACTSAACAAHAKTSHYARGASTATTATTHAGGYGGASTTTBGAKGATSANAACACD
|
|
||||||
TRGSTTRAAAAAAAACAAGARTCVTAGTAAGATAWATGVHAAKATWGAAAAGTYAHVTAC
|
|
||||||
TCTGRTGTCAWGATRVAAKTCGCAAVCGASWGGTTRTCSAMCCTAACASGWKKAWDAATG
|
|
||||||
ACRCBACTATGTGTCTTCAAAHGSCTATATTTCGTVWAGAAGTAYCKGARAKSGKAGTAN
|
|
||||||
TTTCYACATWATGTCTAAAADMDTWCAATSTKDACAMAADADBSAAATAGGCTHAHAGTA
|
|
||||||
CGACVGAATTATAAAGAHCCVAYHGHTTTACATSTTTATGNCCMTAGCATATGATAVAAG
|
|
||||||
>THREE Homo sapiens frequency
|
|
||||||
ATATTTATCTTTTCACTTCCTACATTGGTCAGACCATTATTCGACACGTGGCGTCATTTT
|
|
||||||
GTCATACCGGGTAATGTTGGAAACAAAACGTACTGATAAAATACTGAGTTGTAAACTCTA
|
|
||||||
ATCAGATAACGCGCTTGGATATTAAGATTCACACAGGGGTTTCGGCTGTAAAAAAACTTG
|
|
||||||
TGGAGCTGTTCTGGGACAGATAAGTTGTACCTCGTACTTAGCTAATTAATGAACCAACTG
|
|
||||||
ATTACGATAGAACAATTCTGAGGCCGCCAGGACAGCCAAATTTTAATCTTATAAAGCTGG
|
|
||||||
AAACAGCCGGTATTAGCTTCTCGCATACTTTGCCTGCATTGGTACCTTACAGATATCAGC
|
|
||||||
GTAGTCATATACACCTCGGTCTCAGCTAAGCTTGTATCTCTTAGAGTAGTTCAAAGATAG
|
|
||||||
TGGACAATACCTGTGGAATCGATTGCAGATATGGATTTATTTAACTACTGAGTCTCATTC
|
|
||||||
ACAAGCTAAGCAAGGAGCACGTTTTGGTGCCGGCATACCGATTTGCTATCATGTCAGCAA
|
|
||||||
ATTTGCGTTGTATTCCTAGTTGCACCCATTAAGGCCACACTCCGAACCTAATTATTACAT
|
|
||||||
CGCAAAGACATGTACGAAGGACCCGATGTCGAATAGAAGGGAGGACTGTTCATTGGAAGC
|
|
||||||
TAGACCAGAGGAATCGCAAAGATGCAACTCTTACAATAAAAATCTAATTTCAGTCAACAC
|
|
||||||
GCAATTTCTATAAGGTTTCCGATAATAATGAACCGTCTTCCACAGGGGAATTTGCCATGC
|
|
||||||
TCGTAAAAGTAGTTAATCCAAGTAGAAGAAATTTTGATAATGTTTTAAGTTGGCACGAAG
|
|
||||||
GAATTCAGAGAGATCTTACCTAACAAAGGCATTAGTAGATGTTCCTTGGTTCACACTCGG
|
|
||||||
TCAATCAGAGCACATACTACGGGCGATACCGGGAATGACACAACATCAATGAGATTGTTA
|
|
||||||
AGTGAGGTAATTGACTTTAGAGGACTCGATCAGTATACTGTCACTATGAACATCGTATTA
|
|
||||||
ATTGTTATCCGATATATACACCACCGATTTGCTTGTGCAAGGTTACAGACCCATTCGATA
|
|
||||||
AATACAAACACGGAGCGATATTATTTAAGGAGTGCTGTCTTCAAAAGAATTATTCCCACA
|
|
||||||
CCGACATAAGAACTTCGCTCCGTCATTCCAGATTTAAATAACATAACGTAACGCTTTGCT
|
|
||||||
GATAACATAACATAACCGAGAATTTGCTTAGGAAATTTGGAGCAATATTGCATTGTTTCT
|
|
||||||
CAGTCATCACAAGGCCCGCCAAAGAACTCTGAGAATCAGGATTCAACATGATTGGTAAGA
|
|
||||||
CTCTATATATATAACTTAATTCTTGTGTCCGGAGATAGAAAGAGGACGAGAGATACTACG
|
|
||||||
AAAGAAAGTGTACTTCGATGTATCAATTCAGACGCCTTCTCTATCATCAACATTATAGGT
|
|
||||||
CTCGTATATGCTCGGCGCGATCTGCTTCTCTCCGCCAATAGCCCCATAGTGTATTTCAAG
|
|
||||||
CGCAGTAACAGTGAAATCGTTACGAAGGTAGGGATGTTGCTTATAATTGTCGTAACTTAT
|
|
||||||
CGCTTATGTATCTTTCAAGAATGAACGGCAGCATATACATACGTTCTACCTTTAGCTACA
|
|
||||||
AAGCATCCATATACTCCCTCTCATGATTGAAACTCTTCCCTATTTTGTAGCCAATAGTGA
|
|
||||||
AAGCGTATTAGTATAAATTCGTCGGTTTTTCACTCGCAACTGTTATACTCTGCAAACAAA
|
|
||||||
CGAAAGCCTCATAGTACAAACCTAAAGCTACATACTTCATCATTGGCAGACCAGTGGCGG
|
|
||||||
TATTTCTACGGAAGCATCACTATAGATATAAAGTTTCCCTTCATGTACGTCTGTTAACCA
|
|
||||||
TATCACAAGAAACTGCTATCTCTGTCACGTAACAATTCACGCGCCTTATCGCCAAATGTT
|
|
||||||
CATATATGCGCGGTATACGTATGAACGAATACTAATTAGTATAACGGAGGATTCACGGGA
|
|
||||||
GGGATACTTGGGGCATTTATAAATCGTCTAAAAATTTTCTATCAGCACTTGCGGGTTATA
|
|
||||||
GTGGATTACTAGGCAACATAATATTCTGTATTGGTCCAAATGACGCTATAGATAAATTAG
|
|
||||||
CAAAATACATTGTTTCCATTTATGTAAGTCGAAACTCCAGGACTCCCGGGAACCAGTTAA
|
|
||||||
ACCGTCTGGAAAAGACACATTGTGAGCGGGACTTCAATGATAGCTTTCAATGAGCTTCTC
|
|
||||||
ATGCTTGGGGTCTGTACATATATGTTGGCGAAATTATCGTCTGTATTCTGTTATGCTTTG
|
|
||||||
ATCATGGGTTATTAGTATAGTGTCCGGTTAAGTACCAATACCGCTAGAGACCCGACCTAA
|
|
||||||
GTCGATAACTAACGATCATCGACGTAAGGATCGTCTCGATCAGTACTTCAGTCTAGATCT
|
|
||||||
GGGAATAGTAACTCGTTAGTGAACTATGTCGTGTCATAACTCTAAAATGCAATCAAATCT
|
|
||||||
TATTATTGAGTATTGATTATATAAAGCATCCGCTTAGCTTTACCCTCAAATGTTATATGC
|
|
||||||
AATTTAAAGCGCTTGATATCGTCTACTCAAGTTCAGGTTTCACATGGCCGCAACGTGACG
|
|
||||||
TTATTAGAGGTGGGTCATCATCTCTGAGGCTAGTGATGTTGAATACTCATTGAATGGGAA
|
|
||||||
GTGGAATACCATGCTCGTAGGTAACAGCATGACCTATAAAATATACTATGGGTGTGTGGT
|
|
||||||
AGATCAATATTGTTCAAGCATATCGTAACAATAACGGCTGAAATGTTACTGACATGAAAG
|
|
||||||
AGGGAGTCCAAACCATTCTAACAGCTGATCAAGTCGTCTAAAAACGCCTGGTTCAGCCTT
|
|
||||||
AAGAGTTATAAGCCAGACAAATTGTATCAATAGAGAATCCGTAAATTCCTCGGCCAACCT
|
|
||||||
CTTGCAAAGACATCACTATCAATATACTACCGTGATCTTAATTAGTGAACTTATATAAAT
|
|
||||||
ATCTACAACCAGATTCAACGGAAAAGCTTTAGTGGATTAGAAATTGCCAAGAATCACATT
|
|
||||||
CATGTGGGTTCGAATGCTTTAGTAATACCATTTCGCCGAGTAGTCACTTCGCTGAACTGT
|
|
||||||
CGTAAATTGCTATGACATAATCGAAAAGGATTGTCAAGAGTCGATTACTGCGGACTAATA
|
|
||||||
ATCCCCACGGGGGTGGTCTCATGTCTCCCCAGGCGAGTGGGGACGGTTGATAAACACGCT
|
|
||||||
GCATCGCGGACTGATGTTCCCAGTATTACATAGTCACATTGGATTGCGAGTAGTCTACCT
|
|
||||||
ATTTATGAGCGAGAGATGCCTCTAACTACTTCGACTTTTAAAACCTTTCCACGCCAGTAT
|
|
||||||
TCGGCGAAAGGGAAGTATTAAGGGTTGTCATAATTAAGCTGATACCACTTCAGACTTTGC
|
|
||||||
TCTACTTCTGTCTTTCATTGGTTTAGTAAAGTCTGTCCATTCGTCGAGACCGTCTTTTGC
|
|
||||||
AGCCTCATTCTACCAACTGCTCCGACTCTTAGTCTGCTTCTCCCAGCGTTATAACAAGAG
|
|
||||||
GCATTTTGTCATCCTTAAAACAATAATAAAGAACTCGGAGCACTGATATAATGACTGAAT
|
|
||||||
TAGAACCGCTTAAAAATACAACGAATAGATAAGACTATCGGATAAGATCTAATATGTAGT
|
|
||||||
GATTAAGCCCTTTATTAATTAATAATAGTTACCCTTTCTGATGTAACGCGACATATTACG
|
|
||||||
ATTTAGTGGCACGTCTGAATTGCAAAGCAGATCTCTACCCGATTTTTATTATAAATCCCG
|
|
||||||
TATACATCTTGACTTGAGTAATTGTTCATCTTTTTATATCTCTTCGTACTACAAATAATT
|
|
||||||
AATATCTCAACCCGTATTGTGTGATTCTAATTACCAACAGAATACGAGGAGGTTTTTGCT
|
|
||||||
TAGGGCCATATATAATGAATCTATCTCGTTTATTCGCGGAACCCGAGATAACATTACGAT
|
|
||||||
GTAACTATTTTAGAGAACTTAATACAAGAAACATTGCTGATTACTCATAACTAAATGCTT
|
|
||||||
GGTAATATATCCTCAGTGCCCCTACCATCTTTTACGCAGGGATGTAATTACTTAGGATTC
|
|
||||||
ATTGTGTAAGAATTACAATGAACGATGGATATGAAGGCATGTTGCGAGGTGTTCCTTGGT
|
|
||||||
ATGTGAAGTTCGCAGGGCAACAAAAATTTCGCAGAATAGGCCTCAAAGTATTGGTAAAGA
|
|
||||||
AGACAACTAATCATCACGAGCTTCTGATATCAATACGAACGAGTCCTGTGATGGATGAAA
|
|
||||||
GAAAGTCGTATCGAAAATGTCAAGAGTCTGCCCAATGTAACTTACTTCAAAAAATAACGC
|
|
||||||
TTCCGCCAAGTACGTTCGAATAAACGTAATTTTAAAAATACATAAGGGGTGTTAGAAAGT
|
|
||||||
AAGCGACGGGATATAAGTTAGACTCAAGATTCCGCCGTAAAACGAGACTGATTCCGAAGA
|
|
||||||
TTGTTCGTGGATCTGGTCATGACTTTCACTGAGTAAGGAGTTTCGACATATGTCAATAAA
|
|
||||||
CACAAAAATAGAAGCTATTCGATCTGAAAAATATTAGGACAAGAAACTATCTCACGCTAG
|
|
||||||
CCCAGAATATTCACTCACCCACGGGCGATACTAAAGCACTATATAGTCGCGTGATTACTA
|
|
||||||
TACATATGGTACACATAAGAATCACGATCAGGTTCTCAATTTTCAACAATATATGTTTAT
|
|
||||||
TTGCATAGGTAATATTAGGCCTTTAAGAGAAGGATGGGTGAGATACTCCGGGGATGGCGG
|
|
||||||
CAATAAAGAAAAACACGATATGAGTAATAGGATCCTAATATCTTGGCGAGAGACTTAAGG
|
|
||||||
TACGAATTTTGCGCAATCTATTTTTTACTTGGCCAGAATTCATGTATGGTATAAGTACGA
|
|
||||||
ACTTTTTTGATCACTTTCATGGCTACCTGATTAGGATAGTTTGAGGAATTTCCCAAATAT
|
|
||||||
ACCGATTTAATATACACTAGGGCTTGTCACTTTGAGTCAGAAAAAGAATATAATTACTTA
|
|
||||||
GGGTAATGCTGCATACATATTCTTATATTGCAAAGGTTCTCTGGGTAATCTTGAGCCTTC
|
|
||||||
ACGATACCTGGTGAAGTGTT
|
|
|
@ -1 +0,0 @@
|
||||||
/target
|
|
|
@ -1,17 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "wasm-kernel"
|
|
||||||
version = "0.1.0"
|
|
||||||
authors = ["Sergey Pepyakin <s.pepyakin@gmail.com>"]
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
crate-type = ["cdylib"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
tiny-keccak = "1.4.2"
|
|
||||||
regex = "0.2.10"
|
|
||||||
lazy_static = "1.0"
|
|
||||||
|
|
||||||
[profile.release]
|
|
||||||
panic = "abort"
|
|
||||||
lto = true
|
|
||||||
opt-level = "z"
|
|
|
@ -1,123 +0,0 @@
|
||||||
extern crate tiny_keccak;
|
|
||||||
extern crate regex;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate lazy_static;
|
|
||||||
|
|
||||||
use std::mem::ManuallyDrop;
|
|
||||||
use tiny_keccak::Keccak;
|
|
||||||
|
|
||||||
mod rev_complement;
|
|
||||||
mod regex_redux;
|
|
||||||
|
|
||||||
pub struct TinyKeccakTestData {
|
|
||||||
data: &'static [u8],
|
|
||||||
result: &'static mut [u8],
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn prepare_tiny_keccak() -> *const TinyKeccakTestData {
|
|
||||||
static DATA: [u8; 4096] = [254u8; 4096];
|
|
||||||
static mut RESULT: [u8; 32] = [0u8; 32];
|
|
||||||
|
|
||||||
static mut TEST_DATA: Option<TinyKeccakTestData> = None;
|
|
||||||
|
|
||||||
unsafe {
|
|
||||||
if let None = TEST_DATA {
|
|
||||||
TEST_DATA = Some(TinyKeccakTestData {
|
|
||||||
data: &DATA,
|
|
||||||
result: &mut RESULT,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
TEST_DATA.as_ref().unwrap() as *const TinyKeccakTestData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn bench_tiny_keccak(test_data: *mut TinyKeccakTestData) {
|
|
||||||
unsafe {
|
|
||||||
let mut keccak = Keccak::new_keccak256();
|
|
||||||
keccak.update((*test_data).data);
|
|
||||||
keccak.finalize((*test_data).result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct RevComplementTestData {
|
|
||||||
input: ManuallyDrop<Box<[u8]>>,
|
|
||||||
output: ManuallyDrop<Box<[u8]>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn prepare_rev_complement(size: usize) -> *mut RevComplementTestData {
|
|
||||||
let input = vec![0; size];
|
|
||||||
let output = vec![0; size];
|
|
||||||
|
|
||||||
let test_data = Box::new(
|
|
||||||
RevComplementTestData {
|
|
||||||
input: ManuallyDrop::new(input.into_boxed_slice()),
|
|
||||||
output: ManuallyDrop::new(output.into_boxed_slice()),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Basically leak the pointer to the test data. This shouldn't be harmful since `prepare` is called
|
|
||||||
// only once per bench run (not for the iteration), and afterwards whole memory instance is discarded.
|
|
||||||
Box::into_raw(test_data)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn rev_complement_input_ptr(test_data: *mut RevComplementTestData) -> *mut u8 {
|
|
||||||
unsafe {
|
|
||||||
(*test_data).input.as_mut_ptr()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn rev_complement_output_ptr(test_data: *mut RevComplementTestData) -> *const u8 {
|
|
||||||
unsafe {
|
|
||||||
(*test_data).output.as_ptr()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn bench_rev_complement(test_data: *mut RevComplementTestData) {
|
|
||||||
unsafe {
|
|
||||||
let result = rev_complement::run(&*(*test_data).input);
|
|
||||||
(*test_data).output.copy_from_slice(&result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct RegexReduxTestData {
|
|
||||||
input: ManuallyDrop<Box<[u8]>>,
|
|
||||||
output: Option<usize>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn prepare_regex_redux(size: usize) -> *mut RegexReduxTestData {
|
|
||||||
regex_redux::prepare();
|
|
||||||
|
|
||||||
let input = vec![0; size];
|
|
||||||
let test_data = Box::new(
|
|
||||||
RegexReduxTestData {
|
|
||||||
input: ManuallyDrop::new(input.into_boxed_slice()),
|
|
||||||
output: None,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Basically leak the pointer to the test data. This shouldn't be harmful since `prepare` is called
|
|
||||||
// only once per bench run (not for the iteration), and afterwards whole memory instance is discarded.
|
|
||||||
Box::into_raw(test_data)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn regex_redux_input_ptr(test_data: *mut RegexReduxTestData) -> *mut u8 {
|
|
||||||
unsafe {
|
|
||||||
(*test_data).input.as_mut_ptr()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "C" fn bench_regex_redux(test_data: *mut RegexReduxTestData) {
|
|
||||||
unsafe {
|
|
||||||
let result = regex_redux::run(&*(*test_data).input);
|
|
||||||
(*test_data).output = Some(result);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
//! Initially it supposed to be like [1]. However it turned out
|
|
||||||
//! that executing this code in wasmi way too slow.
|
|
||||||
//!
|
|
||||||
//! [1]: https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/regexredux-rust-2.html
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref REGEX: ::regex::bytes::Regex =
|
|
||||||
{ ::regex::bytes::Regex::new("agggtaa[cgt]|[acg]ttaccct").unwrap() };
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn prepare() {
|
|
||||||
::lazy_static::initialize(®EX);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn run(seq: &[u8]) -> usize {
|
|
||||||
REGEX.find_iter(seq).count()
|
|
||||||
}
|
|
|
@ -1,164 +0,0 @@
|
||||||
// Adapted version from benchmarks game. In particular
|
|
||||||
// rayon is removed.
|
|
||||||
//
|
|
||||||
// https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/revcomp-rust-3.html
|
|
||||||
|
|
||||||
// The Computer Language Benchmarks Game
|
|
||||||
// https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
|
|
||||||
//
|
|
||||||
// contributed by the Rust Project Developers
|
|
||||||
// contributed by Cristi Cobzarenco
|
|
||||||
// contributed by TeXitoi
|
|
||||||
// contributed by Matt Brubeck
|
|
||||||
|
|
||||||
use std::io::BufRead;
|
|
||||||
use std::mem::replace;
|
|
||||||
use std::{cmp, io};
|
|
||||||
|
|
||||||
/// Lookup table to find the complement of a single FASTA code.
|
|
||||||
fn build_table() -> [u8; 256] {
|
|
||||||
let mut table = [0; 256];
|
|
||||||
for (i, x) in table.iter_mut().enumerate() {
|
|
||||||
*x = match i as u8 as char {
|
|
||||||
'A' | 'a' => 'T',
|
|
||||||
'C' | 'c' => 'G',
|
|
||||||
'G' | 'g' => 'C',
|
|
||||||
'T' | 't' => 'A',
|
|
||||||
'U' | 'u' => 'A',
|
|
||||||
'M' | 'm' => 'K',
|
|
||||||
'R' | 'r' => 'Y',
|
|
||||||
'W' | 'w' => 'W',
|
|
||||||
'S' | 's' => 'S',
|
|
||||||
'Y' | 'y' => 'R',
|
|
||||||
'K' | 'k' => 'M',
|
|
||||||
'V' | 'v' => 'B',
|
|
||||||
'H' | 'h' => 'D',
|
|
||||||
'D' | 'd' => 'H',
|
|
||||||
'B' | 'b' => 'V',
|
|
||||||
'N' | 'n' => 'N',
|
|
||||||
i => i,
|
|
||||||
} as u8;
|
|
||||||
}
|
|
||||||
table
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Utilities for splitting chunks off of slices.
|
|
||||||
trait SplitOff {
|
|
||||||
fn split_off_left(&mut self, n: usize) -> Self;
|
|
||||||
fn split_off_right(&mut self, n: usize) -> Self;
|
|
||||||
}
|
|
||||||
impl<'a, T> SplitOff for &'a mut [T] {
|
|
||||||
/// Split the left `n` items from self and return them as a separate slice.
|
|
||||||
fn split_off_left(&mut self, n: usize) -> Self {
|
|
||||||
let n = cmp::min(self.len(), n);
|
|
||||||
let data = replace(self, &mut []);
|
|
||||||
let (left, data) = data.split_at_mut(n);
|
|
||||||
*self = data;
|
|
||||||
left
|
|
||||||
}
|
|
||||||
/// Split the right `n` items from self and return them as a separate slice.
|
|
||||||
fn split_off_right(&mut self, n: usize) -> Self {
|
|
||||||
let len = self.len();
|
|
||||||
let n = cmp::min(len, n);
|
|
||||||
let data = replace(self, &mut []);
|
|
||||||
let (data, right) = data.split_at_mut(len - n);
|
|
||||||
*self = data;
|
|
||||||
right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Length of a normal line including the terminating \n.
|
|
||||||
const LINE_LEN: usize = 61;
|
|
||||||
|
|
||||||
/// Compute the reverse complement for two contiguous chunks without line breaks.
|
|
||||||
fn reverse_chunks(left: &mut [u8], right: &mut [u8], table: &[u8; 256]) {
|
|
||||||
for (x, y) in left.iter_mut().zip(right.iter_mut().rev()) {
|
|
||||||
*y = table[replace(x, table[*y as usize]) as usize];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Compute the reverse complement on chunks from opposite ends of a sequence.
|
|
||||||
///
|
|
||||||
/// `left` must start at the beginning of a line. If there are an odd number of
|
|
||||||
/// bytes, `right` will initially be 1 byte longer than `left`; otherwise they
|
|
||||||
/// will have equal lengths.
|
|
||||||
fn reverse_complement_left_right(
|
|
||||||
mut left: &mut [u8],
|
|
||||||
mut right: &mut [u8],
|
|
||||||
trailing_len: usize,
|
|
||||||
table: &[u8; 256],
|
|
||||||
) {
|
|
||||||
// Each iteration swaps one line from the start of the sequence with one
|
|
||||||
// from the end.
|
|
||||||
while left.len() > 0 || right.len() > 0 {
|
|
||||||
// Get the chunk up to the newline in `right`.
|
|
||||||
let mut a = left.split_off_left(trailing_len);
|
|
||||||
let mut b = right.split_off_right(trailing_len);
|
|
||||||
right.split_off_right(1); // Skip the newline in `right`.
|
|
||||||
|
|
||||||
// If we've reached the middle of the sequence here and there is an
|
|
||||||
// odd number of bytes remaining, the odd one will be on the right.
|
|
||||||
if b.len() > a.len() {
|
|
||||||
let mid = b.split_off_left(1);
|
|
||||||
mid[0] = table[mid[0] as usize];
|
|
||||||
}
|
|
||||||
|
|
||||||
reverse_chunks(a, b, table);
|
|
||||||
|
|
||||||
// Get the chunk up to the newline in `left`.
|
|
||||||
let n = LINE_LEN - 1 - trailing_len;
|
|
||||||
a = left.split_off_left(n);
|
|
||||||
b = right.split_off_right(n);
|
|
||||||
left.split_off_left(1); // Skip the newline in `left`.
|
|
||||||
|
|
||||||
// If we've reached the middle of the sequence and there is an odd
|
|
||||||
// number of bytes remaining, the odd one will now be on the left.
|
|
||||||
if a.len() > b.len() {
|
|
||||||
let mid = a.split_off_right(1);
|
|
||||||
mid[0] = table[mid[0] as usize]
|
|
||||||
}
|
|
||||||
|
|
||||||
reverse_chunks(a, b, table);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Compute the reverse complement of one sequence.
|
|
||||||
fn reverse_complement(seq: &mut [u8], table: &[u8; 256]) {
|
|
||||||
let len = seq.len() - 1;
|
|
||||||
let seq = &mut seq[..len]; // Drop the last newline
|
|
||||||
let trailing_len = len % LINE_LEN;
|
|
||||||
let (left, right) = seq.split_at_mut(len / 2);
|
|
||||||
reverse_complement_left_right(left, right, trailing_len, table);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Read sequences from stdin and print the reverse complement to stdout.
|
|
||||||
pub fn run(input: &[u8]) -> Vec<u8> {
|
|
||||||
let mut buf = Vec::with_capacity(input.len());
|
|
||||||
|
|
||||||
let mut input = io::Cursor::new(input);
|
|
||||||
|
|
||||||
// Read the first header line.
|
|
||||||
input.read_until(b'\n', &mut buf).unwrap();
|
|
||||||
|
|
||||||
// Read sequence data line-by-line, splitting on headers.
|
|
||||||
let mut line_start = buf.len();
|
|
||||||
let mut seq_start = line_start;
|
|
||||||
let mut seqs = vec![];
|
|
||||||
while input.read_until(b'\n', &mut buf).unwrap() > 0 {
|
|
||||||
if buf[line_start] == b'>' {
|
|
||||||
// Found the start of a new sequence.
|
|
||||||
seqs.push(seq_start..line_start);
|
|
||||||
seq_start = buf.len();
|
|
||||||
}
|
|
||||||
line_start = buf.len();
|
|
||||||
}
|
|
||||||
seqs.push(seq_start..buf.len());
|
|
||||||
|
|
||||||
// Compute the reverse complements of each sequence.
|
|
||||||
let table = build_table();
|
|
||||||
for seq in seqs {
|
|
||||||
reverse_complement(&mut buf[seq], &table);
|
|
||||||
}
|
|
||||||
|
|
||||||
buf
|
|
||||||
}
|
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><svg height="1792" viewBox="0 0 1792 1792" width="1792" xmlns="http://www.w3.org/2000/svg"><path d="M1615 0q70 0 122.5 46.5t52.5 116.5q0 63-45 151-332 629-465 752-97 91-218 91-126 0-216.5-92.5t-90.5-219.5q0-128 92-212l638-579q59-54 130-54zm-909 1034q39 76 106.5 130t150.5 76l1 71q4 213-129.5 347t-348.5 134q-123 0-218-46.5t-152.5-127.5-86.5-183-29-220q7 5 41 30t62 44.5 59 36.5 46 17q41 0 55-37 25-66 57.5-112.5t69.5-76 88-47.5 103-25.5 125-10.5z"/></svg>
|
After Width: | Height: | Size: 477 B |
9
check.sh
9
check.sh
|
@ -1,9 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
cd $(dirname $0)
|
|
||||||
|
|
||||||
cargo check --tests
|
|
||||||
|
|
||||||
cd -
|
|
14
doc.sh
14
doc.sh
|
@ -1,14 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
cd $(dirname $0)
|
|
||||||
|
|
||||||
cargo doc
|
|
||||||
|
|
||||||
# cargo-deadlinks will check any links in docs generated by `cargo doc`.
|
|
||||||
# This is useful as rustdoc uses raw links which are error prone.
|
|
||||||
command -v cargo-deadlinks &> /dev/null &&
|
|
||||||
cargo deadlinks
|
|
||||||
|
|
||||||
cd -
|
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg height="128px" id="Layer_1" style="enable-background:new 0 0 128 128;" version="1.1" viewBox="-30 -20 176 176" width="128px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><line style="fill:none;stroke:#2F3435;stroke-width:12;stroke-linecap:square;stroke-miterlimit:10;" x1="111" x2="64" y1="40.5" y2="87.499"/><line style="fill:none;stroke:#2F3435;stroke-width:12;stroke-linecap:square;stroke-miterlimit:10;" x1="64" x2="17" y1="87.499" y2="40.5"/></g></svg>
|
After Width: | Height: | Size: 641 B |
|
@ -1,47 +0,0 @@
|
||||||
// In this example we execute a contract funciton exported as "_call"
|
|
||||||
|
|
||||||
extern crate wasmi;
|
|
||||||
|
|
||||||
use std::env::args;
|
|
||||||
use std::fs::File;
|
|
||||||
use wasmi::{ImportsBuilder, Module, ModuleInstance, NopExternals, RuntimeValue};
|
|
||||||
|
|
||||||
fn load_from_file(filename: &str) -> Module {
|
|
||||||
use std::io::prelude::*;
|
|
||||||
let mut file = File::open(filename).unwrap();
|
|
||||||
let mut buf = Vec::new();
|
|
||||||
file.read_to_end(&mut buf).unwrap();
|
|
||||||
Module::from_buffer(buf).unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let args: Vec<_> = args().collect();
|
|
||||||
if args.len() != 3 {
|
|
||||||
println!("Usage: {} <wasm file> <arg>", args[0]);
|
|
||||||
println!(" wasm file should contain exported `_call` function with single I32 argument");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Here we load module using dedicated for this purpose
|
|
||||||
// `load_from_file` function (which works only with modules)
|
|
||||||
let module = load_from_file(&args[1]);
|
|
||||||
|
|
||||||
// Intialize deserialized module. It adds module into It expects 3 parameters:
|
|
||||||
// - a name for the module
|
|
||||||
// - a module declaration
|
|
||||||
// - "main" module doesn't import native module(s) this is why we don't need to provide external native modules here
|
|
||||||
// This test shows how to implement native module https://github.com/NikVolf/parity-wasm/blob/master/src/interpreter/tests/basics.rs#L197
|
|
||||||
let main = ModuleInstance::new(&module, &ImportsBuilder::default())
|
|
||||||
.expect("Failed to instantiate module")
|
|
||||||
.run_start(&mut NopExternals)
|
|
||||||
.expect("Failed to run start function in module");
|
|
||||||
|
|
||||||
// The argument should be parsable as a valid integer
|
|
||||||
let argument: i32 = args[2].parse().expect("Integer argument required");
|
|
||||||
|
|
||||||
// "_call" export of function to be executed with an i32 argument and prints the result of execution
|
|
||||||
println!(
|
|
||||||
"Result: {:?}",
|
|
||||||
main.invoke_export("_call", &[RuntimeValue::I32(argument)], &mut NopExternals)
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,120 +0,0 @@
|
||||||
extern crate parity_wasm;
|
|
||||||
extern crate wasmi;
|
|
||||||
|
|
||||||
use std::env::args;
|
|
||||||
|
|
||||||
use parity_wasm::elements::{External, FunctionType, Internal, Type, ValueType};
|
|
||||||
use wasmi::{ImportsBuilder, ModuleInstance, NopExternals, RuntimeValue};
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let args: Vec<_> = args().collect();
|
|
||||||
if args.len() < 3 {
|
|
||||||
println!("Usage: {} <wasm file> <exported func> [<arg>...]", args[0]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let func_name = &args[2];
|
|
||||||
let (_, program_args) = args.split_at(3);
|
|
||||||
|
|
||||||
let module = parity_wasm::deserialize_file(&args[1]).expect("File to be deserialized");
|
|
||||||
|
|
||||||
// Extracts call arguments from command-line arguments
|
|
||||||
let args = {
|
|
||||||
// Export section has an entry with a func_name with an index inside a module
|
|
||||||
let export_section = module.export_section().expect("No export section found");
|
|
||||||
// It's a section with function declarations (which are references to the type section entries)
|
|
||||||
let function_section = module
|
|
||||||
.function_section()
|
|
||||||
.expect("No function section found");
|
|
||||||
// Type section stores function types which are referenced by function_section entries
|
|
||||||
let type_section = module.type_section().expect("No type section found");
|
|
||||||
|
|
||||||
// Given function name used to find export section entry which contains
|
|
||||||
// an `internal` field which points to the index in the function index space
|
|
||||||
let found_entry = export_section
|
|
||||||
.entries()
|
|
||||||
.iter()
|
|
||||||
.find(|entry| func_name == entry.field())
|
|
||||||
.expect(&format!("No export with name {} found", func_name));
|
|
||||||
|
|
||||||
// Function index in the function index space (internally-defined + imported)
|
|
||||||
let function_index: usize = match found_entry.internal() {
|
|
||||||
&Internal::Function(index) => index as usize,
|
|
||||||
_ => panic!("Founded export is not a function"),
|
|
||||||
};
|
|
||||||
|
|
||||||
// We need to count import section entries (functions only!) to subtract it from function_index
|
|
||||||
// and obtain the index within the function section
|
|
||||||
let import_section_len: usize = match module.import_section() {
|
|
||||||
Some(import) => import
|
|
||||||
.entries()
|
|
||||||
.iter()
|
|
||||||
.filter(|entry| match entry.external() {
|
|
||||||
&External::Function(_) => true,
|
|
||||||
_ => false,
|
|
||||||
})
|
|
||||||
.count(),
|
|
||||||
None => 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Calculates a function index within module's function section
|
|
||||||
let function_index_in_section = function_index - import_section_len;
|
|
||||||
|
|
||||||
// Getting a type reference from a function section entry
|
|
||||||
let func_type_ref: usize =
|
|
||||||
function_section.entries()[function_index_in_section].type_ref() as usize;
|
|
||||||
|
|
||||||
// Use the reference to get an actual function type
|
|
||||||
let function_type: &FunctionType = match &type_section.types()[func_type_ref] {
|
|
||||||
&Type::Function(ref func_type) => func_type,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Parses arguments and constructs runtime values in correspondence of their types
|
|
||||||
function_type
|
|
||||||
.params()
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(i, value)| match value {
|
|
||||||
&ValueType::I32 => RuntimeValue::I32(
|
|
||||||
program_args[i]
|
|
||||||
.parse::<i32>()
|
|
||||||
.expect(&format!("Can't parse arg #{} as i32", program_args[i])),
|
|
||||||
),
|
|
||||||
&ValueType::I64 => RuntimeValue::I64(
|
|
||||||
program_args[i]
|
|
||||||
.parse::<i64>()
|
|
||||||
.expect(&format!("Can't parse arg #{} as i64", program_args[i])),
|
|
||||||
),
|
|
||||||
&ValueType::F32 => RuntimeValue::F32(
|
|
||||||
program_args[i]
|
|
||||||
.parse::<f32>()
|
|
||||||
.expect(&format!("Can't parse arg #{} as f32", program_args[i]))
|
|
||||||
.into(),
|
|
||||||
),
|
|
||||||
&ValueType::F64 => RuntimeValue::F64(
|
|
||||||
program_args[i]
|
|
||||||
.parse::<f64>()
|
|
||||||
.expect(&format!("Can't parse arg #{} as f64", program_args[i]))
|
|
||||||
.into(),
|
|
||||||
),
|
|
||||||
})
|
|
||||||
.collect::<Vec<RuntimeValue>>()
|
|
||||||
};
|
|
||||||
|
|
||||||
let loaded_module = wasmi::Module::from_parity_wasm_module(module).expect("Module to be valid");
|
|
||||||
|
|
||||||
// Intialize deserialized module. It adds module into It expects 3 parameters:
|
|
||||||
// - a name for the module
|
|
||||||
// - a module declaration
|
|
||||||
// - "main" module doesn't import native module(s) this is why we don't need to provide external native modules here
|
|
||||||
// This test shows how to implement native module https://github.com/NikVolf/parity-wasm/blob/master/src/interpreter/tests/basics.rs#L197
|
|
||||||
let main = ModuleInstance::new(&loaded_module, &ImportsBuilder::default())
|
|
||||||
.expect("Failed to instantiate module")
|
|
||||||
.run_start(&mut NopExternals)
|
|
||||||
.expect("Failed to run start function in module");
|
|
||||||
|
|
||||||
println!(
|
|
||||||
"Result: {:?}",
|
|
||||||
main.invoke_export(func_name, &args, &mut NopExternals)
|
|
||||||
.expect("")
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,255 +0,0 @@
|
||||||
extern crate parity_wasm;
|
|
||||||
extern crate wasmi;
|
|
||||||
|
|
||||||
use std::env;
|
|
||||||
use std::fmt;
|
|
||||||
use std::fs::File;
|
|
||||||
use wasmi::{
|
|
||||||
Error as InterpreterError, Externals, FuncInstance, FuncRef, HostError, ImportsBuilder,
|
|
||||||
ModuleImportResolver, ModuleInstance, ModuleRef, RuntimeArgs, RuntimeValue, Signature, Trap,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum Error {
|
|
||||||
OutOfRange,
|
|
||||||
AlreadyOccupied,
|
|
||||||
Interpreter(InterpreterError),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for Error {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "{:?}", self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<InterpreterError> for Error {
|
|
||||||
fn from(e: InterpreterError) -> Self {
|
|
||||||
Error::Interpreter(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl HostError for Error {}
|
|
||||||
|
|
||||||
mod tictactoe {
|
|
||||||
use super::Error;
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
||||||
pub enum Player {
|
|
||||||
X,
|
|
||||||
O,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
||||||
pub enum GameResult {
|
|
||||||
Draw,
|
|
||||||
Won(Player),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Player {
|
|
||||||
pub fn into_i32(maybe_player: Option<Player>) -> i32 {
|
|
||||||
match maybe_player {
|
|
||||||
None => 0,
|
|
||||||
Some(Player::X) => 1,
|
|
||||||
Some(Player::O) => 2,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct Game {
|
|
||||||
board: [Option<Player>; 9],
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Game {
|
|
||||||
pub fn new() -> Game {
|
|
||||||
Game { board: [None; 9] }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set(&mut self, idx: i32, player: Player) -> Result<(), Error> {
|
|
||||||
if idx < 0 || idx > 9 {
|
|
||||||
return Err(Error::OutOfRange);
|
|
||||||
}
|
|
||||||
if self.board[idx as usize] != None {
|
|
||||||
return Err(Error::AlreadyOccupied);
|
|
||||||
}
|
|
||||||
self.board[idx as usize] = Some(player);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get(&self, idx: i32) -> Result<Option<Player>, Error> {
|
|
||||||
if idx < 0 || idx > 9 {
|
|
||||||
return Err(Error::OutOfRange);
|
|
||||||
}
|
|
||||||
Ok(self.board[idx as usize])
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn game_result(&self) -> Option<GameResult> {
|
|
||||||
// 0, 1, 2
|
|
||||||
// 3, 4, 5
|
|
||||||
// 6, 7, 8
|
|
||||||
let patterns = &[
|
|
||||||
// Rows
|
|
||||||
(0, 1, 2),
|
|
||||||
(3, 4, 5),
|
|
||||||
(6, 7, 8),
|
|
||||||
// Columns
|
|
||||||
(0, 3, 6),
|
|
||||||
(1, 4, 7),
|
|
||||||
(2, 5, 8),
|
|
||||||
// Diagonals
|
|
||||||
(0, 4, 8),
|
|
||||||
(2, 4, 6),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Returns Some(player) if all cells contain same Player.
|
|
||||||
let all_same = |i1: usize, i2: usize, i3: usize| -> Option<Player> {
|
|
||||||
if self.board[i1].is_none() {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
if self.board[i1] == self.board[i2] && self.board[i2] == self.board[i3] {
|
|
||||||
return self.board[i1];
|
|
||||||
}
|
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
for &(i1, i2, i3) in patterns {
|
|
||||||
if let Some(player) = all_same(i1, i2, i3) {
|
|
||||||
return Some(GameResult::Won(player));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ok, there is no winner. Check if it's draw.
|
|
||||||
let all_occupied = self.board.iter().all(|&cell| cell.is_some());
|
|
||||||
if all_occupied {
|
|
||||||
Some(GameResult::Draw)
|
|
||||||
} else {
|
|
||||||
// Nah, there are still empty cells left.
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Runtime<'a> {
|
|
||||||
player: tictactoe::Player,
|
|
||||||
game: &'a mut tictactoe::Game,
|
|
||||||
}
|
|
||||||
|
|
||||||
const SET_FUNC_INDEX: usize = 0;
|
|
||||||
const GET_FUNC_INDEX: usize = 1;
|
|
||||||
|
|
||||||
impl<'a> Externals for Runtime<'a> {
|
|
||||||
fn invoke_index(
|
|
||||||
&mut self,
|
|
||||||
index: usize,
|
|
||||||
args: RuntimeArgs,
|
|
||||||
) -> Result<Option<RuntimeValue>, Trap> {
|
|
||||||
match index {
|
|
||||||
SET_FUNC_INDEX => {
|
|
||||||
let idx: i32 = args.nth(0);
|
|
||||||
self.game.set(idx, self.player)?;
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
GET_FUNC_INDEX => {
|
|
||||||
let idx: i32 = args.nth(0);
|
|
||||||
let val: i32 = tictactoe::Player::into_i32(self.game.get(idx)?);
|
|
||||||
Ok(Some(val.into()))
|
|
||||||
}
|
|
||||||
_ => panic!("unknown function index"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct RuntimeModuleImportResolver;
|
|
||||||
|
|
||||||
impl<'a> ModuleImportResolver for RuntimeModuleImportResolver {
|
|
||||||
fn resolve_func(
|
|
||||||
&self,
|
|
||||||
field_name: &str,
|
|
||||||
_signature: &Signature,
|
|
||||||
) -> Result<FuncRef, InterpreterError> {
|
|
||||||
let func_ref = match field_name {
|
|
||||||
"set" => FuncInstance::alloc_host(
|
|
||||||
Signature::new(&[ValueType::I32][..], None),
|
|
||||||
SET_FUNC_INDEX,
|
|
||||||
),
|
|
||||||
"get" => FuncInstance::alloc_host(
|
|
||||||
Signature::new(&[ValueType::I32][..], Some(ValueType::I32)),
|
|
||||||
GET_FUNC_INDEX,
|
|
||||||
),
|
|
||||||
_ => {
|
|
||||||
return Err(InterpreterError::Function(format!(
|
|
||||||
"host module doesn't export function with name {}",
|
|
||||||
field_name
|
|
||||||
)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Ok(func_ref)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn instantiate(path: &str) -> Result<ModuleRef, Error> {
|
|
||||||
let module = {
|
|
||||||
use std::io::prelude::*;
|
|
||||||
let mut file = File::open(path).unwrap();
|
|
||||||
let mut wasm_buf = Vec::new();
|
|
||||||
file.read_to_end(&mut wasm_buf).unwrap();
|
|
||||||
wasmi::Module::from_buffer(&wasm_buf)?
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut imports = ImportsBuilder::new();
|
|
||||||
imports.push_resolver("env", &RuntimeModuleImportResolver);
|
|
||||||
|
|
||||||
let instance = ModuleInstance::new(&module, &imports)?.assert_no_start();
|
|
||||||
|
|
||||||
Ok(instance)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn play(
|
|
||||||
x_instance: ModuleRef,
|
|
||||||
o_instance: ModuleRef,
|
|
||||||
game: &mut tictactoe::Game,
|
|
||||||
) -> Result<tictactoe::GameResult, Error> {
|
|
||||||
let mut turn_of = tictactoe::Player::X;
|
|
||||||
let game_result = loop {
|
|
||||||
let (instance, next_turn_of) = match turn_of {
|
|
||||||
tictactoe::Player::X => (&x_instance, tictactoe::Player::O),
|
|
||||||
tictactoe::Player::O => (&o_instance, tictactoe::Player::X),
|
|
||||||
};
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut runtime = Runtime {
|
|
||||||
player: turn_of,
|
|
||||||
game: game,
|
|
||||||
};
|
|
||||||
let _ = instance.invoke_export("mk_turn", &[], &mut runtime)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
match game.game_result() {
|
|
||||||
Some(game_result) => break game_result,
|
|
||||||
None => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
turn_of = next_turn_of;
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(game_result)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let mut game = tictactoe::Game::new();
|
|
||||||
|
|
||||||
let args: Vec<_> = env::args().collect();
|
|
||||||
if args.len() < 3 {
|
|
||||||
println!("Usage: {} <x player module> <y player module>", args[0]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Instantiate modules of X and O players.
|
|
||||||
let x_instance = instantiate(&args[1]).expect("X player module to load");
|
|
||||||
let o_instance = instantiate(&args[2]).expect("Y player module to load");
|
|
||||||
|
|
||||||
let result = play(x_instance, o_instance, &mut game);
|
|
||||||
println!("result = {:?}, game = {:#?}", result, game);
|
|
||||||
}
|
|
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
target
|
|
||||||
corpus
|
|
||||||
artifacts
|
|
|
@ -1,39 +0,0 @@
|
||||||
|
|
||||||
[package]
|
|
||||||
name = "wasmi-fuzz"
|
|
||||||
version = "0.0.1"
|
|
||||||
authors = ["Automatically generated"]
|
|
||||||
publish = false
|
|
||||||
|
|
||||||
[package.metadata]
|
|
||||||
cargo-fuzz = true
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
wasmi = { path = ".." }
|
|
||||||
wabt = "0.9"
|
|
||||||
wasmparser = "0.14.1"
|
|
||||||
tempdir = "0.3.6"
|
|
||||||
|
|
||||||
[dependencies.libfuzzer-sys]
|
|
||||||
git = "https://github.com/rust-fuzz/libfuzzer-sys.git"
|
|
||||||
rev = "737524f7de1e85342b8b6cd1c01edc71018183ba"
|
|
||||||
|
|
||||||
# Prevent this from interfering with workspaces
|
|
||||||
[workspace]
|
|
||||||
members = ["."]
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "load"
|
|
||||||
path = "fuzz_targets/load.rs"
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "load_wabt"
|
|
||||||
path = "fuzz_targets/load_wabt.rs"
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "load_wasmparser"
|
|
||||||
path = "fuzz_targets/load_wasmparser.rs"
|
|
||||||
|
|
||||||
[[bin]]
|
|
||||||
name = "load_spec"
|
|
||||||
path = "fuzz_targets/load_spec.rs"
|
|
|
@ -1,9 +0,0 @@
|
||||||
#![no_main]
|
|
||||||
#[macro_use]
|
|
||||||
extern crate libfuzzer_sys;
|
|
||||||
extern crate wasmi;
|
|
||||||
|
|
||||||
fuzz_target!(|data: &[u8]| {
|
|
||||||
// Just check if loading some arbitrary buffer doesn't panic.
|
|
||||||
let _ = wasmi::Module::from_buffer(data);
|
|
||||||
});
|
|
|
@ -1,53 +0,0 @@
|
||||||
#![no_main]
|
|
||||||
#[macro_use]
|
|
||||||
extern crate libfuzzer_sys;
|
|
||||||
extern crate wabt;
|
|
||||||
extern crate wasmi;
|
|
||||||
extern crate tempdir;
|
|
||||||
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::Write;
|
|
||||||
use std::process::{Command, Stdio};
|
|
||||||
|
|
||||||
fn run_spec(data: &[u8]) -> Result<(), ()> {
|
|
||||||
let temp_dir = tempdir::TempDir::new("spec").unwrap();
|
|
||||||
let mut seed_path = temp_dir.path().to_path_buf();
|
|
||||||
seed_path.push("test.wasm");
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut seedfile =
|
|
||||||
File::create(&seed_path).expect("open temporary file for writing to store fuzzer input");
|
|
||||||
seedfile.write_all(data).expect(
|
|
||||||
"write fuzzer input to temporary file",
|
|
||||||
);
|
|
||||||
seedfile.flush().expect(
|
|
||||||
"flush fuzzer input to temporary file before starting wasm-opt",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let exit_status = Command::new("wasm")
|
|
||||||
.arg("-d")
|
|
||||||
.arg(&seed_path)
|
|
||||||
.stdout(Stdio::null())
|
|
||||||
.stderr(Stdio::null())
|
|
||||||
.status()
|
|
||||||
.expect("failed to execute `wasm`");
|
|
||||||
|
|
||||||
if exit_status.success() {
|
|
||||||
Ok(())
|
|
||||||
} else {
|
|
||||||
Err(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_wasmi(data: &[u8]) -> Result<(), ()> {
|
|
||||||
let _ = wasmi::Module::from_buffer(data).map_err(|_| ())?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fuzz_target!(|data: &[u8]| {
|
|
||||||
let wasmi_result = run_wasmi(data);
|
|
||||||
let wasm_result = run_spec(data);
|
|
||||||
|
|
||||||
assert_eq!(wasmi_result.is_ok(), wasm_result.is_ok());
|
|
||||||
});
|
|
|
@ -1,13 +0,0 @@
|
||||||
#![no_main]
|
|
||||||
#[macro_use]
|
|
||||||
extern crate libfuzzer_sys;
|
|
||||||
extern crate wabt;
|
|
||||||
extern crate wasmi;
|
|
||||||
|
|
||||||
fuzz_target!(|data: &[u8]| {
|
|
||||||
let wasmi_result = wasmi::Module::from_buffer(data);
|
|
||||||
let wabt_result =
|
|
||||||
wabt::Module::read_binary(data, &Default::default()).and_then(|m| m.validate());
|
|
||||||
|
|
||||||
assert_eq!(wasmi_result.is_ok(), wabt_result.is_ok());
|
|
||||||
});
|
|
|
@ -1,29 +0,0 @@
|
||||||
#![no_main]
|
|
||||||
#[macro_use]
|
|
||||||
extern crate libfuzzer_sys;
|
|
||||||
extern crate wasmi;
|
|
||||||
extern crate wasmparser;
|
|
||||||
|
|
||||||
use wasmparser::WasmDecoder;
|
|
||||||
|
|
||||||
fn run_wasmparser(data: &[u8]) -> bool {
|
|
||||||
let mut parser = wasmparser::ValidatingParser::new(data, None);
|
|
||||||
let result = loop {
|
|
||||||
match *parser.read() {
|
|
||||||
wasmparser::ParserState::Error(..) => break false,
|
|
||||||
wasmparser::ParserState::EndWasm => break true,
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_wasmi(data: &[u8]) -> bool {
|
|
||||||
wasmi::Module::from_buffer(data).is_ok()
|
|
||||||
}
|
|
||||||
|
|
||||||
fuzz_target!(|data: &[u8]| {
|
|
||||||
let wasmparser_success = run_wasmparser(data);
|
|
||||||
let wasmi_success = run_wasmi(data);
|
|
||||||
assert_eq!(wasmparser_success, wasmi_success);
|
|
||||||
});
|
|
|
@ -1,2 +0,0 @@
|
||||||
hfuzz_workspace/
|
|
||||||
hfuzz_target/
|
|
|
@ -1,10 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "hfuzz"
|
|
||||||
version = "0.1.0"
|
|
||||||
authors = ["Sergey Pepyakin <s.pepyakin@gmail.com>"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
honggfuzz = "=0.5.9" # Strict equal since hfuzz requires dep and cmd versions to match.
|
|
||||||
wasmi = { path = ".." }
|
|
||||||
tempdir = "0.3.6"
|
|
||||||
wabt = "0.9"
|
|
|
@ -1,70 +0,0 @@
|
||||||
#[macro_use] extern crate honggfuzz;
|
|
||||||
|
|
||||||
extern crate wabt;
|
|
||||||
extern crate wasmi;
|
|
||||||
extern crate tempdir;
|
|
||||||
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::Write;
|
|
||||||
use std::process::{Command, Stdio};
|
|
||||||
|
|
||||||
fn dump_all_into_buf(src: &[u8], buf: &mut [u8; 64]) {
|
|
||||||
let common_len = usize::min(src.len(), buf.len());
|
|
||||||
buf[0..common_len].copy_from_slice(&src[0..common_len]);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_spec(data: &[u8], stdout_msg_buf: &mut [u8; 64], stderr_msg_buf: &mut [u8; 64]) -> Result<(), ()> {
|
|
||||||
let temp_dir = tempdir::TempDir::new("spec").unwrap();
|
|
||||||
let mut seed_path = temp_dir.path().to_path_buf();
|
|
||||||
seed_path.push("test.wasm");
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut seedfile =
|
|
||||||
File::create(&seed_path).expect("open temporary file for writing to store fuzzer input");
|
|
||||||
seedfile.write_all(data).expect(
|
|
||||||
"write fuzzer input to temporary file",
|
|
||||||
);
|
|
||||||
seedfile.flush().expect(
|
|
||||||
"flush fuzzer input to temporary file before starting wasm-opt",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let output = Command::new("wasm")
|
|
||||||
.arg("-d")
|
|
||||||
.arg(&seed_path)
|
|
||||||
.stdout(Stdio::null())
|
|
||||||
.stderr(Stdio::null())
|
|
||||||
.output()
|
|
||||||
.expect("failed to execute `wasm`");
|
|
||||||
|
|
||||||
if output.status.success() {
|
|
||||||
Ok(())
|
|
||||||
} else {
|
|
||||||
dump_all_into_buf(&output.stdout, stdout_msg_buf);
|
|
||||||
dump_all_into_buf(&output.stderr, stderr_msg_buf);
|
|
||||||
Err(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_wasmi(data: &[u8]) -> Result<(), ()> {
|
|
||||||
let _ = wasmi::Module::from_buffer(data).map_err(|_| ())?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
loop {
|
|
||||||
fuzz!(|data: &[u8]| {
|
|
||||||
// Keep messages on stack. This should lead to a different stack hashes for
|
|
||||||
// different error messages.
|
|
||||||
let mut stdout_msg_buf: [u8; 64] = [0; 64];
|
|
||||||
let mut stderr_msg_buf: [u8; 64] = [0; 64];
|
|
||||||
|
|
||||||
let wasmi_result = run_wasmi(data);
|
|
||||||
let wasm_result = run_spec(data, &mut stdout_msg_buf, &mut stderr_msg_buf);
|
|
||||||
|
|
||||||
if wasmi_result.is_ok() != wasm_result.is_ok() {
|
|
||||||
panic!("stdout: {:?}, stderr: {:?}", &stdout_msg_buf[..], &stderr_msg_buf as &[u8]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
export HFUZZ_RUN_ARGS="--max_file_size 2048"
|
|
||||||
|
|
||||||
die() { echo "$*"; exit 1; }
|
|
||||||
|
|
||||||
command -v wasm || die "spec interpreter 'wasm' is not on PATH";
|
|
||||||
|
|
||||||
rustup run nightly cargo hfuzz run hfuzz
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,15 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["memory_units"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"memory_units/struct.Bytes.html\" title=\"struct memory_units::Bytes\">Bytes</a>",synthetic:false,types:["memory_units::Bytes"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Words.html\" title=\"struct memory_units::wasm32::Words\">Words</a>",synthetic:false,types:["memory_units::wasm32::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Pages.html\" title=\"struct memory_units::wasm32::Pages\">Pages</a>",synthetic:false,types:["memory_units::wasm32::Pages"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"memory_units/target/struct.Words.html\" title=\"struct memory_units::target::Words\">Words</a>",synthetic:false,types:["memory_units::target::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"memory_units/target/struct.Pages.html\" title=\"struct memory_units::target::Pages\">Pages</a>",synthetic:false,types:["memory_units::target::Pages"]},];
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>",synthetic:false,types:["num_bigint::bigint::Sign"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"num_bigint/struct.ParseBigIntError.html\" title=\"struct num_bigint::ParseBigIntError\">ParseBigIntError</a>",synthetic:false,types:["num_bigint::ParseBigIntError"]},];
|
||||||
|
implementors["num_integer"] = [{text:"impl<A: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"num_integer/struct.ExtendedGcd.html\" title=\"struct num_integer::ExtendedGcd\">ExtendedGcd</a><A>",synthetic:false,types:["num_integer::ExtendedGcd"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
implementors["parity_wasm"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Type.html\" title=\"enum parity_wasm::elements::Type\">Type</a>",synthetic:false,types:["parity_wasm::elements::types::Type"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.ValueType.html\" title=\"enum parity_wasm::elements::ValueType\">ValueType</a>",synthetic:false,types:["parity_wasm::elements::types::ValueType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.BlockType.html\" title=\"enum parity_wasm::elements::BlockType\">BlockType</a>",synthetic:false,types:["parity_wasm::elements::types::BlockType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.FunctionType.html\" title=\"struct parity_wasm::elements::FunctionType\">FunctionType</a>",synthetic:false,types:["parity_wasm::elements::types::FunctionType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Instruction.html\" title=\"enum parity_wasm::elements::Instruction\">Instruction</a>",synthetic:false,types:["parity_wasm::elements::ops::Instruction"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.BrTableData.html\" title=\"struct parity_wasm::elements::BrTableData\">BrTableData</a>",synthetic:false,types:["parity_wasm::elements::ops::BrTableData"]},{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.IndexMap.html\" title=\"struct parity_wasm::elements::IndexMap\">IndexMap</a><T>",synthetic:false,types:["parity_wasm::elements::index_map::IndexMap"]},];
|
||||||
|
implementors["wasmi"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"wasmi/struct.Signature.html\" title=\"struct wasmi::Signature\">Signature</a>",synthetic:false,types:["wasmi::types::Signature"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"wasmi/enum.ValueType.html\" title=\"enum wasmi::ValueType\">ValueType</a>",synthetic:false,types:["wasmi::types::ValueType"]},];
|
||||||
|
implementors["wasmi_validation"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"wasmi_validation/func/enum.StartedWith.html\" title=\"enum wasmi_validation::func::StartedWith\">StartedWith</a>",synthetic:false,types:["wasmi_validation::func::StartedWith"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,11 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["memory_units"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"memory_units/struct.Bytes.html\" title=\"struct memory_units::Bytes\">Bytes</a>",synthetic:false,types:["memory_units::Bytes"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Words.html\" title=\"struct memory_units::wasm32::Words\">Words</a>",synthetic:false,types:["memory_units::wasm32::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Pages.html\" title=\"struct memory_units::wasm32::Pages\">Pages</a>",synthetic:false,types:["memory_units::wasm32::Pages"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"memory_units/target/struct.Words.html\" title=\"struct memory_units::target::Words\">Words</a>",synthetic:false,types:["memory_units::target::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"memory_units/target/struct.Pages.html\" title=\"struct memory_units::target::Pages\">Pages</a>",synthetic:false,types:["memory_units::target::Pages"]},];
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>",synthetic:false,types:["num_bigint::bigint::Sign"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html\" title=\"trait core::cmp::Ord\">Ord</a> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,12 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["memory_units"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"memory_units/struct.Bytes.html\" title=\"struct memory_units::Bytes\">Bytes</a>> for <a class=\"struct\" href=\"memory_units/struct.Bytes.html\" title=\"struct memory_units::Bytes\">Bytes</a>",synthetic:false,types:["memory_units::Bytes"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"memory_units/wasm32/struct.Words.html\" title=\"struct memory_units::wasm32::Words\">Words</a>> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Words.html\" title=\"struct memory_units::wasm32::Words\">Words</a>",synthetic:false,types:["memory_units::wasm32::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"memory_units/wasm32/struct.Pages.html\" title=\"struct memory_units::wasm32::Pages\">Pages</a>> for <a class=\"struct\" href=\"memory_units/wasm32/struct.Pages.html\" title=\"struct memory_units::wasm32::Pages\">Pages</a>",synthetic:false,types:["memory_units::wasm32::Pages"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"memory_units/target/struct.Words.html\" title=\"struct memory_units::target::Words\">Words</a>> for <a class=\"struct\" href=\"memory_units/target/struct.Words.html\" title=\"struct memory_units::target::Words\">Words</a>",synthetic:false,types:["memory_units::target::Words"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"memory_units/target/struct.Pages.html\" title=\"struct memory_units::target::Pages\">Pages</a>> for <a class=\"struct\" href=\"memory_units/target/struct.Pages.html\" title=\"struct memory_units::target::Pages\">Pages</a>",synthetic:false,types:["memory_units::target::Pages"]},];
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>> for <a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>",synthetic:false,types:["num_bigint::bigint::Sign"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><<a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
implementors["wasmi"] = [{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Into.html\" title=\"trait core::convert::Into\">Into</a><<a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F32.html\" title=\"struct wasmi::nan_preserving_float::F32\">F32</a>> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><T> for <a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F32.html\" title=\"struct wasmi::nan_preserving_float::F32\">F32</a>",synthetic:false,types:["wasmi::nan_preserving_float::F32"]},{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Into.html\" title=\"trait core::convert::Into\">Into</a><<a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F64.html\" title=\"struct wasmi::nan_preserving_float::F64\">F64</a>> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html\" title=\"trait core::marker::Copy\">Copy</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html\" title=\"trait core::cmp::PartialOrd\">PartialOrd</a><T> for <a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F64.html\" title=\"struct wasmi::nan_preserving_float::F64\">F64</a>",synthetic:false,types:["wasmi::nan_preserving_float::F64"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["wasmi"] = [{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html\" title=\"trait core::convert::AsRef\">AsRef</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.slice.html\">[</a><a class=\"enum\" href=\"wasmi/enum.RuntimeValue.html\" title=\"enum wasmi::RuntimeValue\">RuntimeValue</a><a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.slice.html\">]</a>> for <a class=\"struct\" href=\"wasmi/struct.RuntimeArgs.html\" title=\"struct wasmi::RuntimeArgs\">RuntimeArgs</a><'a>",synthetic:false,types:["wasmi::host::RuntimeArgs"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,10 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_rational"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Into.html\" title=\"trait core::convert::Into\">Into</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.tuple.html\">(</a>T, T<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.tuple.html\">)</a>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
implementors["wasmi"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Into.html\" title=\"trait core::convert::Into\">Into</a><<a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/alloc/string/struct.String.html\" title=\"struct alloc::string::String\">String</a>> for <a class=\"enum\" href=\"wasmi/enum.Error.html\" title=\"enum wasmi::Error\">Error</a>",synthetic:false,types:["wasmi::Error"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html\" title=\"trait core::fmt::Binary\">Binary</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Binary.html\" title=\"trait core::fmt::Binary\">Binary</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,14 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_bigint/struct.ParseBigIntError.html\" title=\"struct num_bigint::ParseBigIntError\">ParseBigIntError</a>",synthetic:false,types:["num_bigint::ParseBigIntError"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T> <span class=\"where fmt-newline\">where<br> T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> + <a class=\"trait\" href=\"num_traits/identities/trait.One.html\" title=\"trait num_traits::identities::One\">One</a>, </span>",synthetic:false,types:["num_rational::Ratio"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_rational/struct.ParseRatioError.html\" title=\"struct num_rational::ParseRatioError\">ParseRatioError</a>",synthetic:false,types:["num_rational::ParseRatioError"]},];
|
||||||
|
implementors["num_traits"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"num_traits/struct.ParseFloatError.html\" title=\"struct num_traits::ParseFloatError\">ParseFloatError</a>",synthetic:false,types:["num_traits::ParseFloatError"]},];
|
||||||
|
implementors["parity_wasm"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.ValueType.html\" title=\"enum parity_wasm::elements::ValueType\">ValueType</a>",synthetic:false,types:["parity_wasm::elements::types::ValueType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Instruction.html\" title=\"enum parity_wasm::elements::Instruction\">Instruction</a>",synthetic:false,types:["parity_wasm::elements::ops::Instruction"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Error.html\" title=\"enum parity_wasm::elements::Error\">Error</a>",synthetic:false,types:["parity_wasm::elements::Error"]},];
|
||||||
|
implementors["wasmi"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"wasmi/struct.Trap.html\" title=\"struct wasmi::Trap\">Trap</a>",synthetic:false,types:["wasmi::Trap"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"enum\" href=\"wasmi/enum.Error.html\" title=\"enum wasmi::Error\">Error</a>",synthetic:false,types:["wasmi::Error"]},];
|
||||||
|
implementors["wasmi_validation"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"wasmi_validation/stack/struct.Error.html\" title=\"struct wasmi_validation::stack::Error\">Error</a>",synthetic:false,types:["wasmi_validation::stack::Error"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"wasmi_validation/struct.Error.html\" title=\"struct wasmi_validation::Error\">Error</a>",synthetic:false,types:["wasmi_validation::Error"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html\" title=\"trait core::fmt::LowerHex\">LowerHex</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.LowerHex.html\" title=\"trait core::fmt::LowerHex\">LowerHex</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html\" title=\"trait core::fmt::Octal\">Octal</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Octal.html\" title=\"trait core::fmt::Octal\">Octal</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html\" title=\"trait core::fmt::UpperHex\">UpperHex</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.UpperHex.html\" title=\"trait core::fmt::UpperHex\">UpperHex</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,11 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>",synthetic:false,types:["num_bigint::bigint::Sign"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
implementors["parity_wasm"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Type.html\" title=\"enum parity_wasm::elements::Type\">Type</a>",synthetic:false,types:["parity_wasm::elements::types::Type"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.ValueType.html\" title=\"enum parity_wasm::elements::ValueType\">ValueType</a>",synthetic:false,types:["parity_wasm::elements::types::ValueType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.BlockType.html\" title=\"enum parity_wasm::elements::BlockType\">BlockType</a>",synthetic:false,types:["parity_wasm::elements::types::BlockType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.FunctionType.html\" title=\"struct parity_wasm::elements::FunctionType\">FunctionType</a>",synthetic:false,types:["parity_wasm::elements::types::FunctionType"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"parity_wasm/elements/enum.Instruction.html\" title=\"enum parity_wasm::elements::Instruction\">Instruction</a>",synthetic:false,types:["parity_wasm::elements::ops::Instruction"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html\" title=\"trait core::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.BrTableData.html\" title=\"struct parity_wasm::elements::BrTableData\">BrTableData</a>",synthetic:false,types:["parity_wasm::elements::ops::BrTableData"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,10 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Product.html\" title=\"trait core::iter::traits::accum::Product\">Product</a><T> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a> <span class=\"where fmt-newline\">where<br> <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Mul.html\" title=\"trait core::ops::arith::Mul\">Mul</a><T, Output = <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>>, </span>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Product.html\" title=\"trait core::iter::traits::accum::Product\">Product</a><T> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a> <span class=\"where fmt-newline\">where<br> <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Mul.html\" title=\"trait core::ops::arith::Mul\">Mul</a><T, Output = <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>>, </span>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Product.html\" title=\"trait core::iter::traits::accum::Product\">Product</a><<a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},{text:"impl<'a, T: <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Product.html\" title=\"trait core::iter::traits::accum::Product\">Product</a><&'a <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,10 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Sum.html\" title=\"trait core::iter::traits::accum::Sum\">Sum</a><T> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a> <span class=\"where fmt-newline\">where<br> <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Add.html\" title=\"trait core::ops::arith::Add\">Add</a><T, Output = <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>>, </span>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Sum.html\" title=\"trait core::iter::traits::accum::Sum\">Sum</a><T> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a> <span class=\"where fmt-newline\">where<br> <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Add.html\" title=\"trait core::ops::arith::Add\">Add</a><T, Output = <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>>, </span>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T: <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Sum.html\" title=\"trait core::iter::traits::accum::Sum\">Sum</a><<a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},{text:"impl<'a, T: <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a>> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/accum/trait.Sum.html\" title=\"trait core::iter::traits::accum::Sum\">Sum</a><&'a <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["parity_wasm"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html\" title=\"trait core::iter::traits::collect::FromIterator\">FromIterator</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.tuple.html\">(</a><a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.u32.html\">u32</a>, T<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.tuple.html\">)</a>> for <a class=\"struct\" href=\"parity_wasm/elements/struct.IndexMap.html\" title=\"struct parity_wasm::elements::IndexMap\">IndexMap</a><T>",synthetic:false,types:["parity_wasm::elements::index_map::IndexMap"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["parity_wasm"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html\" title=\"trait core::iter::traits::collect::IntoIterator\">IntoIterator</a> for <a class=\"struct\" href=\"parity_wasm/elements/struct.IndexMap.html\" title=\"struct parity_wasm::elements::IndexMap\">IndexMap</a><T>",synthetic:false,types:["parity_wasm::elements::index_map::IndexMap"]},{text:"impl<'a, T: 'static> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html\" title=\"trait core::iter::traits::collect::IntoIterator\">IntoIterator</a> for &'a <a class=\"struct\" href=\"parity_wasm/elements/struct.IndexMap.html\" title=\"struct parity_wasm::elements::IndexMap\">IndexMap</a><T>",synthetic:false,types:["parity_wasm::elements::index_map::IndexMap"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_integer"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html\" title=\"trait core::iter::traits::iterator::Iterator\">Iterator</a> for <a class=\"struct\" href=\"num_integer/struct.IterBinomial.html\" title=\"struct num_integer::IterBinomial\">IterBinomial</a><T> <span class=\"where fmt-newline\">where<br> T: <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a>, </span>",synthetic:false,types:["num_integer::IterBinomial"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,11 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"enum\" href=\"num_bigint/enum.Sign.html\" title=\"enum num_bigint::Sign\">Sign</a>",synthetic:false,types:["num_bigint::bigint::Sign"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
implementors["num_rational"] = [{text:"impl<T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T> <span class=\"where fmt-newline\">where<br> T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a><Output = T>, </span>",synthetic:false,types:["num_rational::Ratio"]},{text:"impl<'a, T> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for &'a <a class=\"struct\" href=\"num_rational/struct.Ratio.html\" title=\"struct num_rational::Ratio\">Ratio</a><T> <span class=\"where fmt-newline\">where<br> T: <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> + <a class=\"trait\" href=\"num_integer/trait.Integer.html\" title=\"trait num_integer::Integer\">Integer</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a><Output = T>, </span>",synthetic:false,types:["num_rational::Ratio"]},];
|
||||||
|
implementors["wasmi"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F32.html\" title=\"struct wasmi::nan_preserving_float::F32\">F32</a>",synthetic:false,types:["wasmi::nan_preserving_float::F32"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/arith/trait.Neg.html\" title=\"trait core::ops::arith::Neg\">Neg</a> for <a class=\"struct\" href=\"wasmi/nan_preserving_float/struct.F64.html\" title=\"struct wasmi::nan_preserving_float::F64\">F64</a>",synthetic:false,types:["wasmi::nan_preserving_float::F64"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAnd.html\" title=\"trait core::ops::bit::BitAnd\">BitAnd</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAndAssign.html\" title=\"trait core::ops::bit::BitAndAssign\">BitAndAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAndAssign.html\" title=\"trait core::ops::bit::BitAndAssign\">BitAndAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAndAssign.html\" title=\"trait core::ops::bit::BitAndAssign\">BitAndAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitAndAssign.html\" title=\"trait core::ops::bit::BitAndAssign\">BitAndAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOr.html\" title=\"trait core::ops::bit::BitOr\">BitOr</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOrAssign.html\" title=\"trait core::ops::bit::BitOrAssign\">BitOrAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOrAssign.html\" title=\"trait core::ops::bit::BitOrAssign\">BitOrAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOrAssign.html\" title=\"trait core::ops::bit::BitOrAssign\">BitOrAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitOrAssign.html\" title=\"trait core::ops::bit::BitOrAssign\">BitOrAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a, 'b> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><&'b <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXor.html\" title=\"trait core::ops::bit::BitXor\">BitXor</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXorAssign.html\" title=\"trait core::ops::bit::BitXorAssign\">BitXorAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXorAssign.html\" title=\"trait core::ops::bit::BitXorAssign\">BitXorAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXorAssign.html\" title=\"trait core::ops::bit::BitXorAssign\">BitXorAssign</a><<a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.BitXorAssign.html\" title=\"trait core::ops::bit::BitXorAssign\">BitXorAssign</a><&'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Not.html\" title=\"trait core::ops::bit::Not\">Not</a> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Not.html\" title=\"trait core::ops::bit::Not\">Not</a> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shl.html\" title=\"trait core::ops::bit::Shl\">Shl</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shl.html\" title=\"trait core::ops::bit::Shl\">Shl</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shl.html\" title=\"trait core::ops::bit::Shl\">Shl</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shl.html\" title=\"trait core::ops::bit::Shl\">Shl</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.ShlAssign.html\" title=\"trait core::ops::bit::ShlAssign\">ShlAssign</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.ShlAssign.html\" title=\"trait core::ops::bit::ShlAssign\">ShlAssign</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
|
@ -0,0 +1,9 @@
|
||||||
|
(function() {var implementors = {};
|
||||||
|
implementors["num_bigint"] = [{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shr.html\" title=\"trait core::ops::bit::Shr\">Shr</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shr.html\" title=\"trait core::ops::bit::Shr\">Shr</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigInt.html\" title=\"struct num_bigint::BigInt\">BigInt</a>",synthetic:false,types:["num_bigint::bigint::BigInt"]},{text:"impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shr.html\" title=\"trait core::ops::bit::Shr\">Shr</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},{text:"impl<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/ops/bit/trait.Shr.html\" title=\"trait core::ops::bit::Shr\">Shr</a><<a class=\"primitive\" href=\"https://doc.rust-lang.org/nightly/std/primitive.usize.html\">usize</a>> for &'a <a class=\"struct\" href=\"num_bigint/struct.BigUint.html\" title=\"struct num_bigint::BigUint\">BigUint</a>",synthetic:false,types:["num_bigint::biguint::BigUint"]},];
|
||||||
|
|
||||||
|
if (window.register_implementors) {
|
||||||
|
window.register_implementors(implementors);
|
||||||
|
} else {
|
||||||
|
window.pending_implementors = implementors;
|
||||||
|
}
|
||||||
|
})()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue