Repository: krzysztof-jusiak/di
Branch: cpp14
Commit: 472482b654ec
Files: 765
Total size: 7.0 MB
Directory structure:
gitextract_euz3n4tr/
├── .appveyor.yml
├── .clang-format
├── .clang-tidy
├── .gitattributes
├── .travis.yml
├── .user-config.jam
├── CMakeLists.txt
├── Makefile
├── README.md
├── benchmark/
│ ├── Makefile
│ ├── bind_error/
│ │ ├── dagger2.java
│ │ ├── di.cpp
│ │ ├── dicpp.cpp
│ │ ├── fruit.cpp
│ │ ├── guice.java
│ │ └── ninject.cs
│ ├── bind_interface/
│ │ ├── dagger2.java
│ │ ├── di.cpp
│ │ ├── dicpp.cpp
│ │ ├── fruit.cpp
│ │ ├── guice.java
│ │ └── ninject.cs
│ ├── bind_value/
│ │ ├── dagger2.java
│ │ ├── di.cpp
│ │ ├── dicpp.cpp
│ │ ├── fruit.cpp
│ │ ├── guice.java
│ │ └── ninject.cs
│ ├── create_complex/
│ │ ├── dagger2.java
│ │ ├── di.cpp
│ │ ├── dicpp.cpp
│ │ ├── fruit.cpp
│ │ ├── guice.java
│ │ └── ninject.cs
│ ├── create_simple/
│ │ ├── dagger2.java
│ │ ├── di.cpp
│ │ ├── dicpp.cpp
│ │ ├── fruit.cpp
│ │ ├── guice.java
│ │ └── ninject.cs
│ ├── generate_test.py
│ └── performance/
│ ├── Makefile
│ ├── di.cpp
│ ├── di.sh
│ └── header.cpp
├── doc/
│ ├── CHANGELOG.md
│ ├── FAQ.md
│ ├── benchmarks.md
│ ├── concepts-driven-design-with-di/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── Gruntfile.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bower.json
│ │ ├── css/
│ │ │ ├── print/
│ │ │ │ ├── paper.css
│ │ │ │ └── pdf.css
│ │ │ ├── reveal.css
│ │ │ ├── reveal.scss
│ │ │ └── theme/
│ │ │ ├── README.md
│ │ │ ├── beige.css
│ │ │ ├── black.css
│ │ │ ├── blood.css
│ │ │ ├── league.css
│ │ │ ├── moon.css
│ │ │ ├── night.css
│ │ │ ├── serif.css
│ │ │ ├── simple.css
│ │ │ ├── sky.css
│ │ │ ├── solarized.css
│ │ │ ├── source/
│ │ │ │ ├── beige.scss
│ │ │ │ ├── black.scss
│ │ │ │ ├── blood.scss
│ │ │ │ ├── league.scss
│ │ │ │ ├── moon.scss
│ │ │ │ ├── night.scss
│ │ │ │ ├── serif.scss
│ │ │ │ ├── simple.scss
│ │ │ │ ├── sky.scss
│ │ │ │ ├── solarized.scss
│ │ │ │ └── white.scss
│ │ │ ├── template/
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── settings.scss
│ │ │ │ └── theme.scss
│ │ │ └── white.css
│ │ ├── example/
│ │ │ ├── god_object.cpp
│ │ │ ├── static_polymorphism.cpp
│ │ │ └── type_erasure.cpp
│ │ ├── index.html
│ │ ├── js/
│ │ │ └── reveal.js
│ │ ├── lib/
│ │ │ ├── css/
│ │ │ │ └── zenburn.css
│ │ │ ├── font/
│ │ │ │ ├── league-gothic/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── league-gothic.css
│ │ │ │ └── source-sans-pro/
│ │ │ │ ├── LICENSE
│ │ │ │ └── source-sans-pro.css
│ │ │ └── js/
│ │ │ ├── classList.js
│ │ │ └── html5shiv.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── highlight/
│ │ │ │ └── highlight.js
│ │ │ ├── markdown/
│ │ │ │ ├── example.html
│ │ │ │ ├── example.md
│ │ │ │ ├── markdown.js
│ │ │ │ └── marked.js
│ │ │ ├── math/
│ │ │ │ └── math.js
│ │ │ ├── multiplex/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── master.js
│ │ │ ├── notes/
│ │ │ │ ├── notes.html
│ │ │ │ └── notes.js
│ │ │ ├── notes-server/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── notes.html
│ │ │ ├── print-pdf/
│ │ │ │ └── print-pdf.js
│ │ │ ├── search/
│ │ │ │ └── search.js
│ │ │ └── zoom-js/
│ │ │ └── zoom.js
│ │ ├── test/
│ │ │ ├── examples/
│ │ │ │ ├── barebones.html
│ │ │ │ ├── embedded-media.html
│ │ │ │ ├── math.html
│ │ │ │ ├── slide-backgrounds.html
│ │ │ │ └── slide-transitions.html
│ │ │ ├── qunit-1.12.0.css
│ │ │ ├── qunit-1.12.0.js
│ │ │ ├── test-markdown-element-attributes.html
│ │ │ ├── test-markdown-element-attributes.js
│ │ │ ├── test-markdown-slide-attributes.html
│ │ │ ├── test-markdown-slide-attributes.js
│ │ │ ├── test-markdown.html
│ │ │ ├── test-markdown.js
│ │ │ ├── test-pdf.html
│ │ │ ├── test-pdf.js
│ │ │ ├── test.html
│ │ │ └── test.js
│ │ └── uml/
│ │ ├── app0.uml
│ │ ├── app1.uml
│ │ ├── app2.uml
│ │ ├── app3.uml
│ │ ├── app4.uml
│ │ └── guideline.uml
│ ├── cpp-london-2017/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── Gruntfile.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bower.json
│ │ ├── css/
│ │ │ ├── print/
│ │ │ │ ├── paper.css
│ │ │ │ └── pdf.css
│ │ │ ├── reveal.css
│ │ │ ├── reveal.scss
│ │ │ └── theme/
│ │ │ ├── README.md
│ │ │ ├── beige.css
│ │ │ ├── black.css
│ │ │ ├── blood.css
│ │ │ ├── league.css
│ │ │ ├── moon.css
│ │ │ ├── night.css
│ │ │ ├── serif.css
│ │ │ ├── simple.css
│ │ │ ├── sky.css
│ │ │ ├── solarized.css
│ │ │ ├── source/
│ │ │ │ ├── beige.scss
│ │ │ │ ├── black.scss
│ │ │ │ ├── blood.scss
│ │ │ │ ├── league.scss
│ │ │ │ ├── moon.scss
│ │ │ │ ├── night.scss
│ │ │ │ ├── serif.scss
│ │ │ │ ├── simple.scss
│ │ │ │ ├── sky.scss
│ │ │ │ ├── solarized.scss
│ │ │ │ └── white.scss
│ │ │ ├── template/
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── settings.scss
│ │ │ │ └── theme.scss
│ │ │ └── white.css
│ │ ├── example/
│ │ │ ├── god_object.cpp
│ │ │ ├── static_polymorphism.cpp
│ │ │ └── type_erasure.cpp
│ │ ├── index.html
│ │ ├── js/
│ │ │ └── reveal.js
│ │ ├── lib/
│ │ │ ├── css/
│ │ │ │ └── zenburn.css
│ │ │ ├── font/
│ │ │ │ ├── league-gothic/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── league-gothic.css
│ │ │ │ └── source-sans-pro/
│ │ │ │ ├── LICENSE
│ │ │ │ └── source-sans-pro.css
│ │ │ └── js/
│ │ │ ├── classList.js
│ │ │ └── html5shiv.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── highlight/
│ │ │ │ └── highlight.js
│ │ │ ├── markdown/
│ │ │ │ ├── example.html
│ │ │ │ ├── example.md
│ │ │ │ ├── markdown.js
│ │ │ │ └── marked.js
│ │ │ ├── math/
│ │ │ │ └── math.js
│ │ │ ├── multiplex/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── master.js
│ │ │ ├── notes/
│ │ │ │ ├── notes.html
│ │ │ │ └── notes.js
│ │ │ ├── notes-server/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── notes.html
│ │ │ ├── print-pdf/
│ │ │ │ └── print-pdf.js
│ │ │ ├── search/
│ │ │ │ └── search.js
│ │ │ └── zoom-js/
│ │ │ └── zoom.js
│ │ ├── test/
│ │ │ ├── examples/
│ │ │ │ ├── barebones.html
│ │ │ │ ├── embedded-media.html
│ │ │ │ ├── math.html
│ │ │ │ ├── slide-backgrounds.html
│ │ │ │ └── slide-transitions.html
│ │ │ ├── qunit-1.12.0.css
│ │ │ ├── qunit-1.12.0.js
│ │ │ ├── test-markdown-element-attributes.html
│ │ │ ├── test-markdown-element-attributes.js
│ │ │ ├── test-markdown-slide-attributes.html
│ │ │ ├── test-markdown-slide-attributes.js
│ │ │ ├── test-markdown.html
│ │ │ ├── test-markdown.js
│ │ │ ├── test-pdf.html
│ │ │ ├── test-pdf.js
│ │ │ ├── test.html
│ │ │ └── test.js
│ │ └── uml/
│ │ ├── app0.uml
│ │ ├── app1.uml
│ │ ├── app2.uml
│ │ ├── app3.uml
│ │ └── app4.uml
│ ├── cppnow-2016/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── Gruntfile.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bower.json
│ │ ├── css/
│ │ │ ├── print/
│ │ │ │ ├── paper.css
│ │ │ │ └── pdf.css
│ │ │ ├── reveal.css
│ │ │ ├── reveal.scss
│ │ │ └── theme/
│ │ │ ├── README.md
│ │ │ ├── beige.css
│ │ │ ├── black.css
│ │ │ ├── blood.css
│ │ │ ├── league.css
│ │ │ ├── moon.css
│ │ │ ├── night.css
│ │ │ ├── serif.css
│ │ │ ├── simple.css
│ │ │ ├── sky.css
│ │ │ ├── solarized.css
│ │ │ ├── source/
│ │ │ │ ├── beige.scss
│ │ │ │ ├── black.scss
│ │ │ │ ├── blood.scss
│ │ │ │ ├── league.scss
│ │ │ │ ├── moon.scss
│ │ │ │ ├── night.scss
│ │ │ │ ├── serif.scss
│ │ │ │ ├── simple.scss
│ │ │ │ ├── sky.scss
│ │ │ │ ├── solarized.scss
│ │ │ │ └── white.scss
│ │ │ ├── template/
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── settings.scss
│ │ │ │ └── theme.scss
│ │ │ └── white.css
│ │ ├── example/
│ │ │ ├── ctor1.cpp
│ │ │ ├── ctor2.cpp
│ │ │ ├── ctor3.cpp
│ │ │ ├── ctor4.cpp
│ │ │ ├── resolve.cpp
│ │ │ └── typename_erasure.cpp
│ │ ├── index.html
│ │ ├── js/
│ │ │ └── reveal.js
│ │ ├── lib/
│ │ │ ├── css/
│ │ │ │ └── zenburn.css
│ │ │ ├── font/
│ │ │ │ ├── league-gothic/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── league-gothic.css
│ │ │ │ └── source-sans-pro/
│ │ │ │ ├── LICENSE
│ │ │ │ └── source-sans-pro.css
│ │ │ └── js/
│ │ │ ├── classList.js
│ │ │ └── html5shiv.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── highlight/
│ │ │ │ └── highlight.js
│ │ │ ├── markdown/
│ │ │ │ ├── example.html
│ │ │ │ ├── example.md
│ │ │ │ ├── markdown.js
│ │ │ │ └── marked.js
│ │ │ ├── math/
│ │ │ │ └── math.js
│ │ │ ├── multiplex/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── master.js
│ │ │ ├── notes/
│ │ │ │ ├── notes.html
│ │ │ │ └── notes.js
│ │ │ ├── notes-server/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── notes.html
│ │ │ ├── print-pdf/
│ │ │ │ └── print-pdf.js
│ │ │ ├── search/
│ │ │ │ └── search.js
│ │ │ └── zoom-js/
│ │ │ └── zoom.js
│ │ └── test/
│ │ ├── examples/
│ │ │ ├── barebones.html
│ │ │ ├── embedded-media.html
│ │ │ ├── math.html
│ │ │ ├── slide-backgrounds.html
│ │ │ └── slide-transitions.html
│ │ ├── qunit-1.12.0.css
│ │ ├── qunit-1.12.0.js
│ │ ├── test-markdown-element-attributes.html
│ │ ├── test-markdown-element-attributes.js
│ │ ├── test-markdown-slide-attributes.html
│ │ ├── test-markdown-slide-attributes.js
│ │ ├── test-markdown.html
│ │ ├── test-markdown.js
│ │ ├── test-pdf.html
│ │ ├── test-pdf.js
│ │ ├── test.html
│ │ └── test.js
│ ├── cppnow-2017/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── Gruntfile.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bower.json
│ │ ├── css/
│ │ │ ├── print/
│ │ │ │ ├── paper.css
│ │ │ │ └── pdf.css
│ │ │ ├── reveal.css
│ │ │ ├── reveal.scss
│ │ │ └── theme/
│ │ │ ├── README.md
│ │ │ ├── beige.css
│ │ │ ├── black.css
│ │ │ ├── blood.css
│ │ │ ├── league.css
│ │ │ ├── moon.css
│ │ │ ├── night.css
│ │ │ ├── serif.css
│ │ │ ├── simple.css
│ │ │ ├── sky.css
│ │ │ ├── solarized.css
│ │ │ ├── source/
│ │ │ │ ├── beige.scss
│ │ │ │ ├── black.scss
│ │ │ │ ├── blood.scss
│ │ │ │ ├── league.scss
│ │ │ │ ├── moon.scss
│ │ │ │ ├── night.scss
│ │ │ │ ├── serif.scss
│ │ │ │ ├── simple.scss
│ │ │ │ ├── sky.scss
│ │ │ │ ├── solarized.scss
│ │ │ │ └── white.scss
│ │ │ ├── template/
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── settings.scss
│ │ │ │ └── theme.scss
│ │ │ └── white.css
│ │ ├── example/
│ │ │ ├── god_object.cpp
│ │ │ ├── static_polymorphism.cpp
│ │ │ └── type_erasure.cpp
│ │ ├── index.html
│ │ ├── js/
│ │ │ └── reveal.js
│ │ ├── lib/
│ │ │ ├── css/
│ │ │ │ └── zenburn.css
│ │ │ ├── font/
│ │ │ │ ├── league-gothic/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── league-gothic.css
│ │ │ │ └── source-sans-pro/
│ │ │ │ ├── LICENSE
│ │ │ │ └── source-sans-pro.css
│ │ │ └── js/
│ │ │ ├── classList.js
│ │ │ └── html5shiv.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── highlight/
│ │ │ │ └── highlight.js
│ │ │ ├── markdown/
│ │ │ │ ├── example.html
│ │ │ │ ├── example.md
│ │ │ │ ├── markdown.js
│ │ │ │ └── marked.js
│ │ │ ├── math/
│ │ │ │ └── math.js
│ │ │ ├── multiplex/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── master.js
│ │ │ ├── notes/
│ │ │ │ ├── notes.html
│ │ │ │ └── notes.js
│ │ │ ├── notes-server/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── notes.html
│ │ │ ├── print-pdf/
│ │ │ │ └── print-pdf.js
│ │ │ ├── search/
│ │ │ │ └── search.js
│ │ │ └── zoom-js/
│ │ │ └── zoom.js
│ │ ├── test/
│ │ │ ├── examples/
│ │ │ │ ├── barebones.html
│ │ │ │ ├── embedded-media.html
│ │ │ │ ├── math.html
│ │ │ │ ├── slide-backgrounds.html
│ │ │ │ └── slide-transitions.html
│ │ │ ├── qunit-1.12.0.css
│ │ │ ├── qunit-1.12.0.js
│ │ │ ├── test-markdown-element-attributes.html
│ │ │ ├── test-markdown-element-attributes.js
│ │ │ ├── test-markdown-slide-attributes.html
│ │ │ ├── test-markdown-slide-attributes.js
│ │ │ ├── test-markdown.html
│ │ │ ├── test-markdown.js
│ │ │ ├── test-pdf.html
│ │ │ ├── test-pdf.js
│ │ │ ├── test.html
│ │ │ └── test.js
│ │ └── uml/
│ │ ├── app0.uml
│ │ ├── app1.uml
│ │ ├── app2.uml
│ │ ├── app3.uml
│ │ ├── app4.uml
│ │ └── guideline.uml
│ ├── examples.md
│ ├── extensions.md
│ ├── index.md
│ ├── meetingcpp-2016/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── Gruntfile.js
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bower.json
│ │ ├── css/
│ │ │ ├── print/
│ │ │ │ ├── paper.css
│ │ │ │ └── pdf.css
│ │ │ ├── reveal.css
│ │ │ ├── reveal.scss
│ │ │ └── theme/
│ │ │ ├── README.md
│ │ │ ├── beige.css
│ │ │ ├── black.css
│ │ │ ├── blood.css
│ │ │ ├── league.css
│ │ │ ├── moon.css
│ │ │ ├── night.css
│ │ │ ├── serif.css
│ │ │ ├── simple.css
│ │ │ ├── sky.css
│ │ │ ├── solarized.css
│ │ │ ├── source/
│ │ │ │ ├── beige.scss
│ │ │ │ ├── black.scss
│ │ │ │ ├── blood.scss
│ │ │ │ ├── league.scss
│ │ │ │ ├── moon.scss
│ │ │ │ ├── night.scss
│ │ │ │ ├── serif.scss
│ │ │ │ ├── simple.scss
│ │ │ │ ├── sky.scss
│ │ │ │ ├── solarized.scss
│ │ │ │ └── white.scss
│ │ │ ├── template/
│ │ │ │ ├── mixins.scss
│ │ │ │ ├── settings.scss
│ │ │ │ └── theme.scss
│ │ │ └── white.css
│ │ ├── index.html
│ │ ├── js/
│ │ │ └── reveal.js
│ │ ├── lib/
│ │ │ ├── css/
│ │ │ │ └── zenburn.css
│ │ │ ├── font/
│ │ │ │ ├── league-gothic/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── league-gothic.css
│ │ │ │ └── source-sans-pro/
│ │ │ │ ├── LICENSE
│ │ │ │ └── source-sans-pro.css
│ │ │ └── js/
│ │ │ ├── classList.js
│ │ │ └── html5shiv.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── highlight/
│ │ │ │ └── highlight.js
│ │ │ ├── markdown/
│ │ │ │ ├── example.html
│ │ │ │ ├── example.md
│ │ │ │ ├── markdown.js
│ │ │ │ └── marked.js
│ │ │ ├── math/
│ │ │ │ └── math.js
│ │ │ ├── multiplex/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── master.js
│ │ │ ├── notes/
│ │ │ │ ├── notes.html
│ │ │ │ └── notes.js
│ │ │ ├── notes-server/
│ │ │ │ ├── client.js
│ │ │ │ ├── index.js
│ │ │ │ └── notes.html
│ │ │ ├── print-pdf/
│ │ │ │ └── print-pdf.js
│ │ │ ├── search/
│ │ │ │ └── search.js
│ │ │ └── zoom-js/
│ │ │ └── zoom.js
│ │ ├── test/
│ │ │ ├── examples/
│ │ │ │ ├── barebones.html
│ │ │ │ ├── embedded-media.html
│ │ │ │ ├── math.html
│ │ │ │ ├── slide-backgrounds.html
│ │ │ │ └── slide-transitions.html
│ │ │ ├── qunit-1.12.0.css
│ │ │ ├── qunit-1.12.0.js
│ │ │ ├── test-markdown-element-attributes.html
│ │ │ ├── test-markdown-element-attributes.js
│ │ │ ├── test-markdown-slide-attributes.html
│ │ │ ├── test-markdown-slide-attributes.js
│ │ │ ├── test-markdown.html
│ │ │ ├── test-markdown.js
│ │ │ ├── test-pdf.html
│ │ │ ├── test-pdf.js
│ │ │ ├── test.html
│ │ │ └── test.js
│ │ └── uml/
│ │ └── game.uml
│ ├── mkdocs.yml
│ ├── overview.md
│ ├── scripts/
│ │ └── update_readme_toc.py
│ ├── themes/
│ │ ├── boost-classic/
│ │ │ ├── README.md
│ │ │ ├── base.html
│ │ │ ├── css/
│ │ │ │ ├── boostbook.css
│ │ │ │ └── github.css
│ │ │ ├── js/
│ │ │ │ └── highlight.pack.js
│ │ │ ├── nav.html
│ │ │ ├── scripts/
│ │ │ │ └── update_markdown.py
│ │ │ └── toc.html
│ │ └── boost-experimental/
│ │ ├── base.html
│ │ ├── breadcrumbs.html
│ │ ├── css/
│ │ │ ├── codemirror.css
│ │ │ ├── highlight.css
│ │ │ ├── mdn-like.css
│ │ │ ├── theme.css
│ │ │ └── theme_extra.css
│ │ ├── footer.html
│ │ ├── js/
│ │ │ ├── codemirror/
│ │ │ │ ├── active-line.js
│ │ │ │ ├── clike.js
│ │ │ │ └── codemirror.js
│ │ │ ├── cpp.js
│ │ │ ├── gitter.js
│ │ │ ├── highlight.pack.js
│ │ │ ├── theme.js
│ │ │ └── utility.js
│ │ ├── license/
│ │ │ └── highlight.js/
│ │ │ └── LICENSE
│ │ ├── search.html
│ │ ├── searchbox.html
│ │ ├── toc.html
│ │ └── versions.html
│ ├── try_it.md
│ ├── tutorial.md
│ ├── uml/
│ │ ├── coffee_maker.uml
│ │ └── di.uml
│ └── user_guide.md
├── example/
│ ├── CMakeLists.txt
│ ├── Jamfile.v2
│ ├── annotations.cpp
│ ├── automatic_injection.cpp
│ ├── bind_non_owning_ptr.cpp
│ ├── bindings.cpp
│ ├── configuration.cpp
│ ├── constructor_injection.cpp
│ ├── constructor_signature.cpp
│ ├── custom_policy.cpp
│ ├── custom_provider.cpp
│ ├── custom_scope.cpp
│ ├── deduce_scope.cpp
│ ├── dynamic_bindings.cpp
│ ├── eager_singletons.cpp
│ ├── errors/
│ │ ├── boundable_type_has_disallowed_qualifiers.cpp
│ │ ├── boundable_type_is_abstract.cpp
│ │ ├── boundable_type_is_bound_more_than_once.cpp
│ │ ├── boundable_type_is_neither_a_dependency_nor_an_injector.cpp
│ │ ├── boundable_type_is_not_related_to.cpp
│ │ ├── callable_requires_call_operator.cpp
│ │ ├── configurable_requires_callable_and_providable.cpp
│ │ ├── constructible_must_be_bound.cpp
│ │ ├── creatable_abstract_type_is_not_bound.cpp
│ │ ├── creatable_expose_abstract_type_is_not_bound.cpp
│ │ ├── creatable_instance_is_not_convertible_to.cpp
│ │ ├── creatable_scoped_is_not_convertible_to.cpp
│ │ ├── creatable_type_has_ambiguous_number_of_constructor_parameters.cpp
│ │ ├── creatable_type_has_to_many_constructor_parameters.cpp
│ │ ├── providable_requires_get.cpp
│ │ └── scopable_requires_create.cpp
│ ├── example.cpp
│ ├── fwd_bindings.cpp
│ ├── modules/
│ │ ├── common.hpp
│ │ ├── config.hpp
│ │ ├── controller.cpp
│ │ ├── controller.hpp
│ │ ├── main.cpp
│ │ ├── model.cpp
│ │ ├── model.hpp
│ │ ├── module_model.cpp
│ │ ├── module_model.hpp
│ │ ├── module_view.cpp
│ │ ├── module_view.hpp
│ │ ├── view.cpp
│ │ └── view.hpp
│ ├── modules.cpp
│ ├── motivation.cpp
│ ├── multiple_bindings.cpp
│ ├── multiple_interfaces.cpp
│ ├── performance/
│ │ ├── create_bound_interface.cpp
│ │ ├── create_bound_interface_via_exposed_module.cpp
│ │ ├── create_bound_interface_via_module.cpp
│ │ ├── create_named_type.cpp
│ │ ├── create_type_with_bound_instance.cpp
│ │ └── create_type_without_bindings.cpp
│ ├── pool_provider.cpp
│ ├── scopes.cpp
│ ├── try_it.cpp
│ ├── tutorial/
│ │ ├── basic_annotations_to_the_rescue.cpp
│ │ ├── basic_create_objects_tree.cpp
│ │ ├── basic_decide_the_life_times.cpp
│ │ ├── basic_first_steps_with_bindings.cpp
│ │ ├── basic_first_steps_with_bindings_override.cpp
│ │ ├── basic_first_steps_with_dynamic_bindings.cpp
│ │ ├── basic_first_steps_with_multiple_bindings.cpp
│ │ ├── basic_first_steps_with_template_bindings.cpp
│ │ ├── basic_split_your_configuration.cpp
│ │ └── basic_split_your_configuration_expose.cpp
│ └── user_guide/
│ ├── annotated_constructor_injection.cpp
│ ├── annotated_constructor_injection_with_constructor_definition.cpp
│ ├── annotated_constructor_injection_with_ctor_traits.cpp
│ ├── annotated_constructor_injection_with_the_same_names.cpp
│ ├── bind_cross_platform.cpp
│ ├── bind_deduce_type_to_value.cpp
│ ├── bind_dynamic_bindings.cpp
│ ├── bind_interface_to_implementation.cpp
│ ├── bind_multiple_bindings.cpp
│ ├── bind_multiple_bindings_initializer_list.cpp
│ ├── bind_multiple_interfaces.cpp
│ ├── bind_type_override.cpp
│ ├── bind_type_to_compile_time_value.cpp
│ ├── bind_type_to_value.cpp
│ ├── constructor_injection_aggregate.cpp
│ ├── constructor_injection_ambiguous_constructors_via_BOOST_DI_INJECT.cpp
│ ├── constructor_injection_ambiguous_constructors_via_BOOST_DI_INJECT_TRAITS.cpp
│ ├── constructor_injection_ambiguous_constructors_via_ctor_traits.cpp
│ ├── constructor_injection_ambiguous_constructors_via_inject.cpp
│ ├── constructor_injection_ambiguous_constructors_via_vaargs.cpp
│ ├── constructor_injection_default_values.cpp
│ ├── constructor_injection_direct.cpp
│ ├── constructor_injection_long_parameter_list.cpp
│ ├── constructor_injection_multiple_constructors.cpp
│ ├── injector_empty.cpp
│ ├── module.cpp
│ ├── module_exposed_annotated_type.cpp
│ ├── module_exposed_complex_types.cpp
│ ├── module_exposed_many_types.cpp
│ ├── module_exposed_type.cpp
│ ├── policies_constructible_global.cpp
│ ├── policies_constructible_local.cpp
│ ├── policies_print_type_extended.cpp
│ ├── policies_print_types.cpp
│ ├── providers_heap.cpp
│ ├── providers_heap_no_throw.cpp
│ ├── providers_stack_over_heap.cpp
│ ├── scopes_custom.cpp
│ ├── scopes_deduce_default.cpp
│ ├── scopes_instance.cpp
│ ├── scopes_singleton.cpp
│ └── scopes_unique.cpp
├── extension/
│ ├── CMakeLists.txt
│ ├── Jamfile.v2
│ ├── bindings/
│ │ ├── constructor_bindings.cpp
│ │ └── contextual_bindings.cpp
│ ├── injections/
│ │ ├── assisted_injection.cpp
│ │ ├── concepts.cpp
│ │ ├── factory.cpp
│ │ ├── generics.cpp
│ │ ├── lazy.cpp
│ │ ├── named_parameters.cpp
│ │ └── xml_injection.cpp
│ ├── policies/
│ │ ├── serialize.cpp
│ │ ├── types_dumper.cpp
│ │ └── uml_dumper.cpp
│ ├── providers/
│ │ └── mocks_provider.cpp
│ └── scopes/
│ ├── scoped_scope.cpp
│ ├── session_scope.cpp
│ └── shared_scope.cpp
├── include/
│ └── boost/
│ ├── di/
│ │ ├── aux_/
│ │ │ ├── compiler.hpp
│ │ │ ├── preprocessor.hpp
│ │ │ ├── type_traits.hpp
│ │ │ └── utility.hpp
│ │ ├── bindings.hpp
│ │ ├── concepts/
│ │ │ ├── boundable.hpp
│ │ │ ├── callable.hpp
│ │ │ ├── configurable.hpp
│ │ │ ├── creatable.hpp
│ │ │ ├── providable.hpp
│ │ │ └── scopable.hpp
│ │ ├── config.hpp
│ │ ├── core/
│ │ │ ├── any_type.hpp
│ │ │ ├── array.hpp
│ │ │ ├── binder.hpp
│ │ │ ├── bindings.hpp
│ │ │ ├── dependency.hpp
│ │ │ ├── injector.hpp
│ │ │ ├── policy.hpp
│ │ │ ├── pool.hpp
│ │ │ ├── provider.hpp
│ │ │ └── wrapper.hpp
│ │ ├── fwd.hpp
│ │ ├── fwd_ext.hpp
│ │ ├── inject.hpp
│ │ ├── injector.hpp
│ │ ├── make_injector.hpp
│ │ ├── policies/
│ │ │ └── constructible.hpp
│ │ ├── providers/
│ │ │ ├── heap.hpp
│ │ │ └── stack_over_heap.hpp
│ │ ├── scopes/
│ │ │ ├── deduce.hpp
│ │ │ ├── instance.hpp
│ │ │ ├── singleton.hpp
│ │ │ └── unique.hpp
│ │ ├── type_traits/
│ │ │ ├── ctor_traits.hpp
│ │ │ ├── memory_traits.hpp
│ │ │ ├── named_traits.hpp
│ │ │ ├── rebind_traits.hpp
│ │ │ └── scope_traits.hpp
│ │ └── wrappers/
│ │ ├── shared.hpp
│ │ └── unique.hpp
│ └── di.hpp
├── meta/
│ └── libraries.json
├── test/
│ ├── CMakeLists.txt
│ ├── Jamfile.v2
│ ├── common/
│ │ ├── common.hpp
│ │ ├── fakes/
│ │ │ ├── fake_config.hpp
│ │ │ ├── fake_dependency.hpp
│ │ │ ├── fake_injector.hpp
│ │ │ ├── fake_policy.hpp
│ │ │ ├── fake_pool.hpp
│ │ │ ├── fake_provider.hpp
│ │ │ ├── fake_scope.hpp
│ │ │ └── fake_wrapper.hpp
│ │ ├── test.hpp
│ │ └── utils.hpp
│ ├── ft/
│ │ ├── di_bind.cpp
│ │ ├── di_config.cpp
│ │ ├── di_config_global_policies.cpp
│ │ ├── di_config_global_provider.cpp
│ │ ├── di_errors.cpp
│ │ ├── di_inject.cpp
│ │ ├── di_injector.cpp
│ │ ├── di_injector_except.cpp
│ │ ├── di_module_1.cpp
│ │ ├── di_module_2.cpp
│ │ ├── di_module_3.cpp
│ │ ├── di_no_memory_inc.cpp
│ │ └── di_no_std_inc.cpp
│ ├── pt/
│ │ ├── di_compile_time.cpp
│ │ └── di_run_time.cpp
│ └── ut/
│ ├── aux_/
│ │ ├── preprocessor.cpp
│ │ ├── type_traits.cpp
│ │ └── utility.cpp
│ ├── bindings.cpp
│ ├── concepts/
│ │ ├── boundable.cpp
│ │ ├── callable.cpp
│ │ ├── configurable.cpp
│ │ ├── creatable.cpp
│ │ ├── providable.cpp
│ │ └── scopable.cpp
│ ├── config.cpp
│ ├── core/
│ │ ├── any_type.cpp
│ │ ├── array.cpp
│ │ ├── binder.cpp
│ │ ├── bindings.cpp
│ │ ├── dependency.cpp
│ │ ├── injector.cpp
│ │ ├── policy.cpp
│ │ ├── pool.cpp
│ │ ├── provider.cpp
│ │ └── wrapper.cpp
│ ├── inject.cpp
│ ├── injector.cpp
│ ├── make_injector.cpp
│ ├── policies/
│ │ └── constructible.cpp
│ ├── providers/
│ │ ├── heap.cpp
│ │ └── stack_over_heap.cpp
│ ├── scopes/
│ │ ├── deduce.cpp
│ │ ├── instance.cpp
│ │ ├── singleton.cpp
│ │ └── unique.cpp
│ ├── type_traits/
│ │ ├── ctor_traits.cpp
│ │ ├── memory_traits.cpp
│ │ ├── named_traits.cpp
│ │ ├── rebind_traits.cpp
│ │ └── scope_traits.cpp
│ └── wrappers/
│ ├── shared.cpp
│ └── unique.cpp
└── tools/
└── pph.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .appveyor.yml
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
version: 1.0.{build}
clone_folder: c:\di
shallow_clone: true
branches:
except:
- benchmarks
- gh-pages
cache:
- C:\cmake-3.7.2-win32-x86
environment:
fast_finish: true
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
VSPATH: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
BS: cmake
CMAKE_GENERATOR: Visual Studio 14 2015
MEMCHECK: DRMEMORY
PLATFORM: amd64
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
VSPATH: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
BS: cmake
CMAKE_GENERATOR: Visual Studio 15 2017
MEMCHECK: DRMEMORY
PLATFORM: amd64
matrix:
fast_finish: true
install:
- ps: |
if (![IO.File]::Exists("C:\cmake-3.7.2-win32-x86\bin\cmake.exe")) {
pushd c:\
Start-FileDownload 'https://cmake.org/files/v3.7/cmake-3.7.2-win32-x86.zip'
7z x -y cmake-3.7.2-win32-x86.zip
popd
}
- cinst -y drmemory
- appveyor DownloadFile http://downloads.sourceforge.net/mingw-w64/x86_64-5.2.0-release-posix-seh-rt_v4-rev1.7z
- 7z x x86_64-5.2.0-release-posix-seh-rt_v4-rev1.7z > nul
- call "%VSPATH%"\vcvarsall %PLATFORM%
- set PATH=C:\cmake-3.7.2-win32-x86\bin;mingw64\bin;%PATH%;
build_script:
- mingw32-make all
================================================
FILE: .clang-format
================================================
---
Language: Cpp
Standard: Cpp11
BasedOnStyle: Google
ColumnLimit: 128
---
================================================
FILE: .clang-tidy
================================================
---
Checks: 'clang-diagnostic-*,clang-analyzer-*,-clang-analyzer-alpha*,*,-llvm-namespace-comment,-llvm-include-order,-readability-named-parameter,-google-readability-namespace-comments,-google-build-using-namespace,-google-readability-namespace-comments'
HeaderFilterRegex: boost/di
AnalyzeTemporaryDtors: false
CheckOptions:
- key: google-readability-braces-around-statements.ShortStatementLines
value: '1'
- key: google-readability-function-size.BranchThreshold
value: '4294967295'
- key: google-readability-function-size.LineThreshold
value: '4294967295'
- key: google-readability-function-size.StatementThreshold
value: '800'
- key: google-readability-namespace-comments.ShortNamespaceLines
value: '10'
- key: google-readability-namespace-comments.SpacesBeforeComments
value: '2'
- key: misc-assert-side-effect.AssertMacros
value: assert
- key: misc-assert-side-effect.CheckFunctionCalls
value: '0'
- key: readability-braces-around-statements.ShortStatementLines
value: '0'
- key: readability-function-size.BranchThreshold
value: '4294967295'
- key: readability-function-size.LineThreshold
value: '4294967295'
- key: readability-function-size.StatementThreshold
value: '800'
- key: readability-simplify-boolean-expr.ChainedConditionalAssignment
value: '0'
- key: readability-simplify-boolean-expr.ChainedConditionalReturn
value: '0'
...
================================================
FILE: .gitattributes
================================================
* text=auto
================================================
FILE: .travis.yml
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
env:
global:
- secure: "eWDDsd5M1F8/LMYKdeDDSyfIB9kR1MoRPEg1Cml2PbN3c7T1cHczHH/DKeOrsWD0Ti6tjltczfW4VRYgv+pDSt9TsEsXMQmI5GY2a/lR3QcI/IIuQyQJ05VcmwNRIwZgHtUGukj7uHUzrNlQkATpfmGII7HG5ZXDoG9lfXzxITA=" # GH_TOKEN
git:
depth: 1
sudo: false
branches:
except:
- gh-pages
- benchmarks
matrix:
fast_finish: true
include:
#
# Documentation
#
- os: linux
env: DOCUMENTATION=ON
#
# Style
#
- os: linux
dist: precise
env: CHECK=ON CLANG_FORMAT=clang-format-4.0 CLANG_TIDY=clang-tidy-4.0
addons: { apt: { packages: ["clang-format-4.0", "clang-tidy-4.0"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
#
# CMake
#
- os: linux
dist: precise
env: BS=cmake CXX=clang++-3.6
addons: { apt: { packages: ["clang-3.6", "libstdc++-5-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-precise-3.6"] } }
dist: precise
- os: linux
env: BS=cmake CXX=clang++-3.7
addons: { apt: { packages: ["clang-3.7", "libstdc++-5-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-precise-3.7"] } }
- os: linux
dist: precise
env: BS=cmake CXX=clang++-3.8
addons: { apt: { packages: ["clang-3.8", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-precise-3.8"] } }
- os: linux
dist: precise
env: BS=cmake CXX=clang++-3.9
addons: { apt: { packages: ["clang-3.9", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-precise-3.9"] } }
- os: linux
dist: precise
env: BS=cmake CXX=clang++-4.0
addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
- os: linux
dist: precise
env: BS=cmake CXX=clang++-4.0 LIBCXX=ON
addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
- os: linux
dist: precise
env: BS=cmake CXX=g++-5
addons: { apt: { packages: ["g++-5", "libstdc++-5-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: linux
dist: precise
env: BS=cmake CXX=g++-6
addons: { apt: { packages: ["g++-6", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: linux
dist: trusty
env: BS=cmake CXX=g++-7
addons: { apt: { packages: ["g++-7", "libstdc++-7-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: osx
osx_image: xcode7.3
env: BS=cmake CXX=clang++
- os: osx
osx_image: xcode8.3
env: BS=cmake CXX=clang++
- os: osx
osx_image: xcode9.1
env: BS=cmake CXX=clang++
#
# Bjam
#
- os: linux
dist: precise
env: BS=bjam TOOLSET=clang CXX=clang++-4.0
addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
- os: linux
dist: trusty
env: BS=bjam TOOLSET=gcc CXX=g++-7
addons: { apt: { packages: ["g++-7", "libstdc++-7-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: osx
osx_image: xcode9.1
env: BS=bjam TOOLSET=clang CXX=clang++
#
# Static analysis
#
- os: linux
dist: precise
env: BS=cmake VARIANT=analyze CXX=clang++-4.0 LIBCXX=ON
addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
- os: linux
dist: trusty
env: BS=cmake VARIANT=analyze CXX=g++-7
addons: { apt: { packages: ["g++-7", "libstdc++-7-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: osx
osx_image: xcode9.1
env: BS=cmake VARIANT=analyze CXX=clang++
#
# Dynamic analysis
#
- os: linux
dist: precise
env: BS=cmake MEMCHECK=valgrind CXX=clang++-4.0 LIBCXX=ON
addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev", "valgrind", "gdb"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
- os: linux
dist: trusty
env: BS=cmake MEMCHECK=valgrind CXX=g++-7
addons: { apt: { packages: ["g++-7", "libstdc++-7-dev", "valgrind", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
- os: osx
osx_image: xcode9.1
env: BS=cmake MEMCHECK=valgrind CXX=clang++
#
# Coverage
#
- os: linux
dist: trusty
env: BS=bjam TOOLSET=gcc GCOV=gcov-7 VARIANT=coverage CXX=g++-7
addons: { apt: { packages: ["g++-7", "libstdc++-7-dev", "gdb"], sources: ["ubuntu-toolchain-r-test"] } }
#
# Benchmarks
#
#- os: linux
#dist: precise
#env: BS=cmake BENCHMARK=QUICK CXX=clang++-4.0 LIBCXX=ON
#addons: { apt: { packages: ["clang-4.0", "libstdc++-6-dev"], sources: ["ubuntu-toolchain-r-test", "llvm-toolchain-trusty-4.0"] } }
#- os: linux
#dist: trusty
#env: BS=cmake BENCHMARK=QUICK CXX=g++-7
#addons: { apt: { packages: ["g++-7", "libstdc++-7-dev"], sources: ["ubuntu-toolchain-r-test"] } }
#- os: osx
#osx_image: xcode9.1
#env: BS=cmake BENCHMARK=QUICK CXX=clang++
before_install:
- git config --global user.name "Continuous Integration"
- git config --global user.email "kris@jusiak.net"
- git config --global push.default simple
install:
- if [ "${BS}" == "bjam" ]; then (wget https://github.com/boostorg/build/archive/boost-1.65.1.tar.gz
&& tar zxf boost-1.65.1.tar.gz && cd build-boost-1.65.1 && ./bootstrap.sh)
&& touch Jamroot && export BOOST_ROOT="$PWD/build-boost-1.65.1" && export PATH="$PATH:$BOOST_ROOT"; fi
- if [ "${LIBCXX}" != "" ]; then (svn --quiet co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx && cmake -Bbuild -H. && cmake --build build)
&& export CXXFLAGS="-stdlib=libc++ -I${TRAVIS_BUILD_DIR}/libcxx/include"
&& export LDFLAGS="-L${TRAVIS_BUILD_DIR}/libcxx/build/lib -lc++"
&& export LD_LIBRARY_PATH="${TRAVIS_BUILD_DIR}/libcxx/build/lib:$LD_LIBRARY_PATH"; fi
script:
- if [ "${CXX}" != "" ]; then (travis_wait make all); fi
- if [ "${CHECK}" != "" ]; then (travis_wait make check); fi
- if [ "${TRAVIS_BRANCH}" == "cpp14" ] && [ "${DOCUMENTATION}" != "" ]; then (
pip install https://github.com/mkdocs/mkdocs/archive/b30f38fe299738e8ce614e53c3342cc8bef02b5b.zip -U --user
&& git clone https://github.com/boost-experimental/di && cd di && rm -rf *
&& git checkout -b gh-pages -t origin/gh-pages && git reset --hard && cd ..
&& MKDOCS_THEME=boost-experimental MKDOCS_SITE=../di make doc
&& MKDOCS_THEME=boost-classic MKDOCS_SITE=../di/boost make doc readme
&& cd di && git add -A . && git commit -am "doc update"
&& git push --force --quiet "https://${GH_TOKEN}@github.com/boost-experimental/di"); fi
after_success:
- if [ "${BENCHMARK}" != "" ]; then (
git clone https://github.com/boost-experimental/di benchmarks
&& cd benchmarks && git checkout -b benchmarks -t origin/benchmarks
&& find ../build/test ../test -iname "*.json" | xargs -I% cp % . && git add -A . && git commit -am "update"
&& git push --force --quiet "https://${GH_TOKEN}@github.com/boost-experimental/di"); fi
- if [ "${VARIANT}" == "coverage" ]; then (bash <(curl -s https://codecov.io/bash)); fi
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/743f46341bea58bbe3ca
on_success: change
on_failure: always
on_start: false
================================================
FILE: .user-config.jam
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
import os ;
using gcc : : [ os.environ CXX ] ;
using clang : : [ os.environ CXX ] ;
using darwin : : [ os.environ CXX ] ;
================================================
FILE: CMakeLists.txt
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
cmake_minimum_required(VERSION 2.8)
project(Boost.DI CXX)
set(CXX_STANDARD "c++14")
enable_testing()
include_directories(include)
if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -fno-exceptions -pedantic -pedantic-errors -Wall -Wextra -Werror")
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -fno-exceptions -pedantic -pedantic-errors -Wall -Wextra -Werror")
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /EHsc")
else()
message(WARNING "Unsupported compiler!")
endif()
add_subdirectory(example)
add_subdirectory(extension)
add_subdirectory(test)
================================================
FILE: Makefile
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
VALGRIND:=--memcheck="valgrind --leak-check=full --error-exitcode=1"
DRMEMORY:=--memcheck="drmemory -light -batch -exit_code_if_errors 1"
BS?=cmake
CMAKE?=cmake
CMAKE_GENERATOR?=Unix Makefiles
TOOLSET?=clang
CLANG_FORMAT?=clang-format
CLANG_TIDY?=clang-tidy
PYTHON?=python
MKDOCS?=mkdocs
MKDOCS_THEME?=boost-experimental
MKDOCS_SITE?=site
.PHONY: all clean doc
all: all_$(BS)
all_bjam:
@cd test && bjam -j2 -q --toolset=$(TOOLSET) --user-config=../.user-config.jam debug-symbols=off $(VARIANT) $($(MEMCHECK)) cxxflags=" $(CXXFLAGS)" linkflags=" $(LDFLAGS)"
@cd example && bjam -j2 -q --toolset=$(TOOLSET) --user-config=../.user-config.jam debug-symbols=off $($(MEMCHECK)) cxxflags=" $(CXXFLAGS)" linkflags=" $(LDFLAGS)"
@cd extension && bjam -j2 -q --toolset=$(TOOLSET) --user-config=../.user-config.jam debug-symbols=off $($(MEMCHECK)) cxxflags=" $(CXXFLAGS)" linkflags=" $(LDFLAGS)"
all_cmake:
@-mkdir build
cd build && $(CMAKE) -G "$(CMAKE_GENERATOR)" -DCMAKE_VERBOSE_MAKEFILE=ON .. && $(CMAKE) --build . && ctest --output-on-failure
clean: clean_$(BS)
clean_bjam:
@bjam --clean
clean_cmake:
@rm -rf build
pph:
@tools/pph.sh
check: check_pph check_style
check_pph: pph
@git diff include/boost/di.hpp
@git diff --quiet include/boost/di.hpp
check_style:
@find include example extension test -iname "*.hpp" -or -iname "*.cpp" | xargs $(CLANG_FORMAT) -i
@git diff include example extension test
@exit `git ls-files -m include example extension test | wc -l`
check_static_analysis:
@$(CLANG_TIDY) -header-filter='boost/di' `find example extension test -type f -iname "*.cpp"` -- -std=c++1y -I include -I test -include common/test.hpp
doc: readme doc_$(MKDOCS_THEME)
doc_%:
cd doc && $(MKDOCS) build --clean --theme-dir themes/$* --site-dir $(MKDOCS_SITE)
doc_boost-classic:
cd doc && $(PYTHON) themes/boost-classic/scripts/update_markdown.py . https://raw.githubusercontent.com/boost-experimental/di/cpp14
cd doc && $(MKDOCS) build --clean --theme-dir themes/boost-classic --site-dir $(MKDOCS_SITE)
readme:
cd doc && $(PYTHON) scripts/update_readme_toc.py mkdocs.yml ../README.md http://boost-experimental.github.io/di
release: all check
================================================
FILE: README.md
================================================






---------------------------------------
# [Boost].DI
Your C++14 header only Dependency Injection library with no dependencies ([__Try it online!__](http://boost-experimental.github.io/di/try_it/index.html))
### Quick start
#### Download
[Boost].DI requires only one file. Get the latest header [here!](https://raw.githubusercontent.com/boost-experimental/di/cpp14/include/boost/di.hpp)
#### Include
```cpp
#include
namespace di = boost::di;
```
#### Compile
```sh
gcc/clang$ $CXX -std=c++14 -O2 -fno-exceptions -fno-rtti -Wall -Werror -pedantic-errors file.cpp
msvc$ cl /std:c++14 /Ox /W3 file.cpp
```
#### Quick guide - Create object graph
```cpp
class ctor {
public:
explicit ctor(int i) : i(i) {}
int i;
};
struct aggregate {
double d;
};
class example {
example(aggregate a, const ctor& c) {
assert(87.0 == a.d);
assert(42 == c.i);
};
};
int main() {
const auto injector = di::make_injector(
di::bind.to(42),
di::bind.to(87.0)
);
injector.create();
}
```
|
Clang-3.8 |
GCC-6 |
MSVC-2015 |
| Compilation Time |
0.102s |
0.118s |
0.296s |
| Binary size (stripped) |
6.2kb |
6.2kb |
105kb |
| ASM x86-64 |
xor eax, eax
retq
|
#### Quick guide - Bind interfaces
```cpp
struct interface {
virtual ~iworld() noexcept = default;
virtual int get() const = 0;
};
class implementation : public interface {
public:
int get() const override { return 42; }
};
struct example {
example(std::shared_ptr i) {
assert(42 == i->get());
}
};
int main() {
const auto injector = di::make_injector(
di::bind.to()
);
injector.create>();
}
```
|
Clang-3.8 |
GCC-6 |
MSVC-2015 |
| Compilation Time |
0.102s |
0.118s |
0.296s |
| Binary size (stripped) |
6.2kb |
6.2kb |
105kb |
| ASM x86-64 (same as `make_unique`) |
push %rbx
mov %rdi,%rbx
mov $0x8,%edi
callq 0x4008e0 <_Znwm@plt>
movq $0x400c78,(%rax)
mov %rax,(%rbx)
mov %rbx,%rax
pop %rbx
retq
|
#### Quick guide - Bind templates
```cpp
template
class simple_updater : TPolicy {
void update() {
TPolicy::on("update");
}
};
template
class example {
public:
explicit example(const TUpdater& updater)
: updater(updater)
{ }
void update() {
updater.update();
}
private:
const TUpdater& updater;
};
int main() {
struct throw_policy {
void on(std::string_view str) {
throw std::runtime_error(str);
}
};
const auto injector = di::make_injector(
di::bind.to(),
di::bind.to()
);
injector.create().update();
}
```
|
Clang-3.8 |
GCC-6 |
MSVC-2015 |
| Compilation Time |
0.102s |
0.118s |
0.296s |
| Binary size (stripped) |
6.2kb |
6.2kb |
105kb |
| ASM x86-64 |
xor eax, eax
retq
|
#### Quick guide - Bind concepts
```cpp
struct Stremable {
template
auto requires(T&& t) -> decltype(
int( t.read() ),
t.write(int)
);
};
template
class example {
example(Exchange exchange, Engine engine)
: exchange(exchange), engine(engine)
{ }
};
int main() {
const auto injector = di::make_injector(
di::bind.to(),
di::bind.to()
);
injector.create();
}
```
|
Clang-3.8 |
GCC-6 |
MSVC-2015 |
| Compilation Time |
0.102s |
0.118s |
0.296s |
| Binary size (stripped) |
6.2kb |
6.2kb |
105kb |
| ASM x86-64 |
xor eax, eax
retq
|
---------------------------------------
### Documentation
[](GENERATE_TOC_BEGIN)
* [Introduction](http://boost-experimental.github.io/di/index.html)
* [Do I use a Dependency Injection already?](http://boost-experimental.github.io/di/index.html#do-i-use-a-dependency-injection-already)
* [Do I use Dependency Injection correctly?](http://boost-experimental.github.io/di/index.html#do-i-use-dependency-injection-correctly)
* [Do I need a Dependency Injection?](http://boost-experimental.github.io/di/index.html#do-i-need-a-dependency-injection)
* [STUPID vs SOLID - "Clean Code" Uncle Bob](http://boost-experimental.github.io/di/index.html#stupid-vs-solid-clean-code-uncle-bob)
* [Do I need a DI Framework/Library?](http://boost-experimental.github.io/di/index.html#do-i-need-a-di-frameworklibrary)
* [Manual DI - Wiring Mess (Avoid it by using [Boost].DI)](http://boost-experimental.github.io/di/index.html#manual-di-wiring-mess-avoid-it-by-using-boostdi)
* [Real Life examples?](http://boost-experimental.github.io/di/index.html#real-life-examples)
* [Why [Boost].DI?](http://boost-experimental.github.io/di/index.html#why-boostdi)
* [[Boost].DI design goals](http://boost-experimental.github.io/di/index.html#boostdi-design-goals)
* [Articles](http://boost-experimental.github.io/di/index.html#articles)
* [Videos](http://boost-experimental.github.io/di/index.html#videos)
* [Acknowledgements](http://boost-experimental.github.io/di/index.html#acknowledgements)
* [Overview](http://boost-experimental.github.io/di/overview/index.html)
* [Quick Start](http://boost-experimental.github.io/di/overview/index.html#quick-start)
* [Dependencies](http://boost-experimental.github.io/di/overview/index.html#dependencies)
* [Supported/Tested compilers](http://boost-experimental.github.io/di/overview/index.html#supportedtested-compilers)
* [Configuration](http://boost-experimental.github.io/di/overview/index.html#configuration)
* [Exception Safety](http://boost-experimental.github.io/di/overview/index.html#exception-safety)
* [Thread Safety](http://boost-experimental.github.io/di/overview/index.html#thread-safety)
* [Error Messages](http://boost-experimental.github.io/di/overview/index.html#error-messages)
* [Performance](http://boost-experimental.github.io/di/overview/index.html#performance)
* [Tutorial](http://boost-experimental.github.io/di/tutorial/index.html)
* [0. [Pre] Refactor towards DI](http://boost-experimental.github.io/di/tutorial/index.html#0-pre-refactor-towards-di)
* [1. [Basic] Create objects tree](http://boost-experimental.github.io/di/tutorial/index.html#1-basic-create-objects-tree)
* [2. [Basic] First steps with bindings](http://boost-experimental.github.io/di/tutorial/index.html#2-basic-first-steps-with-bindings)
* [3. [Basic] Decide the life times](http://boost-experimental.github.io/di/tutorial/index.html#3-basic-decide-the-life-times)
* [4. [Basic] Annotations to the rescue](http://boost-experimental.github.io/di/tutorial/index.html#4-basic-annotations-to-the-rescue)
* [5. [Basic] Split your configuration](http://boost-experimental.github.io/di/tutorial/index.html#5-basic-split-your-configuration)
* [6. [Advanced] Dump/Limit your types](http://boost-experimental.github.io/di/tutorial/index.html#6-advanced-dumplimit-your-types)
* [7. [Advanced] Customize it](http://boost-experimental.github.io/di/tutorial/index.html#7-advanced-customize-it)
* [8. [Advanced] Extend it](http://boost-experimental.github.io/di/tutorial/index.html#8-advanced-extend-it)
* [Try It Online!](http://boost-experimental.github.io/di/try_it/index.html)
* [Benchmarks](http://boost-experimental.github.io/di/benchmarks/index.html)
* [Performance](http://boost-experimental.github.io/di/benchmarks/index.html#performance)
* [C++ Libraries](http://boost-experimental.github.io/di/benchmarks/index.html#c-libraries)
* [C++ vs Java vs C Libraries](http://boost-experimental.github.io/di/benchmarks/index.html#c-vs-java-vs-c-libraries)
* [Usage of C++ vs Java vs C Libraries](http://boost-experimental.github.io/di/benchmarks/index.html#usage-of-c-vs-java-vs-c-libraries)
* [User Guide](http://boost-experimental.github.io/di/user_guide/index.html)
* [Injector](http://boost-experimental.github.io/di/user_guide/index.html#injector)
* [Bindings](http://boost-experimental.github.io/di/user_guide/index.html#bindings)
* [Injections](http://boost-experimental.github.io/di/user_guide/index.html#injections)
* [Annotations](http://boost-experimental.github.io/di/user_guide/index.html#annotations)
* [Scopes](http://boost-experimental.github.io/di/user_guide/index.html#scopes)
* [Modules](http://boost-experimental.github.io/di/user_guide/index.html#modules)
* [Providers](http://boost-experimental.github.io/di/user_guide/index.html#providers)
* [Policies](http://boost-experimental.github.io/di/user_guide/index.html#policies)
* [Concepts](http://boost-experimental.github.io/di/user_guide/index.html#concepts)
* [Configuration](http://boost-experimental.github.io/di/user_guide/index.html#configuration)
* [Examples](http://boost-experimental.github.io/di/examples/index.html)
* [Hello World](http://boost-experimental.github.io/di/examples/index.html#hello-world)
* [Bindings](http://boost-experimental.github.io/di/examples/index.html#bindings)
* [Dynamic Bindings](http://boost-experimental.github.io/di/examples/index.html#dynamic-bindings)
* [Forward Bindings](http://boost-experimental.github.io/di/examples/index.html#forward-bindings)
* [Multiple Bindings](http://boost-experimental.github.io/di/examples/index.html#multiple-bindings)
* [Binding Non-owning Pointer](http://boost-experimental.github.io/di/examples/index.html#binding-non-owning-pointer)
* [Automatic Injection](http://boost-experimental.github.io/di/examples/index.html#automatic-injection)
* [Constructor Signature](http://boost-experimental.github.io/di/examples/index.html#constructor-signature)
* [Constructor Injection](http://boost-experimental.github.io/di/examples/index.html#constructor-injection)
* [Multiple Interface](http://boost-experimental.github.io/di/examples/index.html#multiple-interface)
* [Annotations](http://boost-experimental.github.io/di/examples/index.html#annotations)
* [Deduce Scope](http://boost-experimental.github.io/di/examples/index.html#deduce-scope)
* [Custom Scope](http://boost-experimental.github.io/di/examples/index.html#custom-scope)
* [Eager Singletons](http://boost-experimental.github.io/di/examples/index.html#eager-singletons)
* [Modules](http://boost-experimental.github.io/di/examples/index.html#modules)
* [Modules (hpp/cpp)](http://boost-experimental.github.io/di/examples/index.html#modules-hppcpp)
* [Custom Policy](http://boost-experimental.github.io/di/examples/index.html#custom-policy)
* [Custom Provider](http://boost-experimental.github.io/di/examples/index.html#custom-provider)
* [Pool Provider](http://boost-experimental.github.io/di/examples/index.html#pool-provider)
* [Configuration](http://boost-experimental.github.io/di/examples/index.html#configuration)
* [Extensions](http://boost-experimental.github.io/di/extensions/index.html)
* [Constructor Bindings](http://boost-experimental.github.io/di/extensions/index.html#constructor-bindings)
* [Contextual Bindings](http://boost-experimental.github.io/di/extensions/index.html#contextual-bindings)
* [Assisted Injection](http://boost-experimental.github.io/di/extensions/index.html#assisted-injection)
* [Concepts](http://boost-experimental.github.io/di/extensions/index.html#concepts)
* [Factory](http://boost-experimental.github.io/di/extensions/index.html#factory)
* [Generics / Typed Erasure Interfaces](http://boost-experimental.github.io/di/extensions/index.html#genericstyped-erasure-interfaces)
* [Lazy](http://boost-experimental.github.io/di/extensions/index.html#lazy)
* [Named Parameters](http://boost-experimental.github.io/di/extensions/index.html#named-parameters)
* [XML Injection](http://boost-experimental.github.io/di/extensions/index.html#xml-injection)
* [Serialize](http://boost-experimental.github.io/di/extensions/index.html#serialize)
* [Types Dumper](http://boost-experimental.github.io/di/extensions/index.html#types-dumper)
* [UML Dumper](http://boost-experimental.github.io/di/extensions/index.html#uml-dumper)
* [Mocks Provider](http://boost-experimental.github.io/di/extensions/index.html#mocks-provider)
* [Scoped Scope](http://boost-experimental.github.io/di/extensions/index.html#scoped-scope)
* [Session Scope](http://boost-experimental.github.io/di/extensions/index.html#session-scope)
* [Shared Scope](http://boost-experimental.github.io/di/extensions/index.html#shared-scope)
* [FAQ](http://boost-experimental.github.io/di/FAQ/index.html)
* [CHANGELOG](http://boost-experimental.github.io/di/CHANGELOG/index.html)
* [ [1.1.0] - 2017-05-04](http://boost-experimental.github.io/di/CHANGELOG/index.html#-110-2017-05-04)
* [ [1.0.1] - 2016-05-04](http://boost-experimental.github.io/di/CHANGELOG/index.html#-101-2016-05-04)
* [ [1.0.0] - 2016-02-22](http://boost-experimental.github.io/di/CHANGELOG/index.html#-100-2016-02-22)
* [ [0.5.0] - 2015-01-12](http://boost-experimental.github.io/di/CHANGELOG/index.html#-050-2015-01-12)
* [ [0.1.0] - 2014-08-15](http://boost-experimental.github.io/di/CHANGELOG/index.html#-010-2014-08-15)
================================================
FILE: benchmark/Makefile
================================================
#
# Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
FRAMEWORKS:=.frameworks
PYTHON:=python
CXX?=clang++
JAVA?=java
JAVAC?=javac
SC?=dmcs
benchmark:
make TYPES=64 CTOR_ARGS=4 ITERATIONS=1024 TEST=unique base di fruit guice dagger2 ninject
make TYPES=128 CTOR_ARGS=4 ITERATIONS=1024 TEST=unique base di fruit guice dagger2 ninject
make TYPES=256 CTOR_ARGS=4 ITERATIONS=1024 TEST=unique base di fruit guice dagger2 ninject
make TYPES=512 CTOR_ARGS=4 ITERATIONS=1024 TEST=unique base di fruit guice dagger2 ninject
make TYPES=1024 CTOR_ARGS=4 ITERATIONS=1024 TEST=unique base di fruit guice dagger2 ninject
$(FRAMEWORKS)/base:
$(FRAMEWORKS)/fruit:
@-mkdir -p $(FRAMEWORKS) 2>/dev/null
git clone https://github.com/google/fruit.git $(FRAMEWORKS)/fruit
cd $(FRAMEWORKS)/fruit && mkdir .build && cd .build && cmake .. && cmake --build .
$(FRAMEWORKS)/di:
@-mkdir -p $(FRAMEWORKS) 2>/dev/null
git clone https://github.com/boost-experimental/di.git $(FRAMEWORKS)/di
$(FRAMEWORKS)/hypodermic:
@-mkdir -p $(FRAMEWORKS) 2>/dev/null
git clone https://github.com/ybainier/Hypodermic.git $(FRAMEWORKS)/hypodermic
$(FRAMEWORKS)/guice:
@-mkdir -p $(FRAMEWORKS)/guice 2>/dev/null
cd $(FRAMEWORKS)/guice && curl -L -O http://central.maven.org/maven2/com/google/guava/guava/19.0/guava-19.0.jar
cd $(FRAMEWORKS)/guice && curl -L -O http://central.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar
cd $(FRAMEWORKS)/guice && curl -L -O https://github.com/google/guice/releases/download/4.0/guice-4.0.jar
cd $(FRAMEWORKS)/guice && curl -L -O http://central.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
$(FRAMEWORKS)/dagger2:
@-mkdir -p $(FRAMEWORKS)/dagger2 2>/dev/null
cd $(FRAMEWORKS)/dagger2 && curl -L -O https://github.com/krzysztof-jusiak/di_frameworks/raw/master/frameworks/dagger2/dagger-compiler-2.0-20150330.203231-18-jar-with-dependencies.jar
cd $(FRAMEWORKS)/dagger2 && curl -L -O https://github.com/krzysztof-jusiak/di_frameworks/raw/master/frameworks/dagger2/javax.inject-1.jar
#cd $(FRAMEWORKS)/dagger2 && curl -L -O http://central.maven.org/maven2/com/google/dagger/dagger/2.4/dagger-2.4.jar
#cd $(FRAMEWORKS)/dagger2 && curl -L -O http://central.maven.org/maven2/com/google/dagger/dagger-compiler/2.4/dagger-compiler-2.4.jar
#cd $(FRAMEWORKS)/dagger2 && curl -L -O http://central.maven.org/maven2/org/glassfish/javax.annotation/10.0-b28/javax.annotation-10.0-b28.jar
$(FRAMEWORKS)/ninject:
@-mkdir -p $(FRAMEWORKS)/ninject 2>/dev/null
cd $(FRAMEWORKS)/ninject && curl -L -O https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ninject2/Ninject-3.0.1.10-release-mono-4.0.zip
cd $(FRAMEWORKS)/ninject && unzip -j Ninject-3.0.1.10-release-mono-4.0.zip
gen_%:
@make $(FRAMEWORKS)/$*
@echo "--------------"
@echo $*
@echo "--------------"
@rm -rf .$*
@mkdir .$* && cd .$* && FRAMEWORK=$* $(PYTHON) ../generate_test.py
base: gen_base
cd .base && time $(CXX) base.cpp -std=c++11 -O2 -I.. -o base.out
cd .base && strip base.out && ls -lh base.out
cd .base && time ./base.out || exit 1
di: gen_di
cd .di && time $(CXX) di.cpp -std=c++1y -O2 -I.. -I ../$(FRAMEWORKS)/di/include -o di.out
cd .di && strip di.out && ls -lh di.out || exit 1
cd .di && time ./di.out
fruit: gen_fruit
cd .fruit && time $(CXX) -DFRUIT_NO_LOOP_CHECK fruit.cpp -std=c++11 -O2 -I.. -I ../$(FRAMEWORKS)/fruit/include -I ../$(FRAMEWORKS)/fruit/.build/include -L ../$(FRAMEWORKS)/fruit/.build/src -lfruit -o fruit.out
cd .fruit strip fruit.out && ls -lh fruit.out
cd .fruit && time LD_LIBRARY_PATH=../$(FRAMEWORKS)/fruit/.build/src ./fruit.out || exit 1
hypodermic: gen_hypodermic
cd .hypodermic && time $(CXX) hypodermic.cpp -std=c++11 -O2 -I.. -I ../$(FRAMEWORKS)/hypodermic -o hypodermic.out
cd .hypodermic && strip hypodermic.out && ls -lh hypodermic.out
cd .hypodermic && time ./hypodermic.out || exit 1
guice: gen_guice
cd .guice && time $(JAVAC) -cp .:`ls ../$(FRAMEWORKS)/guice/*.jar| xargs | tr ' ' ':'` guice.java
cd .guice && time $(JAVA) -cp .:`ls ../$(FRAMEWORKS)/guice/*.jar| xargs | tr ' ' ':'` guice || exit 1
dagger2: gen_dagger2
cd .dagger2 && time $(JAVAC) -cp .:`ls ../$(FRAMEWORKS)/dagger2/*.jar| xargs | tr ' ' ':'` dagger2.java
cd .dagger2 && time $(JAVA) -cp .:`ls ../$(FRAMEWORKS)/dagger2/*.jar| xargs | tr ' ' ':'` dagger2 || exit 1
ninject: gen_ninject
cd .ninject && cp ../$(FRAMEWORKS)/ninject/Ninject.dll .
cd .ninject && time $(SC) -o+ /r:Ninject.dll ninject.cs
cd .ninject && time mono --aot=full ./ninject.exe
cd .ninject && time mono ./ninject.exe || exit 1
================================================
FILE: benchmark/bind_error/dagger2.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import dagger.*;
import javax.inject.Inject;
interface I {
public void dummy();
};
class Impl implements I {
@Inject Impl() { }
@Override public void dummy() { }
}
@Module
class AppModule {
//@Provides I provideI(Impl impl) { return impl; }
}
@Component(modules = AppModule.class)
interface AppComponent {
I build();
}
public class dagger2 {
public static void main(String[] args) {
I object = Dagger_AppComponent.create().build();
object.dummy();
}
}
/**
* dagger2.java:13: error: I cannot be provided without an @Provides-annotated method.
* I build();
* ^
* 1 error
*/
================================================
FILE: benchmark/bind_error/di.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
//<-
#include
//->
#include
namespace di = boost::di;
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
void dummy() override {}
};
auto module = [] {
// clang-format off
return di::make_injector(
// di::bind.to()
);
// clang-format on
};
int main() {
auto injector = di::make_injector(module());
std::unique_ptr object{injector.create()};
object->dummy();
}
// clang-format off
/**
* di.cpp:32:38: warning: 'create' is deprecated: creatable constraint not satisfied
* std::unique_ptr object{injector.create()};
* ^
* boost/di.hpp:2420:3: note: 'create' has been explicitly marked deprecated here
* create
* ^
* boost/di.hpp:871:2: error: 'boost::di::v1_0_0::concepts::abstract_type::is_not_bound::error'
* error(_ = "type is not bound, did you forget to add: 'di::bind.to()'?");
* ^
*/
// clang-format on
================================================
FILE: benchmark/bind_error/dicpp.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
#include
#include
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
DI_CONSTRUCTOR(Impl, ()) {}
void dummy() override {}
};
void module(di::registry& r) {
// r.add(r.type().implementation());
}
int main() {
di::injector injector;
injector.install(module);
std::unique_ptr object{injector.construct()};
object->dummy();
}
/**
* terminate called after throwing an instance of 'std::runtime_error'
* what(): Requested type without corresponding provider: di::type_key.
* Double check if the type is abstract
*/
================================================
FILE: benchmark/bind_error/fruit.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
INJECT(Impl()) {}
void dummy() override {}
};
fruit::Component module() {
return fruit::createComponent();
//.bind();
}
int main() {
fruit::Injector injector{module()};
std::unique_ptr object{injector.get()};
object->dummy();
}
// clang-format off
/**
* In file included from fruit.cpp:1:
* In file included from .fruit/include/fruit/fruit.h:25:
* fruit/include/fruit/impl/injection_errors.h:33:3: error: static_assert failed
* "No explicit binding nor C::Inject definition was found for T."
* static_assert(AlwaysFalse::value,
* ^ ~~~~~~~~~~~~~~~~~~~~~
* fruit/include/fruit/impl/component.defn.h:41:9: note: in instantiation of
* 'fruit::impl::NoBindingFoundError' requested here
* (void)typename fruit::impl::meta::CheckIfError::type();
* ^
* fruit.cpp:6:12: note: in instantiation of function template specialization
* 'fruit::Component::Component<
* fruit::impl::meta::ConsComp<
* fruit::impl::meta::Vector<>*,
* fruit::impl::meta::Vector<>,
* fruit::impl::meta::Vector<>,
* fruit::impl::meta::Vector<>,
* fruit::impl::meta::Vector<>
* >*>' requested here
* return fruit::createComponent();
*/
// clang-format on
================================================
FILE: benchmark/bind_error/guice.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import com.google.inject.*;
interface I {
public void dummy();
};
class Impl implements I {
@Inject Impl() { }
@Override public void dummy() { }
}
class Module extends AbstractModule {
@Override
protected void configure() {
//bind(I.class).to(Impl.class);
}
}
public class guice {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new Module());
I object = injector.getInstance(I.class);
object.dummy();
}
}
/**
* Exception in thread "main" com.google.inject.ConfigurationException:
* Guice configuration errors:
*
* 1) No implementation for I was bound.
* while locating I
*
* 1 error
* at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1042)
* at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001)
* at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
* at guice.main(guice.java:15)
*
*/
================================================
FILE: benchmark/bind_error/ninject.cs
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using Ninject;
interface I {
void dummy();
};
class Impl : I {
public Impl() { }
void I.dummy() { }
}
class Module : Ninject.Modules.NinjectModule {
public override void Load() {
//Bind().To();
}
}
class ninject {
static void Main(string[] args) {
Ninject.IKernel kernel = new StandardKernel(new Module());
I object = kernel.Get();
object->dummy();
}
}
/**
*/
================================================
FILE: benchmark/bind_interface/dagger2.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import dagger.*;
import javax.inject.Inject;
interface I {
public void dummy();
};
class Impl implements I {
@Inject Impl() { }
@Override public void dummy() { }
}
@Module
class AppModule {
@Provides I provideI(Impl impl) { return impl; }
}
@Component(modules = AppModule.class)
interface AppComponent {
I build();
}
public class dagger2 {
public static void main(String[] args) {
I object = Dagger_AppComponent.create().build();
}
}
================================================
FILE: benchmark/bind_interface/di.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
//<-
#include
//->
#include
namespace di = boost::di;
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
void dummy() override {}
};
auto module = [] {
// clang-format off
return di::make_injector(
di::bind.to()
);
// clang-format on
};
auto test() {
auto injector = di::make_injector(module());
return injector.create>();
}
//<-
int main() {}
/**
* ASM x86-64 (same as `std::make_unique()`)
*
* push %rbx
* mov %rdi,%rbx
* mov $0x8,%edi
* callq 0x4009f0 <_Znwm@plt>
* movq $0x400e78,(%rax)
* mov %rax,(%rbx)
* mov %rbx,%rax
* pop %rbx
* ret
*/
//->
================================================
FILE: benchmark/bind_interface/dicpp.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
//<-
#include
//->
#include
#include
#include
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
DI_CONSTRUCTOR(Impl, ()) {}
void dummy() override {}
};
void module(di::registry& r) {
// clang-format off
r.add(r.type().implementation());
// clang-format on
}
std::unique_ptr test() {
di::injector injector;
injector.install(module);
std::unique_ptr object{injector.construct()};
return object;
}
//<-
int main() {}
/**
* ASM x86-64
*
* push %r14
* push %rbx
* sub $0xc8,%rsp
* mov %rdi,%r14
* lea 0x20(%rsp),%rbx
* xor %esi,%esi
* mov %rbx,%rdi
* callq 0x40c3d0 <_ZN2di8injectorC2ENS0_8localityE>
* movq $0x4044c0,(%rsp)
* movq $0x40bf80,0x18(%rsp)
* movq $0x40bf90,0x10(%rsp)
* xorps %xmm0,%xmm0
* movaps %xmm0,0xb0(%rsp)
* lea 0xb0(%rsp),%rsi
* mov %rbx,%rdi
* callq 0x4047e0
* <_ZN2di8registry3addI1IN5boost3mpl6m_itemINS_6detail4tags14implementationE4ImplNS4_3mapIN4mpl_2naESC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_SC_EEEEEEvRKNS6_20registration_builderIT_T0_EE>
* mov 0x10(%rsp),%rax
* test %rax,%rax
* je 0x404549 <_Z4testv+105>
* lea (%rsp),%rdi
* mov $0x3,%edx
* mov %rdi,%rsi
* callq *%rax
* lea 0x20(%rsp),%rdi
* callq 0x40bfc0 <_ZNK2di8registry9constructIP1IEENS_6traits13returned_typeIT_E4typeEv>
* mov %rax,(%r14)
* lea 0x20(%rsp),%rdi
* callq 0x40c7d0 <_ZN2di8registryD2Ev>
* mov %r14,%rax
* add $0xc8,%rsp
* pop %rbx
* pop %r14
* retq
* mov %rax,%rbx
* mov 0x10(%rsp),%rcx
* test %rcx,%rcx
* je 0x404596 <_Z4testv+182>
* lea (%rsp),%rdi
* mov $0x3,%edx
* mov %rdi,%rsi
* callq *%rcx
* jmp 0x404596 <_Z4testv+182>
* mov %rax,%rdi
* callq 0x405890 <__clang_call_terminate>
* mov %rax,%rbx
* lea 0x20(%rsp),%rdi
* callq 0x40c7d0 <_ZN2di8registryD2Ev>
* mov %rbx,%rdi
* callq 0x4041f0 <_Unwind_Resume@plt>
* mov %rax,%rdi
* callq 0x405890 <__clang_call_terminate>
*/
//->
================================================
FILE: benchmark/bind_interface/fruit.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
//<-
#include
//->
#include
struct I {
virtual ~I() noexcept = default;
virtual void dummy() = 0;
};
struct Impl : I {
INJECT(Impl()) {}
void dummy() override {}
};
fruit::Component module() {
// clang-format off
return fruit::createComponent()
.bind();
// clang-format on
}
std::unique_ptr test() {
fruit::Injector injector{module()};
// get is not supported
std::unique_ptr object{injector.get()};
return object;
}
//<-
int main() {}
/**
* ASM x86-64
*
* push %r14
* push %rbx
* sub $0xc8,%rsp
* mov %rdi,%r14
* lea (%rsp),%rbx
* mov %rbx,%rdi
* callq 0x401740 <_Z6modulev>
* lea 0xc0(%rsp),%rdi
* mov %rbx,%rsi
* callq 0x401d30 <_ZN5fruit8InjectorIJ1IEEC2ENS_9ComponentIJS1_EEE>
* mov 0xa8(%rsp),%rdi
* test %rdi,%rdi
* je 0x40186b <_Z4testv+59>
* callq 0x4013d0 <_ZdlPv@plt>
* mov 0x90(%rsp),%rdi
* test %rdi,%rdi
* je 0x40187d <_Z4testv+77>
* callq 0x4013d0 <_ZdlPv@plt>
* mov 0x48(%rsp),%rdi
* test %rdi,%rdi
* je 0x40188c <_Z4testv+92>
* callq 0x4013d0 <_ZdlPv@plt>
* mov 0xc0(%rsp),%rbx
* lea 0x28(%rbx),%rdi
* mov $0x40c360,%esi
* callq 0x40b990 <_ZNK5fruit4impl13SemistaticMapINS0_6TypeIdENS0_29SemistaticGraphInternalNodeIdEE2atES2_>
* mov (%rax),%rsi
* test $0xf,%sil
* jne 0x401934 <_Z4testv+260>
* mov %rsi,%rax
* and $0xfffffffffffffff0,%rax
* cmp %rsi,%rax
* jne 0x40194d <_Z4testv+285>
* add 0x68(%rbx),%rsi
* mov %rbx,%rdi
* callq 0x402b30
* <_ZN5fruit4impl15InjectorStorage6getPtrI1IEEPT_NS0_15SemistaticGraphINS0_6TypeIdENS0_21NormalizedBindingDataEE13node_iteratorE>
* mov %rax,(%r14)
* mov %rbx,%rdi
* callq 0x401df0 <_ZN5fruit4impl15InjectorStorageD2Ev>
* mov %rbx,%rdi
* callq 0x4013d0 <_ZdlPv@plt>
* mov %r14,%rax
* add $0xc8,%rsp
* pop %rbx
* pop %r14
* retq
* mov %rax,%r14
* mov 0xa8(%rsp),%rdi
* test %rdi,%rdi
* je 0x401901 <_Z4testv+209>
* callq 0x4013d0 <_ZdlPv@plt>
* mov 0x90(%rsp),%rdi
* test %rdi,%rdi
* je 0x401913 <_Z4testv+227>
* callq 0x4013d0 <_ZdlPv@plt>
* mov 0x48(%rsp),%rdi
* test %rdi,%rdi
* je 0x401985 <_Z4testv+341>
* callq 0x4013d0 <_ZdlPv@plt>
* mov %r14,%rdi
* callq 0x4015a0 <_Unwind_Resume@plt>
* mov %rax,%r14
* test %rbx,%rbx
* je 0x401979 <_Z4testv+329>
* jmp 0x401969 <_Z4testv+313>
* mov $0x40bc18,%edi
* mov $0x40bc42,%esi
* mov $0xb1,%edx
* mov $0x40bca0,%ecx
* callq 0x4013f0 <__assert_fail@plt>
* mov $0x40bdb3,%edi
* mov $0x40bc42,%esi
* mov $0xb4,%edx
* mov $0x40bca0,%ecx
* callq 0x4013f0 <__assert_fail@plt>
* mov %rax,%r14
* mov %rbx,%rdi
* callq 0x401df0 <_ZN5fruit4impl15InjectorStorageD2Ev>
* mov %rbx,%rdi
* callq 0x4013d0 <_ZdlPv@plt>
* movq $0x0,0xc0(%rsp)
* mov %r14,%rdi
* callq 0x4015a0 <_Unwind_Resume@plt>
*/
//->
================================================
FILE: benchmark/bind_interface/guice.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import com.google.inject.*;
interface I {
public void dummy();
};
class Impl implements I {
@Inject Impl() { }
@Override public void dummy() { }
}
class Module extends AbstractModule {
@Override
protected void configure() {
bind(I.class).to(Impl.class);
}
}
public class guice {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new Module());
I object = injector.getInstance(I.class);
}
}
================================================
FILE: benchmark/bind_interface/ninject.cs
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using Ninject;
interface I {
void dummy();
};
class Impl : I {
public Impl() { }
void I.dummy() { }
}
class Module : Ninject.Modules.NinjectModule {
public override void Load() {
Bind().To();
}
}
class ninject {
static void Main(string[] args) {
Ninject.IKernel kernel = new StandardKernel(new Module());
I object = kernel.Get();
}
}
================================================
FILE: benchmark/bind_value/dagger2.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import dagger.*;
@Module
class AppModule {
@Provides int provideint() { return 42; }
}
@Component(modules = AppModule.class)
interface AppComponent {
int build();
}
public class dagger2 {
public static void main(String[] args) {
Dagger_AppComponent.create().build();
}
}
================================================
FILE: benchmark/bind_value/di.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
namespace di = boost::di;
auto module = [] {
// clang-format off
return di::make_injector(
di::bind<>.to(42)
);
// clang-format on
};
auto test() {
auto injector = di::make_injector(module());
return injector.create();
}
//<-
int main() {}
/**
* ASM x86-64 (same as `return 42`)
*
* xor 0x2a,%eax
* retq
*/
//->
================================================
FILE: benchmark/bind_value/dicpp.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
#include
void module(di::registry& r) {
// clang-format off
r.add(r.type().instance(new int{42}));
// clang-format on
}
auto test() {
di::injector injector;
injector.install(module);
return injector.construct();
}
//<-
int main() {}
/**
* ASM x86-64
*
* push %rbx
* sub $0xb0,%rsp
* lea 0x20(%rsp),%rbx
* xor %esi,%esi
* mov %rbx,%rdi
* callq 0x40af50 <_ZN2di8injectorC2ENS0_8localityE>
* movq $0x404b10,(%rsp)
* movq $0x40ab00,0x18(%rsp)
* movq $0x40ab10,0x10(%rsp)
* mov %rbx,%rdi
* callq 0x404b10 <_Z6moduleRN2di8registryE>
* mov 0x10(%rsp),%rax
* test %rax,%rax
* je 0x404d61 <_Z4testv+81>
* lea (%rsp),%rdi
* mov $0x3,%edx
* mov %rdi,%rsi
* callq *%rax
* lea 0x20(%rsp),%rdi
* callq 0x40ab40 <_ZNK2di8registry9constructIiEENS_6traits13returned_typeIT_E4typeEv>
* mov %eax,%ebx
* lea 0x20(%rsp),%rdi
* callq 0x40b390 <_ZN2di8registryD2Ev>
* mov %ebx,%eax
* add $0xb0,%rsp
* pop %rbx
* retq
* mov %rax,%rbx
* mov 0x10(%rsp),%rcx
* test %rcx,%rcx
* je 0x404daa <_Z4testv+154>
* lea (%rsp),%rdi
* mov $0x3,%edx
* mov %rdi,%rsi
* callq *%rcx
* jmp 0x404daa <_Z4testv+154>
* mov %rax,%rdi
* callq 0x405f60 <__clang_call_terminate>
* mov %rax,%rbx
* lea 0x20(%rsp),%rdi
* callq 0x40b390 <_ZN2di8registryD2Ev>
* mov %rbx,%rdi
* callq 0x404840 <_Unwind_Resume@plt>
* mov %rax,%rdi
* callq 0x405f60 <__clang_call_terminate>
*/
//->
================================================
FILE: benchmark/bind_value/fruit.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
auto i = 42; // bindInstance doesn't support l-value's
fruit::Component module() {
// clang-format off
return fruit::createComponent().bindInstance(i);
// clang-format on
}
auto test() {
fruit::Injector injector{module()};
return injector.get();
}
//<-
int main() {}
/**
* ASM x86-64
*
* push %rbp
* push %r14
* push %rbx
* sub $0xd0,%rsp
* lea 0x8(%rsp),%rbx
* mov %rbx,%rdi
* callq 0x400cd0 <_Z6modulev>
* lea 0xc8(%rsp),%rdi
* mov %rbx,%rsi
* callq 0x401170 <_ZN5fruit8InjectorIJiEEC2ENS_9ComponentIJiEEE>
* mov 0xb0(%rsp),%rdi
* test %rdi,%rdi
* je 0x400efa <_Z4testv+58>
* callq 0x400b10 <_ZdlPv@plt>
* mov 0x98(%rsp),%rdi
* test %rdi,%rdi
* je 0x400f0c <_Z4testv+76>
* callq 0x400b10 <_ZdlPv@plt>
* mov 0x50(%rsp),%rdi
* test %rdi,%rdi
* je 0x400f1b <_Z4testv+91>
* callq 0x400b10 <_ZdlPv@plt>
* mov 0xc8(%rsp),%rbx
* mov %rbx,%rdi
* callq 0x4015e0
* <_ZN5fruit4impl15InjectorStorage3getIiEENS0_4meta6DoEvalIFNS3_17RemoveAnnotationsENS3_4TypeIT_EEEE4type4typeEv>
* mov %eax,%ebp
* test %rbx,%rbx
* je 0x400f42 <_Z4testv+130>
* mov %rbx,%rdi
* callq 0x401230 <_ZN5fruit4impl15InjectorStorageD2Ev>
* mov %rbx,%rdi
* callq 0x400b10 <_ZdlPv@plt>
* mov %ebp,%eax
* add $0xd0,%rsp
* pop %rbx
* pop %r14
* pop %rbp
* retq
* mov %rax,%r14
* mov 0xb0(%rsp),%rdi
* test %rdi,%rdi
* je 0x400f65 <_Z4testv+165>
* callq 0x400b10 <_ZdlPv@plt>
* mov 0x98(%rsp),%rdi
* test %rdi,%rdi
* je 0x400f77 <_Z4testv+183>
* callq 0x400b10 <_ZdlPv@plt>
* mov 0x50(%rsp),%rdi
* test %rdi,%rdi
* je 0x400fb2 <_Z4testv+242>
* callq 0x400b10 <_ZdlPv@plt>
* mov %r14,%rdi
* callq 0x400bb0 <_Unwind_Resume@plt>
* mov %rax,%r14
* test %rbx,%rbx
* je 0x400fa6 <_Z4testv+230>
* mov %rbx,%rdi
* callq 0x401230 <_ZN5fruit4impl15InjectorStorageD2Ev>
* mov %rbx,%rdi
* callq 0x400b10 <_ZdlPv@plt>
* movq $0x0,0xc8(%rsp)
* mov %r14,%rdi
* callq 0x400bb0 <_Unwind_Resume@plt>
*/
//->
================================================
FILE: benchmark/bind_value/guice.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import com.google.inject.*;
class Module extends AbstractModule {
@Override
protected void configure() {
bind(int.class).toInstance(42);
}
}
public class guice {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new Module());
injector.getInstance(int.class);
}
}
================================================
FILE: benchmark/bind_value/ninject.cs
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using Ninject;
class Module : Ninject.Modules.NinjectModule {
public override void Load() {
Bind().To(42);
}
}
class ninject {
static void Main(string[] args) {
Ninject.IKernel kernel = new StandardKernel(new Module());
kernel.Get();
}
}
================================================
FILE: benchmark/create_complex/dagger2.java
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
import javax.inject.Inject;
import dagger.*;
class X00 { @Inject X00() { } }
class X01 { @Inject X01(X00 p1) { } }
class X02 { @Inject X02(X00 p1, X01 p2) { } }
class X03 { @Inject X03(X00 p1, X01 p2, X02 p3) { } }
class X04 { @Inject X04(X00 p1, X01 p2, X02 p3, X03 p4) { } }
class X05 { @Inject X05(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5) { } }
class X06 { @Inject X06(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6) { } }
class X07 { @Inject X07(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6, X06 p7) { } }
class X08 { @Inject X08(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6, X06 p7, X07 p8) { } }
class X09 { @Inject X09(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6, X06 p7, X07 p8, X08 p9) { } }
class X10 { @Inject X10(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6, X06 p7, X07 p8, X08 p9, X09 p10) { } }
class X11 { @Inject X11(X01 p1, X02 p2, X03 p3, X04 p4, X05 p5, X06 p6, X07 p7, X08 p8, X09 p9, X10 p10) { } }
class X12 { @Inject X12(X02 p1, X03 p2, X04 p3, X05 p4, X06 p5, X07 p6, X08 p7, X09 p8, X10 p9, X11 p10) { } }
class X13 { @Inject X13(X03 p1, X04 p2, X05 p3, X06 p4, X07 p5, X08 p6, X09 p7, X10 p8, X11 p9, X12 p10) { } }
class X14 { @Inject X14(X04 p1, X05 p2, X06 p3, X07 p4, X08 p5, X09 p6, X10 p7, X11 p8, X12 p9, X13 p10) { } }
class X15 { @Inject X15(X05 p1, X06 p2, X07 p3, X08 p4, X09 p5, X10 p6, X11 p7, X12 p8, X13 p9, X14 p10) { } }
class X16 { @Inject X16(X06 p1, X07 p2, X08 p3, X09 p4, X10 p5, X11 p6, X12 p7, X13 p8, X14 p9, X15 p10) { } }
class X17 { @Inject X17(X07 p1, X08 p2, X09 p3, X10 p4, X11 p5, X12 p6, X13 p7, X14 p8, X15 p9, X16 p10) { } }
class X18 { @Inject X18(X08 p1, X09 p2, X10 p3, X11 p4, X12 p5, X13 p6, X14 p7, X15 p8, X16 p9, X17 p10) { } }
class X19 { @Inject X19(X09 p1, X10 p2, X11 p3, X12 p4, X13 p5, X14 p6, X15 p7, X16 p8, X17 p9, X18 p10) { } }
class X20 { @Inject X20(X10 p1, X11 p2, X12 p3, X13 p4, X14 p5, X15 p6, X16 p7, X17 p8, X18 p9, X19 p10) { } }
class X21 { @Inject X21(X11 p1, X12 p2, X13 p3, X14 p4, X15 p5, X16 p6, X17 p7, X18 p8, X19 p9, X20 p10) { } }
class X22 { @Inject X22(X12 p1, X13 p2, X14 p3, X15 p4, X16 p5, X17 p6, X18 p7, X19 p8, X20 p9, X21 p10) { } }
class X23 { @Inject X23(X13 p1, X14 p2, X15 p3, X16 p4, X17 p5, X18 p6, X19 p7, X20 p8, X21 p9, X22 p10) { } }
class X24 { @Inject X24(X14 p1, X15 p2, X16 p3, X17 p4, X18 p5, X19 p6, X20 p7, X21 p8, X22 p9, X23 p10) { } }
class X25 { @Inject X25(X15 p1, X16 p2, X17 p3, X18 p4, X19 p5, X20 p6, X21 p7, X22 p8, X23 p9, X24 p10) { } }
class X26 { @Inject X26(X16 p1, X17 p2, X18 p3, X19 p4, X20 p5, X21 p6, X22 p7, X23 p8, X24 p9, X25 p10) { } }
class X27 { @Inject X27(X17 p1, X18 p2, X19 p3, X20 p4, X21 p5, X22 p6, X23 p7, X24 p8, X25 p9, X26 p10) { } }
class X28 { @Inject X28(X18 p1, X19 p2, X20 p3, X21 p4, X22 p5, X23 p6, X24 p7, X25 p8, X26 p9, X27 p10) { } }
class X29 { @Inject X29(X19 p1, X20 p2, X21 p3, X22 p4, X23 p5, X24 p6, X25 p7, X26 p8, X27 p9, X28 p10) { } }
class X30 { @Inject X30(X20 p1, X21 p2, X22 p3, X23 p4, X24 p5, X25 p6, X26 p7, X27 p8, X28 p9, X29 p10) { } }
class X31 { @Inject X31(X21 p1, X22 p2, X23 p3, X24 p4, X25 p5, X26 p6, X27 p7, X28 p8, X29 p9, X30 p10) { } }
class X32 { @Inject X32(X22 p1, X23 p2, X24 p3, X25 p4, X26 p5, X27 p6, X28 p7, X29 p8, X30 p9, X31 p10) { } }
class X33 { @Inject X33(X23 p1, X24 p2, X25 p3, X26 p4, X27 p5, X28 p6, X29 p7, X30 p8, X31 p9, X32 p10) { } }
class X34 { @Inject X34(X24 p1, X25 p2, X26 p3, X27 p4, X28 p5, X29 p6, X30 p7, X31 p8, X32 p9, X33 p10) { } }
class X35 { @Inject X35(X25 p1, X26 p2, X27 p3, X28 p4, X29 p5, X30 p6, X31 p7, X32 p8, X33 p9, X34 p10) { } }
class X36 { @Inject X36(X26 p1, X27 p2, X28 p3, X29 p4, X30 p5, X31 p6, X32 p7, X33 p8, X34 p9, X35 p10) { } }
class X37 { @Inject X37(X27 p1, X28 p2, X29 p3, X30 p4, X31 p5, X32 p6, X33 p7, X34 p8, X35 p9, X36 p10) { } }
class X38 { @Inject X38(X28 p1, X29 p2, X30 p3, X31 p4, X32 p5, X33 p6, X34 p7, X35 p8, X36 p9, X37 p10) { } }
class X39 { @Inject X39(X29 p1, X30 p2, X31 p3, X32 p4, X33 p5, X34 p6, X35 p7, X36 p8, X37 p9, X38 p10) { } }
class X40 { @Inject X40(X30 p1, X31 p2, X32 p3, X33 p4, X34 p5, X35 p6, X36 p7, X37 p8, X38 p9, X39 p10) { } }
class X41 { @Inject X41(X31 p1, X32 p2, X33 p3, X34 p4, X35 p5, X36 p6, X37 p7, X38 p8, X39 p9, X40 p10) { } }
class X42 { @Inject X42(X32 p1, X33 p2, X34 p3, X35 p4, X36 p5, X37 p6, X38 p7, X39 p8, X40 p9, X41 p10) { } }
class X43 { @Inject X43(X33 p1, X34 p2, X35 p3, X36 p4, X37 p5, X38 p6, X39 p7, X40 p8, X41 p9, X42 p10) { } }
class X44 { @Inject X44(X34 p1, X35 p2, X36 p3, X37 p4, X38 p5, X39 p6, X40 p7, X41 p8, X42 p9, X43 p10) { } }
class X45 { @Inject X45(X35 p1, X36 p2, X37 p3, X38 p4, X39 p5, X40 p6, X41 p7, X42 p8, X43 p9, X44 p10) { } }
class X46 { @Inject X46(X36 p1, X37 p2, X38 p3, X39 p4, X40 p5, X41 p6, X42 p7, X43 p8, X44 p9, X45 p10) { } }
class X47 { @Inject X47(X37 p1, X38 p2, X39 p3, X40 p4, X41 p5, X42 p6, X43 p7, X44 p8, X45 p9, X46 p10) { } }
class X48 { @Inject X48(X38 p1, X39 p2, X40 p3, X41 p4, X42 p5, X43 p6, X44 p7, X45 p8, X46 p9, X47 p10) { } }
class X49 { @Inject X49(X39 p1, X40 p2, X41 p3, X42 p4, X43 p5, X44 p6, X45 p7, X46 p8, X47 p9, X48 p10) { } }
class X50 { @Inject X50(X40 p1, X41 p2, X42 p3, X43 p4, X44 p5, X45 p6, X46 p7, X47 p8, X48 p9, X49 p10) { } }
class X51 { @Inject X51(X41 p1, X42 p2, X43 p3, X44 p4, X45 p5, X46 p6, X47 p7, X48 p8, X49 p9, X50 p10) { } }
class X52 { @Inject X52(X42 p1, X43 p2, X44 p3, X45 p4, X46 p5, X47 p6, X48 p7, X49 p8, X50 p9, X51 p10) { } }
class X53 { @Inject X53(X43 p1, X44 p2, X45 p3, X46 p4, X47 p5, X48 p6, X49 p7, X50 p8, X51 p9, X52 p10) { } }
class X54 { @Inject X54(X44 p1, X45 p2, X46 p3, X47 p4, X48 p5, X49 p6, X50 p7, X51 p8, X52 p9, X53 p10) { } }
class X55 { @Inject X55(X45 p1, X46 p2, X47 p3, X48 p4, X49 p5, X50 p6, X51 p7, X52 p8, X53 p9, X54 p10) { } }
class X56 { @Inject X56(X46 p1, X47 p2, X48 p3, X49 p4, X50 p5, X51 p6, X52 p7, X53 p8, X54 p9, X55 p10) { } }
class X57 { @Inject X57(X47 p1, X48 p2, X49 p3, X50 p4, X51 p5, X52 p6, X53 p7, X54 p8, X55 p9, X56 p10) { } }
class X58 { @Inject X58(X48 p1, X49 p2, X50 p3, X51 p4, X52 p5, X53 p6, X54 p7, X55 p8, X56 p9, X57 p10) { } }
class X59 { @Inject X59(X49 p1, X50 p2, X51 p3, X52 p4, X53 p5, X54 p6, X55 p7, X56 p8, X57 p9, X58 p10) { } }
class X60 { @Inject X60(X50 p1, X51 p2, X52 p3, X53 p4, X54 p5, X55 p6, X56 p7, X57 p8, X58 p9, X59 p10) { } }
class X61 { @Inject X61(X51 p1, X52 p2, X53 p3, X54 p4, X55 p5, X56 p6, X57 p7, X58 p8, X59 p9, X60 p10) { } }
class X62 { @Inject X62(X52 p1, X53 p2, X54 p3, X55 p4, X56 p5, X57 p6, X58 p7, X59 p8, X60 p9, X61 p10) { } }
class X63 { @Inject X63(X53 p1, X54 p2, X55 p3, X56 p4, X57 p5, X58 p6, X59 p7, X60 p8, X61 p9, X62 p10) { } }
class X64 { @Inject X64(X54 p1, X55 p2, X56 p3, X57 p4, X58 p5, X59 p6, X60 p7, X61 p8, X62 p9, X63 p10) { } }
class X65 { @Inject X65(X55 p1, X56 p2, X57 p3, X58 p4, X59 p5, X60 p6, X61 p7, X62 p8, X63 p9, X64 p10) { } }
class X66 { @Inject X66(X56 p1, X57 p2, X58 p3, X59 p4, X60 p5, X61 p6, X62 p7, X63 p8, X64 p9, X65 p10) { } }
class X67 { @Inject X67(X57 p1, X58 p2, X59 p3, X60 p4, X61 p5, X62 p6, X63 p7, X64 p8, X65 p9, X66 p10) { } }
class X68 { @Inject X68(X58 p1, X59 p2, X60 p3, X61 p4, X62 p5, X63 p6, X64 p7, X65 p8, X66 p9, X67 p10) { } }
class X69 { @Inject X69(X59 p1, X60 p2, X61 p3, X62 p4, X63 p5, X64 p6, X65 p7, X66 p8, X67 p9, X68 p10) { } }
class X70 { @Inject X70(X60 p1, X61 p2, X62 p3, X63 p4, X64 p5, X65 p6, X66 p7, X67 p8, X68 p9, X69 p10) { } }
class X71 { @Inject X71(X61 p1, X62 p2, X63 p3, X64 p4, X65 p5, X66 p6, X67 p7, X68 p8, X69 p9, X70 p10) { } }
class X72 { @Inject X72(X62 p1, X63 p2, X64 p3, X65 p4, X66 p5, X67 p6, X68 p7, X69 p8, X70 p9, X71 p10) { } }
class X73 { @Inject X73(X63 p1, X64 p2, X65 p3, X66 p4, X67 p5, X68 p6, X69 p7, X70 p8, X71 p9, X72 p10) { } }
class X74 { @Inject X74(X64 p1, X65 p2, X66 p3, X67 p4, X68 p5, X69 p6, X70 p7, X71 p8, X72 p9, X73 p10) { } }
class X75 { @Inject X75(X65 p1, X66 p2, X67 p3, X68 p4, X69 p5, X70 p6, X71 p7, X72 p8, X73 p9, X74 p10) { } }
class X76 { @Inject X76(X66 p1, X67 p2, X68 p3, X69 p4, X70 p5, X71 p6, X72 p7, X73 p8, X74 p9, X75 p10) { } }
class X77 { @Inject X77(X67 p1, X68 p2, X69 p3, X70 p4, X71 p5, X72 p6, X73 p7, X74 p8, X75 p9, X76 p10) { } }
class X78 { @Inject X78(X68 p1, X69 p2, X70 p3, X71 p4, X72 p5, X73 p6, X74 p7, X75 p8, X76 p9, X77 p10) { } }
class X79 { @Inject X79(X69 p1, X70 p2, X71 p3, X72 p4, X73 p5, X74 p6, X75 p7, X76 p8, X77 p9, X78 p10) { } }
class X80 { @Inject X80(X70 p1, X71 p2, X72 p3, X73 p4, X74 p5, X75 p6, X76 p7, X77 p8, X78 p9, X79 p10) { } }
class X81 { @Inject X81(X71 p1, X72 p2, X73 p3, X74 p4, X75 p5, X76 p6, X77 p7, X78 p8, X79 p9, X80 p10) { } }
class X82 { @Inject X82(X72 p1, X73 p2, X74 p3, X75 p4, X76 p5, X77 p6, X78 p7, X79 p8, X80 p9, X81 p10) { } }
class X83 { @Inject X83(X73 p1, X74 p2, X75 p3, X76 p4, X77 p5, X78 p6, X79 p7, X80 p8, X81 p9, X82 p10) { } }
class X84 { @Inject X84(X74 p1, X75 p2, X76 p3, X77 p4, X78 p5, X79 p6, X80 p7, X81 p8, X82 p9, X83 p10) { } }
class X85 { @Inject X85(X75 p1, X76 p2, X77 p3, X78 p4, X79 p5, X80 p6, X81 p7, X82 p8, X83 p9, X84 p10) { } }
class X86 { @Inject X86(X76 p1, X77 p2, X78 p3, X79 p4, X80 p5, X81 p6, X82 p7, X83 p8, X84 p9, X85 p10) { } }
class X87 { @Inject X87(X77 p1, X78 p2, X79 p3, X80 p4, X81 p5, X82 p6, X83 p7, X84 p8, X85 p9, X86 p10) { } }
class X88 { @Inject X88(X78 p1, X79 p2, X80 p3, X81 p4, X82 p5, X83 p6, X84 p7, X85 p8, X86 p9, X87 p10) { } }
class X89 { @Inject X89(X79 p1, X80 p2, X81 p3, X82 p4, X83 p5, X84 p6, X85 p7, X86 p8, X87 p9, X88 p10) { } }
class X90 { @Inject X90(X80 p1, X81 p2, X82 p3, X83 p4, X84 p5, X85 p6, X86 p7, X87 p8, X88 p9, X89 p10) { } }
class X91 { @Inject X91(X81 p1, X82 p2, X83 p3, X84 p4, X85 p5, X86 p6, X87 p7, X88 p8, X89 p9, X90 p10) { } }
class X92 { @Inject X92(X82 p1, X83 p2, X84 p3, X85 p4, X86 p5, X87 p6, X88 p7, X89 p8, X90 p9, X91 p10) { } }
class X93 { @Inject X93(X83 p1, X84 p2, X85 p3, X86 p4, X87 p5, X88 p6, X89 p7, X90 p8, X91 p9, X92 p10) { } }
class X94 { @Inject X94(X84 p1, X85 p2, X86 p3, X87 p4, X88 p5, X89 p6, X90 p7, X91 p8, X92 p9, X93 p10) { } }
class X95 { @Inject X95(X85 p1, X86 p2, X87 p3, X88 p4, X89 p5, X90 p6, X91 p7, X92 p8, X93 p9, X94 p10) { } }
class X96 { @Inject X96(X86 p1, X87 p2, X88 p3, X89 p4, X90 p5, X91 p6, X92 p7, X93 p8, X94 p9, X95 p10) { } }
class X97 { @Inject X97(X87 p1, X88 p2, X89 p3, X90 p4, X91 p5, X92 p6, X93 p7, X94 p8, X95 p9, X96 p10) { } }
class X98 { @Inject X98(X88 p1, X89 p2, X90 p3, X91 p4, X92 p5, X93 p6, X94 p7, X95 p8, X96 p9, X97 p10) { } }
class X99 { @Inject X99(X89 p1, X90 p2, X91 p3, X92 p4, X93 p5, X94 p6, X95 p7, X96 p8, X97 p9, X98 p10) { } }
interface I00 { public void dummy(); }; class Impl00 implements I00 { @Inject Impl00(X00 p1, X01 p2, X02 p3, X03 p4, X04 p5, X05 p6, X06 p7, X07 p8, X08 p9, X09 p10) { } @Override public void dummy() { } }
interface I01 { public void dummy(); }; class Impl01 implements I01 { @Inject Impl01(X01 p1, X02 p2, X03 p3, X04 p4, X05 p5, X06 p6, X07 p7, X08 p8, X09 p9, X10 p10) { } @Override public void dummy() { } }
interface I02 { public void dummy(); }; class Impl02 implements I02 { @Inject Impl02(X02 p1, X03 p2, X04 p3, X05 p4, X06 p5, X07 p6, X08 p7, X09 p8, X10 p9, X11 p10) { } @Override public void dummy() { } }
interface I03 { public void dummy(); }; class Impl03 implements I03 { @Inject Impl03(X03 p1, X04 p2, X05 p3, X06 p4, X07 p5, X08 p6, X09 p7, X10 p8, X11 p9, X12 p10) { } @Override public void dummy() { } }
interface I04 { public void dummy(); }; class Impl04 implements I04 { @Inject Impl04(X04 p1, X05 p2, X06 p3, X07 p4, X08 p5, X09 p6, X10 p7, X11 p8, X12 p9, X13 p10) { } @Override public void dummy() { } }
interface I05 { public void dummy(); }; class Impl05 implements I05 { @Inject Impl05(X05 p1, X06 p2, X07 p3, X08 p4, X09 p5, X10 p6, X11 p7, X12 p8, X13 p9, X14 p10) { } @Override public void dummy() { } }
interface I06 { public void dummy(); }; class Impl06 implements I06 { @Inject Impl06(X06 p1, X07 p2, X08 p3, X09 p4, X10 p5, X11 p6, X12 p7, X13 p8, X14 p9, X15 p10) { } @Override public void dummy() { } }
interface I07 { public void dummy(); }; class Impl07 implements I07 { @Inject Impl07(X07 p1, X08 p2, X09 p3, X10 p4, X11 p5, X12 p6, X13 p7, X14 p8, X15 p9, X16 p10) { } @Override public void dummy() { } }
interface I08 { public void dummy(); }; class Impl08 implements I08 { @Inject Impl08(X08 p1, X09 p2, X10 p3, X11 p4, X12 p5, X13 p6, X14 p7, X15 p8, X16 p9, X17 p10) { } @Override public void dummy() { } }
interface I09 { public void dummy(); }; class Impl09 implements I09 { @Inject Impl09(X09 p1, X10 p2, X11 p3, X12 p4, X13 p5, X14 p6, X15 p7, X16 p8, X17 p9, X18 p10) { } @Override public void dummy() { } }
interface I10 { public void dummy(); }; class Impl10 implements I10 { @Inject Impl10(X10 p1, X11 p2, X12 p3, X13 p4, X14 p5, X15 p6, X16 p7, X17 p8, X18 p9, X19 p10) { } @Override public void dummy() { } }
interface I11 { public void dummy(); }; class Impl11 implements I11 { @Inject Impl11(X11 p1, X12 p2, X13 p3, X14 p4, X15 p5, X16 p6, X17 p7, X18 p8, X19 p9, X20 p10) { } @Override public void dummy() { } }
interface I12 { public void dummy(); }; class Impl12 implements I12 { @Inject Impl12(X12 p1, X13 p2, X14 p3, X15 p4, X16 p5, X17 p6, X18 p7, X19 p8, X20 p9, X21 p10) { } @Override public void dummy() { } }
interface I13 { public void dummy(); }; class Impl13 implements I13 { @Inject Impl13(X13 p1, X14 p2, X15 p3, X16 p4, X17 p5, X18 p6, X19 p7, X20 p8, X21 p9, X22 p10) { } @Override public void dummy() { } }
interface I14 { public void dummy(); }; class Impl14 implements I14 { @Inject Impl14(X14 p1, X15 p2, X16 p3, X17 p4, X18 p5, X19 p6, X20 p7, X21 p8, X22 p9, X23 p10) { } @Override public void dummy() { } }
interface I15 { public void dummy(); }; class Impl15 implements I15 { @Inject Impl15(X15 p1, X16 p2, X17 p3, X18 p4, X19 p5, X20 p6, X21 p7, X22 p8, X23 p9, X24 p10) { } @Override public void dummy() { } }
interface I16 { public void dummy(); }; class Impl16 implements I16 { @Inject Impl16(X16 p1, X17 p2, X18 p3, X19 p4, X20 p5, X21 p6, X22 p7, X23 p8, X24 p9, X25 p10) { } @Override public void dummy() { } }
interface I17 { public void dummy(); }; class Impl17 implements I17 { @Inject Impl17(X17 p1, X18 p2, X19 p3, X20 p4, X21 p5, X22 p6, X23 p7, X24 p8, X25 p9, X26 p10) { } @Override public void dummy() { } }
interface I18 { public void dummy(); }; class Impl18 implements I18 { @Inject Impl18(X18 p1, X19 p2, X20 p3, X21 p4, X22 p5, X23 p6, X24 p7, X25 p8, X26 p9, X27 p10) { } @Override public void dummy() { } }
interface I19 { public void dummy(); }; class Impl19 implements I19 { @Inject Impl19(X19 p1, X20 p2, X21 p3, X22 p4, X23 p5, X24 p6, X25 p7, X26 p8, X27 p9, X28 p10) { } @Override public void dummy() { } }
interface I20 { public void dummy(); }; class Impl20 implements I20 { @Inject Impl20(X20 p1, X21 p2, X22 p3, X23 p4, X24 p5, X25 p6, X26 p7, X27 p8, X28 p9, X29 p10) { } @Override public void dummy() { } }
interface I21 { public void dummy(); }; class Impl21 implements I21 { @Inject Impl21(X21 p1, X22 p2, X23 p3, X24 p4, X25 p5, X26 p6, X27 p7, X28 p8, X29 p9, X30 p10) { } @Override public void dummy() { } }
interface I22 { public void dummy(); }; class Impl22 implements I22 { @Inject Impl22(X22 p1, X23 p2, X24 p3, X25 p4, X26 p5, X27 p6, X28 p7, X29 p8, X30 p9, X31 p10) { } @Override public void dummy() { } }
interface I23 { public void dummy(); }; class Impl23 implements I23 { @Inject Impl23(X23 p1, X24 p2, X25 p3, X26 p4, X27 p5, X28 p6, X29 p7, X30 p8, X31 p9, X32 p10) { } @Override public void dummy() { } }
interface I24 { public void dummy(); }; class Impl24 implements I24 { @Inject Impl24(X24 p1, X25 p2, X26 p3, X27 p4, X28 p5, X29 p6, X30 p7, X31 p8, X32 p9, X33 p10) { } @Override public void dummy() { } }
interface I25 { public void dummy(); }; class Impl25 implements I25 { @Inject Impl25(X25 p1, X26 p2, X27 p3, X28 p4, X29 p5, X30 p6, X31 p7, X32 p8, X33 p9, X34 p10) { } @Override public void dummy() { } }
interface I26 { public void dummy(); }; class Impl26 implements I26 { @Inject Impl26(X26 p1, X27 p2, X28 p3, X29 p4, X30 p5, X31 p6, X32 p7, X33 p8, X34 p9, X35 p10) { } @Override public void dummy() { } }
interface I27 { public void dummy(); }; class Impl27 implements I27 { @Inject Impl27(X27 p1, X28 p2, X29 p3, X30 p4, X31 p5, X32 p6, X33 p7, X34 p8, X35 p9, X36 p10) { } @Override public void dummy() { } }
interface I28 { public void dummy(); }; class Impl28 implements I28 { @Inject Impl28(X28 p1, X29 p2, X30 p3, X31 p4, X32 p5, X33 p6, X34 p7, X35 p8, X36 p9, X37 p10) { } @Override public void dummy() { } }
interface I29 { public void dummy(); }; class Impl29 implements I29 { @Inject Impl29(X29 p1, X30 p2, X31 p3, X32 p4, X33 p5, X34 p6, X35 p7, X36 p8, X37 p9, X38 p10) { } @Override public void dummy() { } }
interface I30 { public void dummy(); }; class Impl30 implements I30 { @Inject Impl30(X30 p1, X31 p2, X32 p3, X33 p4, X34 p5, X35 p6, X36 p7, X37 p8, X38 p9, X39 p10) { } @Override public void dummy() { } }
interface I31 { public void dummy(); }; class Impl31 implements I31 { @Inject Impl31(X31 p1, X32 p2, X33 p3, X34 p4, X35 p5, X36 p6, X37 p7, X38 p8, X39 p9, X40 p10) { } @Override public void dummy() { } }
interface I32 { public void dummy(); }; class Impl32 implements I32 { @Inject Impl32(X32 p1, X33 p2, X34 p3, X35 p4, X36 p5, X37 p6, X38 p7, X39 p8, X40 p9, X41 p10) { } @Override public void dummy() { } }
interface I33 { public void dummy(); }; class Impl33 implements I33 { @Inject Impl33(X33 p1, X34 p2, X35 p3, X36 p4, X37 p5, X38 p6, X39 p7, X40 p8, X41 p9, X42 p10) { } @Override public void dummy() { } }
interface I34 { public void dummy(); }; class Impl34 implements I34 { @Inject Impl34(X34 p1, X35 p2, X36 p3, X37 p4, X38 p5, X39 p6, X40 p7, X41 p8, X42 p9, X43 p10) { } @Override public void dummy() { } }
interface I35 { public void dummy(); }; class Impl35 implements I35 { @Inject Impl35(X35 p1, X36 p2, X37 p3, X38 p4, X39 p5, X40 p6, X41 p7, X42 p8, X43 p9, X44 p10) { } @Override public void dummy() { } }
interface I36 { public void dummy(); }; class Impl36 implements I36 { @Inject Impl36(X36 p1, X37 p2, X38 p3, X39 p4, X40 p5, X41 p6, X42 p7, X43 p8, X44 p9, X45 p10) { } @Override public void dummy() { } }
interface I37 { public void dummy(); }; class Impl37 implements I37 { @Inject Impl37(X37 p1, X38 p2, X39 p3, X40 p4, X41 p5, X42 p6, X43 p7, X44 p8, X45 p9, X46 p10) { } @Override public void dummy() { } }
interface I38 { public void dummy(); }; class Impl38 implements I38 { @Inject Impl38(X38 p1, X39 p2, X40 p3, X41 p4, X42 p5, X43 p6, X44 p7, X45 p8, X46 p9, X47 p10) { } @Override public void dummy() { } }
interface I39 { public void dummy(); }; class Impl39 implements I39 { @Inject Impl39(X39 p1, X40 p2, X41 p3, X42 p4, X43 p5, X44 p6, X45 p7, X46 p8, X47 p9, X48 p10) { } @Override public void dummy() { } }
interface I40 { public void dummy(); }; class Impl40 implements I40 { @Inject Impl40(X40 p1, X41 p2, X42 p3, X43 p4, X44 p5, X45 p6, X46 p7, X47 p8, X48 p9, X49 p10) { } @Override public void dummy() { } }
interface I41 { public void dummy(); }; class Impl41 implements I41 { @Inject Impl41(X41 p1, X42 p2, X43 p3, X44 p4, X45 p5, X46 p6, X47 p7, X48 p8, X49 p9, X50 p10) { } @Override public void dummy() { } }
interface I42 { public void dummy(); }; class Impl42 implements I42 { @Inject Impl42(X42 p1, X43 p2, X44 p3, X45 p4, X46 p5, X47 p6, X48 p7, X49 p8, X50 p9, X51 p10) { } @Override public void dummy() { } }
interface I43 { public void dummy(); }; class Impl43 implements I43 { @Inject Impl43(X43 p1, X44 p2, X45 p3, X46 p4, X47 p5, X48 p6, X49 p7, X50 p8, X51 p9, X52 p10) { } @Override public void dummy() { } }
interface I44 { public void dummy(); }; class Impl44 implements I44 { @Inject Impl44(X44 p1, X45 p2, X46 p3, X47 p4, X48 p5, X49 p6, X50 p7, X51 p8, X52 p9, X53 p10) { } @Override public void dummy() { } }
interface I45 { public void dummy(); }; class Impl45 implements I45 { @Inject Impl45(X45 p1, X46 p2, X47 p3, X48 p4, X49 p5, X50 p6, X51 p7, X52 p8, X53 p9, X54 p10) { } @Override public void dummy() { } }
interface I46 { public void dummy(); }; class Impl46 implements I46 { @Inject Impl46(X46 p1, X47 p2, X48 p3, X49 p4, X50 p5, X51 p6, X52 p7, X53 p8, X54 p9, X55 p10) { } @Override public void dummy() { } }
interface I47 { public void dummy(); }; class Impl47 implements I47 { @Inject Impl47(X47 p1, X48 p2, X49 p3, X50 p4, X51 p5, X52 p6, X53 p7, X54 p8, X55 p9, X56 p10) { } @Override public void dummy() { } }
interface I48 { public void dummy(); }; class Impl48 implements I48 { @Inject Impl48(X48 p1, X49 p2, X50 p3, X51 p4, X52 p5, X53 p6, X54 p7, X55 p8, X56 p9, X57 p10) { } @Override public void dummy() { } }
interface I49 { public void dummy(); }; class Impl49 implements I49 { @Inject Impl49(X49 p1, X50 p2, X51 p3, X52 p4, X53 p5, X54 p6, X55 p7, X56 p8, X57 p9, X58 p10) { } @Override public void dummy() { } }
interface I50 { public void dummy(); }; class Impl50 implements I50 { @Inject Impl50(X50 p1, X51 p2, X52 p3, X53 p4, X54 p5, X55 p6, X56 p7, X57 p8, X58 p9, X59 p10) { } @Override public void dummy() { } }
interface I51 { public void dummy(); }; class Impl51 implements I51 { @Inject Impl51(X51 p1, X52 p2, X53 p3, X54 p4, X55 p5, X56 p6, X57 p7, X58 p8, X59 p9, X60 p10) { } @Override public void dummy() { } }
interface I52 { public void dummy(); }; class Impl52 implements I52 { @Inject Impl52(X52 p1, X53 p2, X54 p3, X55 p4, X56 p5, X57 p6, X58 p7, X59 p8, X60 p9, X61 p10) { } @Override public void dummy() { } }
interface I53 { public void dummy(); }; class Impl53 implements I53 { @Inject Impl53(X53 p1, X54 p2, X55 p3, X56 p4, X57 p5, X58 p6, X59 p7, X60 p8, X61 p9, X62 p10) { } @Override public void dummy() { } }
interface I54 { public void dummy(); }; class Impl54 implements I54 { @Inject Impl54(X54 p1, X55 p2, X56 p3, X57 p4, X58 p5, X59 p6, X60 p7, X61 p8, X62 p9, X63 p10) { } @Override public void dummy() { } }
interface I55 { public void dummy(); }; class Impl55 implements I55 { @Inject Impl55(X55 p1, X56 p2, X57 p3, X58 p4, X59 p5, X60 p6, X61 p7, X62 p8, X63 p9, X64 p10) { } @Override public void dummy() { } }
interface I56 { public void dummy(); }; class Impl56 implements I56 { @Inject Impl56(X56 p1, X57 p2, X58 p3, X59 p4, X60 p5, X61 p6, X62 p7, X63 p8, X64 p9, X65 p10) { } @Override public void dummy() { } }
interface I57 { public void dummy(); }; class Impl57 implements I57 { @Inject Impl57(X57 p1, X58 p2, X59 p3, X60 p4, X61 p5, X62 p6, X63 p7, X64 p8, X65 p9, X66 p10) { } @Override public void dummy() { } }
interface I58 { public void dummy(); }; class Impl58 implements I58 { @Inject Impl58(X58 p1, X59 p2, X60 p3, X61 p4, X62 p5, X63 p6, X64 p7, X65 p8, X66 p9, X67 p10) { } @Override public void dummy() { } }
interface I59 { public void dummy(); }; class Impl59 implements I59 { @Inject Impl59(X59 p1, X60 p2, X61 p3, X62 p4, X63 p5, X64 p6, X65 p7, X66 p8, X67 p9, X68 p10) { } @Override public void dummy() { } }
interface I60 { public void dummy(); }; class Impl60 implements I60 { @Inject Impl60(X60 p1, X61 p2, X62 p3, X63 p4, X64 p5, X65 p6, X66 p7, X67 p8, X68 p9, X69 p10) { } @Override public void dummy() { } }
interface I61 { public void dummy(); }; class Impl61 implements I61 { @Inject Impl61(X61 p1, X62 p2, X63 p3, X64 p4, X65 p5, X66 p6, X67 p7, X68 p8, X69 p9, X70 p10) { } @Override public void dummy() { } }
interface I62 { public void dummy(); }; class Impl62 implements I62 { @Inject Impl62(X62 p1, X63 p2, X64 p3, X65 p4, X66 p5, X67 p6, X68 p7, X69 p8, X70 p9, X71 p10) { } @Override public void dummy() { } }
interface I63 { public void dummy(); }; class Impl63 implements I63 { @Inject Impl63(X63 p1, X64 p2, X65 p3, X66 p4, X67 p5, X68 p6, X69 p7, X70 p8, X71 p9, X72 p10) { } @Override public void dummy() { } }
interface I64 { public void dummy(); }; class Impl64 implements I64 { @Inject Impl64(X64 p1, X65 p2, X66 p3, X67 p4, X68 p5, X69 p6, X70 p7, X71 p8, X72 p9, X73 p10) { } @Override public void dummy() { } }
interface I65 { public void dummy(); }; class Impl65 implements I65 { @Inject Impl65(X65 p1, X66 p2, X67 p3, X68 p4, X69 p5, X70 p6, X71 p7, X72 p8, X73 p9, X74 p10) { } @Override public void dummy() { } }
interface I66 { public void dummy(); }; class Impl66 implements I66 { @Inject Impl66(X66 p1, X67 p2, X68 p3, X69 p4, X70 p5, X71 p6, X72 p7, X73 p8, X74 p9, X75 p10) { } @Override public void dummy() { } }
interface I67 { public void dummy(); }; class Impl67 implements I67 { @Inject Impl67(X67 p1, X68 p2, X69 p3, X70 p4, X71 p5, X72 p6, X73 p7, X74 p8, X75 p9, X76 p10) { } @Override public void dummy() { } }
interface I68 { public void dummy(); }; class Impl68 implements I68 { @Inject Impl68(X68 p1, X69 p2, X70 p3, X71 p4, X72 p5, X73 p6, X74 p7, X75 p8, X76 p9, X77 p10) { } @Override public void dummy() { } }
interface I69 { public void dummy(); }; class Impl69 implements I69 { @Inject Impl69(X69 p1, X70 p2, X71 p3, X72 p4, X73 p5, X74 p6, X75 p7, X76 p8, X77 p9, X78 p10) { } @Override public void dummy() { } }
interface I70 { public void dummy(); }; class Impl70 implements I70 { @Inject Impl70(X70 p1, X71 p2, X72 p3, X73 p4, X74 p5, X75 p6, X76 p7, X77 p8, X78 p9, X79 p10) { } @Override public void dummy() { } }
interface I71 { public void dummy(); }; class Impl71 implements I71 { @Inject Impl71(X71 p1, X72 p2, X73 p3, X74 p4, X75 p5, X76 p6, X77 p7, X78 p8, X79 p9, X80 p10) { } @Override public void dummy() { } }
interface I72 { public void dummy(); }; class Impl72 implements I72 { @Inject Impl72(X72 p1, X73 p2, X74 p3, X75 p4, X76 p5, X77 p6, X78 p7, X79 p8, X80 p9, X81 p10) { } @Override public void dummy() { } }
interface I73 { public void dummy(); }; class Impl73 implements I73 { @Inject Impl73(X73 p1, X74 p2, X75 p3, X76 p4, X77 p5, X78 p6, X79 p7, X80 p8, X81 p9, X82 p10) { } @Override public void dummy() { } }
interface I74 { public void dummy(); }; class Impl74 implements I74 { @Inject Impl74(X74 p1, X75 p2, X76 p3, X77 p4, X78 p5, X79 p6, X80 p7, X81 p8, X82 p9, X83 p10) { } @Override public void dummy() { } }
interface I75 { public void dummy(); }; class Impl75 implements I75 { @Inject Impl75(X75 p1, X76 p2, X77 p3, X78 p4, X79 p5, X80 p6, X81 p7, X82 p8, X83 p9, X84 p10) { } @Override public void dummy() { } }
interface I76 { public void dummy(); }; class Impl76 implements I76 { @Inject Impl76(X76 p1, X77 p2, X78 p3, X79 p4, X80 p5, X81 p6, X82 p7, X83 p8, X84 p9, X85 p10) { } @Override public void dummy() { } }
interface I77 { public void dummy(); }; class Impl77 implements I77 { @Inject Impl77(X77 p1, X78 p2, X79 p3, X80 p4, X81 p5, X82 p6, X83 p7, X84 p8, X85 p9, X86 p10) { } @Override public void dummy() { } }
interface I78 { public void dummy(); }; class Impl78 implements I78 { @Inject Impl78(X78 p1, X79 p2, X80 p3, X81 p4, X82 p5, X83 p6, X84 p7, X85 p8, X86 p9, X87 p10) { } @Override public void dummy() { } }
interface I79 { public void dummy(); }; class Impl79 implements I79 { @Inject Impl79(X79 p1, X80 p2, X81 p3, X82 p4, X83 p5, X84 p6, X85 p7, X86 p8, X87 p9, X88 p10) { } @Override public void dummy() { } }
interface I80 { public void dummy(); }; class Impl80 implements I80 { @Inject Impl80(X80 p1, X81 p2, X82 p3, X83 p4, X84 p5, X85 p6, X86 p7, X87 p8, X88 p9, X89 p10) { } @Override public void dummy() { } }
interface I81 { public void dummy(); }; class Impl81 implements I81 { @Inject Impl81(X81 p1, X82 p2, X83 p3, X84 p4, X85 p5, X86 p6, X87 p7, X88 p8, X89 p9, X90 p10) { } @Override public void dummy() { } }
interface I82 { public void dummy(); }; class Impl82 implements I82 { @Inject Impl82(X82 p1, X83 p2, X84 p3, X85 p4, X86 p5, X87 p6, X88 p7, X89 p8, X90 p9, X91 p10) { } @Override public void dummy() { } }
interface I83 { public void dummy(); }; class Impl83 implements I83 { @Inject Impl83(X83 p1, X84 p2, X85 p3, X86 p4, X87 p5, X88 p6, X89 p7, X90 p8, X91 p9, X92 p10) { } @Override public void dummy() { } }
interface I84 { public void dummy(); }; class Impl84 implements I84 { @Inject Impl84(X84 p1, X85 p2, X86 p3, X87 p4, X88 p5, X89 p6, X90 p7, X91 p8, X92 p9, X93 p10) { } @Override public void dummy() { } }
interface I85 { public void dummy(); }; class Impl85 implements I85 { @Inject Impl85(X85 p1, X86 p2, X87 p3, X88 p4, X89 p5, X90 p6, X91 p7, X92 p8, X93 p9, X94 p10) { } @Override public void dummy() { } }
interface I86 { public void dummy(); }; class Impl86 implements I86 { @Inject Impl86(X86 p1, X87 p2, X88 p3, X89 p4, X90 p5, X91 p6, X92 p7, X93 p8, X94 p9, X95 p10) { } @Override public void dummy() { } }
interface I87 { public void dummy(); }; class Impl87 implements I87 { @Inject Impl87(X87 p1, X88 p2, X89 p3, X90 p4, X91 p5, X92 p6, X93 p7, X94 p8, X95 p9, X96 p10) { } @Override public void dummy() { } }
interface I88 { public void dummy(); }; class Impl88 implements I88 { @Inject Impl88(X88 p1, X89 p2, X90 p3, X91 p4, X92 p5, X93 p6, X94 p7, X95 p8, X96 p9, X97 p10) { } @Override public void dummy() { } }
interface I89 { public void dummy(); }; class Impl89 implements I89 { @Inject Impl89(X89 p1, X90 p2, X91 p3, X92 p4, X93 p5, X94 p6, X95 p7, X96 p8, X97 p9, X98 p10) { } @Override public void dummy() { } }
interface I90 { public void dummy(); }; class Impl90 implements I90 { @Inject Impl90(X90 p1, X91 p2, X92 p3, X93 p4, X94 p5, X95 p6, X96 p7, X97 p8, X98 p9, X99 p10) { } @Override public void dummy() { } }
interface I91 { public void dummy(); }; class Impl91 implements I91 { @Inject Impl91(X91 p1, X92 p2, X93 p3, X94 p4, X95 p5, X96 p6, X97 p7, X98 p8, X99 p9, X00 p10) { } @Override public void dummy() { } }
interface I92 { public void dummy(); }; class Impl92 implements I92 { @Inject Impl92(X92 p1, X93 p2, X94 p3, X95 p4, X96 p5, X97 p6, X98 p7, X99 p8, X00 p9, X01 p10) { } @Override public void dummy() { } }
interface I93 { public void dummy(); }; class Impl93 implements I93 { @Inject Impl93(X93 p1, X94 p2, X95 p3, X96 p4, X97 p5, X98 p6, X99 p7, X00 p8, X01 p9, X02 p10) { } @Override public void dummy() { } }
interface I94 { public void dummy(); }; class Impl94 implements I94 { @Inject Impl94(X94 p1, X95 p2, X96 p3, X97 p4, X98 p5, X99 p6, X00 p7, X01 p8, X02 p9, X03 p10) { } @Override public void dummy() { } }
interface I95 { public void dummy(); }; class Impl95 implements I95 { @Inject Impl95(X95 p1, X96 p2, X97 p3, X98 p4, X99 p5, X00 p6, X01 p7, X02 p8, X03 p9, X04 p10) { } @Override public void dummy() { } }
interface I96 { public void dummy(); }; class Impl96 implements I96 { @Inject Impl96(X96 p1, X97 p2, X98 p3, X99 p4, X00 p5, X01 p6, X02 p7, X03 p8, X04 p9, X05 p10) { } @Override public void dummy() { } }
interface I97 { public void dummy(); }; class Impl97 implements I97 { @Inject Impl97(X97 p1, X98 p2, X99 p3, X00 p4, X01 p5, X02 p6, X03 p7, X04 p8, X05 p9, X06 p10) { } @Override public void dummy() { } }
interface I98 { public void dummy(); }; class Impl98 implements I98 { @Inject Impl98(X98 p1, X99 p2, X00 p3, X01 p4, X02 p5, X03 p6, X04 p7, X05 p8, X06 p9, X07 p10) { } @Override public void dummy() { } }
interface I99 { public void dummy(); }; class Impl99 implements I99 { @Inject Impl99(X99 p1, X00 p2, X01 p3, X02 p4, X03 p5, X04 p6, X05 p7, X06 p8, X07 p9, X08 p10) { } @Override public void dummy() { } }
class C0 { @Inject C0(I00 p1, I01 p2, I02 p3, I03 p4, I04 p5, I05 p6, I06 p7, I07 p8, I08 p9, I09 p10) { } }
class C1 { @Inject C1(I10 p1, I11 p2, I12 p3, I13 p4, I14 p5, I15 p6, I16 p7, I17 p8, I18 p9, I19 p10) { } }
class C2 { @Inject C2(I20 p1, I21 p2, I22 p3, I23 p4, I24 p5, I25 p6, I26 p7, I27 p8, I28 p9, I29 p10) { } }
class C3 { @Inject C3(I30 p1, I31 p2, I32 p3, I33 p4, I34 p5, I35 p6, I36 p7, I37 p8, I38 p9, I39 p10) { } }
class C4 { @Inject C4(I40 p1, I41 p2, I42 p3, I43 p4, I44 p5, I45 p6, I46 p7, I47 p8, I48 p9, I49 p10) { } }
class C5 { @Inject C5(I50 p1, I51 p2, I52 p3, I53 p4, I54 p5, I55 p6, I56 p7, I57 p8, I58 p9, I59 p10) { } }
class C6 { @Inject C6(I60 p1, I61 p2, I62 p3, I63 p4, I64 p5, I65 p6, I66 p7, I67 p8, I68 p9, I69 p10) { } }
class C7 { @Inject C7(I70 p1, I71 p2, I72 p3, I73 p4, I74 p5, I75 p6, I76 p7, I77 p8, I78 p9, I79 p10) { } }
class C8 { @Inject C8(I80 p1, I81 p2, I82 p3, I83 p4, I84 p5, I85 p6, I86 p7, I87 p8, I88 p9, I89 p10) { } }
class C9 { @Inject C9(I90 p1, I91 p2, I92 p3, I93 p4, I94 p5, I95 p6, I96 p7, I97 p8, I98 p9, I99 p10) { } }
class Complex { @Inject Complex(C0 p1, C1 p2, C2 p3, C3 p4, C4 p5, C5 p6, C6 p7, C7 p8, C8 p9, C9 p10) { } }
@Module
class AppModule {
@Provides I00 provideI00(Impl00 impl) { return impl; }
@Provides I01 provideI01(Impl01 impl) { return impl; }
@Provides I02 provideI02(Impl02 impl) { return impl; }
@Provides I03 provideI03(Impl03 impl) { return impl; }
@Provides I04 provideI04(Impl04 impl) { return impl; }
@Provides I05 provideI05(Impl05 impl) { return impl; }
@Provides I06 provideI06(Impl06 impl) { return impl; }
@Provides I07 provideI07(Impl07 impl) { return impl; }
@Provides I08 provideI08(Impl08 impl) { return impl; }
@Provides I09 provideI09(Impl09 impl) { return impl; }
@Provides I10 provideI10(Impl10 impl) { return impl; }
@Provides I11 provideI11(Impl11 impl) { return impl; }
@Provides I12 provideI12(Impl12 impl) { return impl; }
@Provides I13 provideI13(Impl13 impl) { return impl; }
@Provides I14 provideI14(Impl14 impl) { return impl; }
@Provides I15 provideI15(Impl15 impl) { return impl; }
@Provides I16 provideI16(Impl16 impl) { return impl; }
@Provides I17 provideI17(Impl17 impl) { return impl; }
@Provides I18 provideI18(Impl18 impl) { return impl; }
@Provides I19 provideI19(Impl19 impl) { return impl; }
@Provides I20 provideI20(Impl20 impl) { return impl; }
@Provides I21 provideI21(Impl21 impl) { return impl; }
@Provides I22 provideI22(Impl22 impl) { return impl; }
@Provides I23 provideI23(Impl23 impl) { return impl; }
@Provides I24 provideI24(Impl24 impl) { return impl; }
@Provides I25 provideI25(Impl25 impl) { return impl; }
@Provides I26 provideI26(Impl26 impl) { return impl; }
@Provides I27 provideI27(Impl27 impl) { return impl; }
@Provides I28 provideI28(Impl28 impl) { return impl; }
@Provides I29 provideI29(Impl29 impl) { return impl; }
@Provides I30 provideI30(Impl30 impl) { return impl; }
@Provides I31 provideI31(Impl31 impl) { return impl; }
@Provides I32 provideI32(Impl32 impl) { return impl; }
@Provides I33 provideI33(Impl33 impl) { return impl; }
@Provides I34 provideI34(Impl34 impl) { return impl; }
@Provides I35 provideI35(Impl35 impl) { return impl; }
@Provides I36 provideI36(Impl36 impl) { return impl; }
@Provides I37 provideI37(Impl37 impl) { return impl; }
@Provides I38 provideI38(Impl38 impl) { return impl; }
@Provides I39 provideI39(Impl39 impl) { return impl; }
@Provides I40 provideI40(Impl40 impl) { return impl; }
@Provides I41 provideI41(Impl41 impl) { return impl; }
@Provides I42 provideI42(Impl42 impl) { return impl; }
@Provides I43 provideI43(Impl43 impl) { return impl; }
@Provides I44 provideI44(Impl44 impl) { return impl; }
@Provides I45 provideI45(Impl45 impl) { return impl; }
@Provides I46 provideI46(Impl46 impl) { return impl; }
@Provides I47 provideI47(Impl47 impl) { return impl; }
@Provides I48 provideI48(Impl48 impl) { return impl; }
@Provides I49 provideI49(Impl49 impl) { return impl; }
@Provides I50 provideI50(Impl50 impl) { return impl; }
@Provides I51 provideI51(Impl51 impl) { return impl; }
@Provides I52 provideI52(Impl52 impl) { return impl; }
@Provides I53 provideI53(Impl53 impl) { return impl; }
@Provides I54 provideI54(Impl54 impl) { return impl; }
@Provides I55 provideI55(Impl55 impl) { return impl; }
@Provides I56 provideI56(Impl56 impl) { return impl; }
@Provides I57 provideI57(Impl57 impl) { return impl; }
@Provides I58 provideI58(Impl58 impl) { return impl; }
@Provides I59 provideI59(Impl59 impl) { return impl; }
@Provides I60 provideI60(Impl60 impl) { return impl; }
@Provides I61 provideI61(Impl61 impl) { return impl; }
@Provides I62 provideI62(Impl62 impl) { return impl; }
@Provides I63 provideI63(Impl63 impl) { return impl; }
@Provides I64 provideI64(Impl64 impl) { return impl; }
@Provides I65 provideI65(Impl65 impl) { return impl; }
@Provides I66 provideI66(Impl66 impl) { return impl; }
@Provides I67 provideI67(Impl67 impl) { return impl; }
@Provides I68 provideI68(Impl68 impl) { return impl; }
@Provides I69 provideI69(Impl69 impl) { return impl; }
@Provides I70 provideI70(Impl70 impl) { return impl; }
@Provides I71 provideI71(Impl71 impl) { return impl; }
@Provides I72 provideI72(Impl72 impl) { return impl; }
@Provides I73 provideI73(Impl73 impl) { return impl; }
@Provides I74 provideI74(Impl74 impl) { return impl; }
@Provides I75 provideI75(Impl75 impl) { return impl; }
@Provides I76 provideI76(Impl76 impl) { return impl; }
@Provides I77 provideI77(Impl77 impl) { return impl; }
@Provides I78 provideI78(Impl78 impl) { return impl; }
@Provides I79 provideI79(Impl79 impl) { return impl; }
@Provides I80 provideI80(Impl80 impl) { return impl; }
@Provides I81 provideI81(Impl81 impl) { return impl; }
@Provides I82 provideI82(Impl82 impl) { return impl; }
@Provides I83 provideI83(Impl83 impl) { return impl; }
@Provides I84 provideI84(Impl84 impl) { return impl; }
@Provides I85 provideI85(Impl85 impl) { return impl; }
@Provides I86 provideI86(Impl86 impl) { return impl; }
@Provides I87 provideI87(Impl87 impl) { return impl; }
@Provides I88 provideI88(Impl88 impl) { return impl; }
@Provides I89 provideI89(Impl89 impl) { return impl; }
@Provides I90 provideI90(Impl90 impl) { return impl; }
@Provides I91 provideI91(Impl91 impl) { return impl; }
@Provides I92 provideI92(Impl92 impl) { return impl; }
@Provides I93 provideI93(Impl93 impl) { return impl; }
@Provides I94 provideI94(Impl94 impl) { return impl; }
@Provides I95 provideI95(Impl95 impl) { return impl; }
@Provides I96 provideI96(Impl96 impl) { return impl; }
@Provides I97 provideI97(Impl97 impl) { return impl; }
@Provides I98 provideI98(Impl98 impl) { return impl; }
@Provides I99 provideI99(Impl99 impl) { return impl; }
}
@Component(modules = AppModule.class)
interface AppComponent {
Complex build();
}
public class dagger2 {
public static void main(String[] args) {
Dagger_AppComponent.create().build();
}
}
================================================
FILE: benchmark/create_complex/di.cpp
================================================
//
// Copyright (c) 2012-2017 Kris Jusiak (kris at jusiak dot net)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include
#include
namespace di = boost::di;
// clang-format off
struct X00 { BOOST_DI_INJECT(X00) { } };
struct X01 { BOOST_DI_INJECT(X01, X00) { } };
struct X02 { BOOST_DI_INJECT(X02, X00, X01) { } };
struct X03 { BOOST_DI_INJECT(X03, X00, X01, X02) { } };
struct X04 { BOOST_DI_INJECT(X04, X00, X01, X02, X03) { } };
struct X05 { BOOST_DI_INJECT(X05, X00, X01, X02, X03, X04) { } };
struct X06 { BOOST_DI_INJECT(X06, X00, X01, X02, X03, X04, X05) { } };
struct X07 { BOOST_DI_INJECT(X07, X00, X01, X02, X03, X04, X05, X06) { } };
struct X08 { BOOST_DI_INJECT(X08, X00, X01, X02, X03, X04, X05, X06, X07) { } };
struct X09 { BOOST_DI_INJECT(X09, X00, X01, X02, X03, X04, X05, X06, X07, X08) { } };
struct X10 { BOOST_DI_INJECT(X10, X00, X01, X02, X03, X04, X05, X06, X07, X08, X09) { } };
struct X11 { BOOST_DI_INJECT(X11, X01, X02, X03, X04, X05, X06, X07, X08, X09, X10) { } };
struct X12 { BOOST_DI_INJECT(X12, X02, X03, X04, X05, X06, X07, X08, X09, X10, X11) { } };
struct X13 { BOOST_DI_INJECT(X13, X03, X04, X05, X06, X07, X08, X09, X10, X11, X12) { } };
struct X14 { BOOST_DI_INJECT(X14, X04, X05, X06, X07, X08, X09, X10, X11, X12, X13) { } };
struct X15 { BOOST_DI_INJECT(X15, X05, X06, X07, X08, X09, X10, X11, X12, X13, X14) { } };
struct X16 { BOOST_DI_INJECT(X16, X06, X07, X08, X09, X10, X11, X12, X13, X14, X15) { } };
struct X17 { BOOST_DI_INJECT(X17, X07, X08, X09, X10, X11, X12, X13, X14, X15, X16) { } };
struct X18 { BOOST_DI_INJECT(X18, X08, X09, X10, X11, X12, X13, X14, X15, X16, X17) { } };
struct X19 { BOOST_DI_INJECT(X19, X09, X10, X11, X12, X13, X14, X15, X16, X17, X18) { } };
struct X20 { BOOST_DI_INJECT(X20, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) { } };
struct X21 { BOOST_DI_INJECT(X21, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20) { } };
struct X22 { BOOST_DI_INJECT(X22, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21) { } };
struct X23 { BOOST_DI_INJECT(X23, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22) { } };
struct X24 { BOOST_DI_INJECT(X24, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23) { } };
struct X25 { BOOST_DI_INJECT(X25, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24) { } };
struct X26 { BOOST_DI_INJECT(X26, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25) { } };
struct X27 { BOOST_DI_INJECT(X27, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26) { } };
struct X28 { BOOST_DI_INJECT(X28, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27) { } };
struct X29 { BOOST_DI_INJECT(X29, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28) { } };
struct X30 { BOOST_DI_INJECT(X30, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29) { } };
struct X31 { BOOST_DI_INJECT(X31, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30) { } };
struct X32 { BOOST_DI_INJECT(X32, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31) { } };
struct X33 { BOOST_DI_INJECT(X33, X23, X24, X25, X26, X27, X28, X29, X30, X31, X32) { } };
struct X34 { BOOST_DI_INJECT(X34, X24, X25, X26, X27, X28, X29, X30, X31, X32, X33) { } };
struct X35 { BOOST_DI_INJECT(X35, X25, X26, X27, X28, X29, X30, X31, X32, X33, X34) { } };
struct X36 { BOOST_DI_INJECT(X36, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35) { } };
struct X37 { BOOST_DI_INJECT(X37, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36) { } };
struct X38 { BOOST_DI_INJECT(X38, X28, X29, X30, X31, X32, X33, X34, X35, X36, X37) { } };
struct X39 { BOOST_DI_INJECT(X39, X29, X30, X31, X32, X33, X34, X35, X36, X37, X38) { } };
struct X40 { BOOST_DI_INJECT(X40, X30, X31, X32, X33, X34, X35, X36, X37, X38, X39) { } };
struct X41 { BOOST_DI_INJECT(X41, X31, X32, X33, X34, X35, X36, X37, X38, X39, X40) { } };
struct X42 { BOOST_DI_INJECT(X42, X32, X33, X34, X35, X36, X37, X38, X39, X40, X41) { } };
struct X43 { BOOST_DI_INJECT(X43, X33, X34, X35, X36, X37, X38, X39, X40, X41, X42) { } };
struct X44 { BOOST_DI_INJECT(X44, X34, X35, X36, X37, X38, X39, X40, X41, X42, X43) { } };
struct X45 { BOOST_DI_INJECT(X45, X35, X36, X37, X38, X39, X40, X41, X42, X43, X44) { } };
struct X46 { BOOST_DI_INJECT(X46, X36, X37, X38, X39, X40, X41, X42, X43, X44, X45) { } };
struct X47 { BOOST_DI_INJECT(X47, X37, X38, X39, X40, X41, X42, X43, X44, X45, X46) { } };
struct X48 { BOOST_DI_INJECT(X48, X38, X39, X40, X41, X42, X43, X44, X45, X46, X47) { } };
struct X49 { BOOST_DI_INJECT(X49, X39, X40, X41, X42, X43, X44, X45, X46, X47, X48) { } };
struct X50 { BOOST_DI_INJECT(X50, X40, X41, X42, X43, X44, X45, X46, X47, X48, X49) { } };
struct X51 { BOOST_DI_INJECT(X51, X41, X42, X43, X44, X45, X46, X47, X48, X49, X50) { } };
struct X52 { BOOST_DI_INJECT(X52, X42, X43, X44, X45, X46, X47, X48, X49, X50, X51) { } };
struct X53 { BOOST_DI_INJECT(X53, X43, X44, X45, X46, X47, X48, X49, X50, X51, X52) { } };
struct X54 { BOOST_DI_INJECT(X54, X44, X45, X46, X47, X48, X49, X50, X51, X52, X53) { } };
struct X55 { BOOST_DI_INJECT(X55, X45, X46, X47, X48, X49, X50, X51, X52, X53, X54) { } };
struct X56 { BOOST_DI_INJECT(X56, X46, X47, X48, X49, X50, X51, X52, X53, X54, X55) { } };
struct X57 { BOOST_DI_INJECT(X57, X47, X48, X49, X50, X51, X52, X53, X54, X55, X56) { } };
struct X58 { BOOST_DI_INJECT(X58, X48, X49, X50, X51, X52, X53, X54, X55, X56, X57) { } };
struct X59 { BOOST_DI_INJECT(X59, X49, X50, X51, X52, X53, X54, X55, X56, X57, X58) { } };
struct X60 { BOOST_DI_INJECT(X60, X50, X51, X52, X53, X54, X55, X56, X57, X58, X59) { } };
struct X61 { BOOST_DI_INJECT(X61, X51, X52, X53, X54, X55, X56, X57, X58, X59, X60) { } };
struct X62 { BOOST_DI_INJECT(X62, X52, X53, X54, X55, X56, X57, X58, X59, X60, X61) { } };
struct X63 { BOOST_DI_INJECT(X63, X53, X54, X55, X56, X57, X58, X59, X60, X61, X62) { } };
struct X64 { BOOST_DI_INJECT(X64, X54, X55, X56, X57, X58, X59, X60, X61, X62, X63) { } };
struct X65 { BOOST_DI_INJECT(X65, X55, X56, X57, X58, X59, X60, X61, X62, X63, X64) { } };
struct X66 { BOOST_DI_INJECT(X66, X56, X57, X58, X59, X60, X61, X62, X63, X64, X65) { } };
struct X67 { BOOST_DI_INJECT(X67, X57, X58, X59, X60, X61, X62, X63, X64, X65, X66) { } };
struct X68 { BOOST_DI_INJECT(X68, X58, X59, X60, X61, X62, X63, X64, X65, X66, X67) { } };
struct X69 { BOOST_DI_INJECT(X69, X59, X60, X61, X62, X63, X64, X65, X66, X67, X68) { } };
struct X70 { BOOST_DI_INJECT(X70, X60, X61, X62, X63, X64, X65, X66, X67, X68, X69) { } };
struct X71 { BOOST_DI_INJECT(X71, X61, X62, X63, X64, X65, X66, X67, X68, X69, X70) { } };
struct X72 { BOOST_DI_INJECT(X72, X62, X63, X64, X65, X66, X67, X68, X69, X70, X71) { } };
struct X73 { BOOST_DI_INJECT(X73, X63, X64, X65, X66, X67, X68, X69, X70, X71, X72) { } };
struct X74 { BOOST_DI_INJECT(X74, X64, X65, X66, X67, X68, X69, X70, X71, X72, X73) { } };
struct X75 { BOOST_DI_INJECT(X75, X65, X66, X67, X68, X69, X70, X71, X72, X73, X74) { } };
struct X76 { BOOST_DI_INJECT(X76, X66, X67, X68, X69, X70, X71, X72, X73, X74, X75) { } };
struct X77 { BOOST_DI_INJECT(X77, X67, X68, X69, X70, X71, X72, X73, X74, X75, X76) { } };
struct X78 { BOOST_DI_INJECT(X78, X68, X69, X70, X71, X72, X73, X74, X75, X76, X77) { } };
struct X79 { BOOST_DI_INJECT(X79, X69, X70, X71, X72, X73, X74, X75, X76, X77, X78) { } };
struct X80 { BOOST_DI_INJECT(X80, X70, X71, X72, X73, X74, X75, X76, X77, X78, X79) { } };
struct X81 { BOOST_DI_INJECT(X81, X71, X72, X73, X74, X75, X76, X77, X78, X79, X80) { } };
struct X82 { BOOST_DI_INJECT(X82, X72, X73, X74, X75, X76, X77, X78, X79, X80, X81) { } };
struct X83 { BOOST_DI_INJECT(X83, X73, X74, X75, X76, X77, X78, X79, X80, X81, X82) { } };
struct X84 { BOOST_DI_INJECT(X84, X74, X75, X76, X77, X78, X79, X80, X81, X82, X83) { } };
struct X85 { BOOST_DI_INJECT(X85, X75, X76, X77, X78, X79, X80, X81, X82, X83, X84) { } };
struct X86 { BOOST_DI_INJECT(X86, X76, X77, X78, X79, X80, X81, X82, X83, X84, X85) { } };
struct X87 { BOOST_DI_INJECT(X87, X77, X78, X79, X80, X81, X82, X83, X84, X85, X86) { } };
struct X88 { BOOST_DI_INJECT(X88, X78, X79, X80, X81, X82, X83, X84, X85, X86, X87) { } };
struct X89 { BOOST_DI_INJECT(X89, X79, X80, X81, X82, X83, X84, X85, X86, X87, X88) { } };
struct X90 { BOOST_DI_INJECT(X90, X80, X81, X82, X83, X84, X85, X86, X87, X88, X89) { } };
struct X91 { BOOST_DI_INJECT(X91, X81, X82, X83, X84, X85, X86, X87, X88, X89, X90) { } };
struct X92 { BOOST_DI_INJECT(X92, X82, X83, X84, X85, X86, X87, X88, X89, X90, X91) { } };
struct X93 { BOOST_DI_INJECT(X93, X83, X84, X85, X86, X87, X88, X89, X90, X91, X92) { } };
struct X94 { BOOST_DI_INJECT(X94, X84, X85, X86, X87, X88, X89, X90, X91, X92, X93) { } };
struct X95 { BOOST_DI_INJECT(X95, X85, X86, X87, X88, X89, X90, X91, X92, X93, X94) { } };
struct X96 { BOOST_DI_INJECT(X96, X86, X87, X88, X89, X90, X91, X92, X93, X94, X95) { } };
struct X97 { BOOST_DI_INJECT(X97, X87, X88, X89, X90, X91, X92, X93, X94, X95, X96) { } };
struct X98 { BOOST_DI_INJECT(X98, X88, X89, X90, X91, X92, X93, X94, X95, X96, X97) { } };
struct X99 { BOOST_DI_INJECT(X99, X89, X90, X91, X92, X93, X94, X95, X96, X97, X98) { } };
struct I00 { virtual ~I00() noexcept = default; virtual void dummy() = 0; }; struct Impl00 : I00 { BOOST_DI_INJECT(Impl00, X00, X01, X02, X03, X04, X05, X06, X07, X08, X09) { } void dummy() override { } };
struct I01 { virtual ~I01() noexcept = default; virtual void dummy() = 0; }; struct Impl01 : I01 { BOOST_DI_INJECT(Impl01, X01, X02, X03, X04, X05, X06, X07, X08, X09, X10) { } void dummy() override { } };
struct I02 { virtual ~I02() noexcept = default; virtual void dummy() = 0; }; struct Impl02 : I02 { BOOST_DI_INJECT(Impl02, X02, X03, X04, X05, X06, X07, X08, X09, X10, X11) { } void dummy() override { } };
struct I03 { virtual ~I03() noexcept = default; virtual void dummy() = 0; }; struct Impl03 : I03 { BOOST_DI_INJECT(Impl03, X03, X04, X05, X06, X07, X08, X09, X10, X11, X12) { } void dummy() override { } };
struct I04 { virtual ~I04() noexcept = default; virtual void dummy() = 0; }; struct Impl04 : I04 { BOOST_DI_INJECT(Impl04, X04, X05, X06, X07, X08, X09, X10, X11, X12, X13) { } void dummy() override { } };
struct I05 { virtual ~I05() noexcept = default; virtual void dummy() = 0; }; struct Impl05 : I05 { BOOST_DI_INJECT(Impl05, X05, X06, X07, X08, X09, X10, X11, X12, X13, X14) { } void dummy() override { } };
struct I06 { virtual ~I06() noexcept = default; virtual void dummy() = 0; }; struct Impl06 : I06 { BOOST_DI_INJECT(Impl06, X06, X07, X08, X09, X10, X11, X12, X13, X14, X15) { } void dummy() override { } };
struct I07 { virtual ~I07() noexcept = default; virtual void dummy() = 0; }; struct Impl07 : I07 { BOOST_DI_INJECT(Impl07, X07, X08, X09, X10, X11, X12, X13, X14, X15, X16) { } void dummy() override { } };
struct I08 { virtual ~I08() noexcept = default; virtual void dummy() = 0; }; struct Impl08 : I08 { BOOST_DI_INJECT(Impl08, X08, X09, X10, X11, X12, X13, X14, X15, X16, X17) { } void dummy() override { } };
struct I09 { virtual ~I09() noexcept = default; virtual void dummy() = 0; }; struct Impl09 : I09 { BOOST_DI_INJECT(Impl09, X09, X10, X11, X12, X13, X14, X15, X16, X17, X18) { } void dummy() override { } };
struct I10 { virtual ~I10() noexcept = default; virtual void dummy() = 0; }; struct Impl10 : I10 { BOOST_DI_INJECT(Impl10, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) { } void dummy() override { } };
struct I11 { virtual ~I11() noexcept = default; virtual void dummy() = 0; }; struct Impl11 : I11 { BOOST_DI_INJECT(Impl11, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20) { } void dummy() override { } };
struct I12 { virtual ~I12() noexcept = default; virtual void dummy() = 0; }; struct Impl12 : I12 { BOOST_DI_INJECT(Impl12, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21) { } void dummy() override { } };
struct I13 { virtual ~I13() noexcept = default; virtual void dummy() = 0; }; struct Impl13 : I13 { BOOST_DI_INJECT(Impl13, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22) { } void dummy() override { } };
struct I14 { virtual ~I14() noexcept = default; virtual void dummy() = 0; }; struct Impl14 : I14 { BOOST_DI_INJECT(Impl14, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23) { } void dummy() override { } };
struct I15 { virtual ~I15() noexcept = default; virtual void dummy() = 0; }; struct Impl15 : I15 { BOOST_DI_INJECT(Impl15, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24) { } void dummy() override { } };
struct I16 { virtual ~I16() noexcept = default; virtual void dummy() = 0; }; struct Impl16 : I16 { BOOST_DI_INJECT(Impl16, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25) { } void dummy() override { } };
struct I17 { virtual ~I17() noexcept = default; virtual void dummy() = 0; }; struct Impl17 : I17 { BOOST_DI_INJECT(Impl17, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26) { } void dummy() override { } };
struct I18 { virtual ~I18() noexcept = default; virtual void dummy() = 0; }; struct Impl18 : I18 { BOOST_DI_INJECT(Impl18, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27) { } void dummy() override { } };
struct I19 { virtual ~I19() noexcept = default; virtual void dummy() = 0; }; struct Impl19 : I19 { BOOST_DI_INJECT(Impl19, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28) { } void dummy() override { } };
struct I20 { virtual ~I20() noexcept = default; virtual void dummy() = 0; }; struct Impl20 : I20 { BOOST_DI_INJECT(Impl20, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29) { } void dummy() override { } };
struct I21 { virtual ~I21() noexcept = default; virtual void dummy() = 0; }; struct Impl21 : I21 { BOOST_DI_INJECT(Impl21, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30) { } void dummy() override { } };
struct I22 { virtual ~I22() noexcept = default; virtual void dummy() = 0; }; struct Impl22 : I22 { BOOST_DI_INJECT(Impl22, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31) { } void dummy() override { } };
struct I23 { virtual ~I23() noexcept = default; virtual void dummy() = 0; }; struct Impl23 : I23 { BOOST_DI_INJECT(Impl23, X23, X24, X25, X26, X27, X28, X29, X30, X31, X32) { } void dummy() override { } };
struct I24 { virtual ~I24() noexcept = default; virtual void dummy() = 0; }; struct Impl24 : I24 { BOOST_DI_INJECT(Impl24, X24, X25, X26, X27, X28, X29, X30, X31, X32, X33) { } void dummy() override { } };
struct I25 { virtual ~I25() noexcept = default; virtual void dummy() = 0; }; struct Impl25 : I25 { BOOST_DI_INJECT(Impl25, X25, X26, X27, X28, X29, X30, X31, X32, X33, X34) { } void dummy() override { } };
struct I26 { virtual ~I26() noexcept = default; virtual void dummy() = 0; }; struct Impl26 : I26 { BOOST_DI_INJECT(Impl26, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35) { } void dummy() override { } };
struct I27 { virtual ~I27() noexcept = default; virtual void dummy() = 0; }; struct Impl27 : I27 { BOOST_DI_INJECT(Impl27, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36) { } void dummy() override { } };
struct I28 { virtual ~I28() noexcept = default; virtual void dummy() = 0; }; struct Impl28 : I28 { BOOST_DI_INJECT(Impl28, X28, X29, X30, X31, X32, X33, X34, X35, X36, X37) { } void dummy() override { } };
struct I29 { virtual ~I29() noexcept = default; virtual void dummy() = 0; }; struct Impl29 : I29 { BOOST_DI_INJECT(Impl29, X29, X30, X31, X32, X33, X34, X35, X36, X37, X38) { } void dummy() override { } };
struct I30 { virtual ~I30() noexcept = default; virtual void dummy() = 0; }; struct Impl30 : I30 { BOOST_DI_INJECT(Impl30, X30, X31, X32, X33, X34, X35, X36, X37, X38, X39) { } void dummy() override { } };
struct I31 { virtual ~I31() noexcept = default; virtual void dummy() = 0; }; struct Impl31 : I31 { BOOST_DI_INJECT(Impl31, X31, X32, X33, X34, X35, X36, X37, X38, X39, X40) { } void dummy() override { } };
struct I32 { virtual ~I32() noexcept = default; virtual void dummy() = 0; }; struct Impl32 : I32 { BOOST_DI_INJECT(Impl32, X32, X33, X34, X35, X36, X37, X38, X39, X40, X41) { } void dummy() override { } };
struct I33 { virtual ~I33() noexcept = default; virtual void dummy() = 0; }; struct Impl33 : I33 { BOOST_DI_INJECT(Impl33, X33, X34, X35, X36, X37, X38, X39, X40, X41, X42) { } void dummy() override { } };
struct I34 { virtual ~I34() noexcept = default; virtual void dummy() = 0; }; struct Impl34 : I34 { BOOST_DI_INJECT(Impl34, X34, X35, X36, X37, X38, X39, X40, X41, X42, X43) { } void dummy() override { } };
struct I35 { virtual ~I35() noexcept = default; virtual void dummy() = 0; }; struct Impl35 : I35 { BOOST_DI_INJECT(Impl35, X35, X36, X37, X38, X39, X40, X41, X42, X43, X44) { } void dummy() override { } };
struct I36 { virtual ~I36() noexcept = default; virtual void dummy() = 0; }; struct Impl36 : I36 { BOOST_DI_INJECT(Impl36, X36, X37, X38, X39, X40, X41, X42, X43, X44, X45) { } void dummy() override { } };
struct I37 { virtual ~I37() noexcept = default; virtual void dummy() = 0; }; struct Impl37 : I37 { BOOST_DI_INJECT(Impl37, X37, X38, X39, X40, X41, X42, X43, X44, X45, X46) { } void dummy() override { } };
struct I38 { virtual ~I38() noexcept = default; virtual void dummy() = 0; }; struct Impl38 : I38 { BOOST_DI_INJECT(Impl38, X38, X39, X40, X41, X42, X43, X44, X45, X46, X47) { } void dummy() override { } };
struct I39 { virtual ~I39() noexcept = default; virtual void dummy() = 0; }; struct Impl39 : I39 { BOOST_DI_INJECT(Impl39, X39, X40, X41, X42, X43, X44, X45, X46, X47, X48) { } void dummy() override { } };
struct I40 { virtual ~I40() noexcept = default; virtual void dummy() = 0; }; struct Impl40 : I40 { BOOST_DI_INJECT(Impl40, X40, X41, X42, X43, X44, X45, X46, X47, X48, X49) { } void dummy() override { } };
struct I41 { virtual ~I41() noexcept = default; virtual void dummy() = 0; }; struct Impl41 : I41 { BOOST_DI_INJECT(Impl41, X41, X42, X43, X44, X45, X46, X47, X48, X49, X50) { } void dummy() override { } };
struct I42 { virtual ~I42() noexcept = default; virtual void dummy() = 0; }; struct Impl42 : I42 { BOOST_DI_INJECT(Impl42, X42, X43, X44, X45, X46, X47, X48, X49, X50, X51) { } void dummy() override { } };
struct I43 { virtual ~I43() noexcept = default; virtual void dummy() = 0; }; struct Impl43 : I43 { BOOST_DI_INJECT(Impl43, X43, X44, X45, X46, X47, X48, X49, X50, X51, X52) { } void dummy() override { } };
struct I44 { virtual ~I44() noexcept = default; virtual void dummy() = 0; }; struct Impl44 : I44 { BOOST_DI_INJECT(Impl44, X44, X45, X46, X47, X48, X49, X50, X51, X52, X53) { } void dummy() override { } };
struct I45 { virtual ~I45() noexcept = default; virtual void dummy() = 0; }; struct Impl45 : I45 { BOOST_DI_INJECT(Impl45, X45, X46, X47, X48, X49, X50, X51, X52, X53, X54) { } void dummy() override { } };
struct I46 { virtual ~I46() noexcept = default; virtual void dummy() = 0; }; struct Impl46 : I46 { BOOST_DI_INJECT(Impl46, X46, X47, X48, X49, X50, X51, X52, X53, X54, X55) { } void dummy() override { } };
struct I47 { virtual ~I47() noexcept = default; virtual void dummy() = 0; }; struct Impl47 : I47 { BOOST_DI_INJECT(Impl47, X47, X48, X49, X50, X51, X52, X53, X54, X55, X56) { } void dummy() override { } };
struct I48 { virtual ~I48() noexcept = default; virtual void dummy() = 0; }; struct Impl48 : I48 { BOOST_DI_INJECT(Impl48, X48, X49, X50, X51, X52, X53, X54, X55, X56, X57) { } void dummy() override { } };
struct I49 { virtual ~I49() noexcept = default; virtual void dummy() = 0; }; struct Impl49 : I49 { BOOST_DI_INJECT(Impl49, X49, X50, X51, X52, X53, X54, X55, X56, X57, X58) { } void dummy() override { } };
struct I50 { virtual ~I50() noexcept = default; virtual void dummy() = 0; }; struct Impl50 : I50 { BOOST_DI_INJECT(Impl50, X50, X51, X52, X53, X54, X55, X56, X57, X58, X59) { } void dummy() override { } };
struct I51 { virtual ~I51() noexcept = default; virtual void dummy() = 0; }; struct Impl51 : I51 { BOOST_DI_INJECT(Impl51, X51, X52, X53, X54, X55, X56, X57, X58, X59, X60) { } void dummy() override { } };
struct I52 { virtual ~I52() noexcept = default; virtual void dummy() = 0; }; struct Impl52 : I52 { BOOST_DI_INJECT(Impl52, X52, X53, X54, X55, X56, X57, X58, X59, X60, X61) { } void dummy() override { } };
struct I53 { virtual ~I53() noexcept = default; virtual void dummy() = 0; }; struct Impl53 : I53 { BOOST_DI_INJECT(Impl53, X53, X54, X55, X56, X57, X58, X59, X60, X61, X62) { } void dummy() override { } };
struct I54 { virtual ~I54() noexcept = default; virtual void dummy() = 0; }; struct Impl54 : I54 { BOOST_DI_INJECT(Impl54, X54, X55, X56, X57, X58, X59, X60, X61, X62, X63) { } void dummy() override { } };
struct I55 { virtual ~I55() noexcept = default; virtual void dummy() = 0; }; struct Impl55 : I55 { BOOST_DI_INJECT(Impl55, X55, X56, X57, X58, X59, X60, X61, X62, X63, X64) { } void dummy() override { } };
struct I56 { virtual ~I56() noexcept = default; virtual void dummy() = 0; }; struct Impl56 : I56 { BOOST_DI_INJECT(Impl56, X56, X57, X58, X59, X60, X61, X62, X63, X64, X65) { } void dummy() override { } };
struct I57 { virtual ~I57() noexcept = default; virtual void dummy() = 0; }; struct Impl57 : I57 { BOOST_DI_INJECT(Impl57, X57, X58, X59, X60, X61, X62, X63, X64, X65, X66) { } void dummy() override { } };
struct I58 { virtual ~I58() noexcept = default; virtual void dummy() = 0; }; struct Impl58 : I58 { BOOST_DI_INJECT(Impl58, X58, X59, X60, X61, X62, X63, X64, X65, X66, X67) { } void dummy() override { } };
struct I59 { virtual ~I59() noexcept = default; virtual void dummy() = 0; }; struct Impl59 : I59 { BOOST_DI_INJECT(Impl59, X59, X60, X61, X62, X63, X64, X65, X66, X67, X68) { } void dummy() override { } };
struct I60 { virtual ~I60() noexcept = default; virtual void dummy() = 0; }; struct Impl60 : I60 { BOOST_DI_INJECT(Impl60, X60, X61, X62, X63, X64, X65, X66, X67, X68, X69) { } void dummy() override { } };
struct I61 { virtual ~I61() noexcept = default; virtual void dummy() = 0; }; struct Impl61 : I61 { BOOST_DI_INJECT(Impl61, X61, X62, X63, X64, X65, X66, X67, X68, X69, X70) { } void dummy() override { } };
struct I62 { virtual ~I62() noexcept = default; virtual void dummy() = 0; }; struct Impl62 : I62 { BOOST_DI_INJECT(Impl62, X62, X63, X64, X65, X66, X67, X68, X69, X70, X71) { } void dummy() override { } };
struct I63 { virtual ~I63() noexcept = default; virtual void dummy() = 0; }; struct Impl63 : I63 { BOOST_DI_INJECT(Impl63, X63, X64, X65, X66, X67, X68, X69, X70, X71, X72) { } void dummy() override { } };
struct I64 { virtual ~I64() noexcept = default; virtual void dummy() = 0; }; struct Impl64 : I64 { BOOST_DI_INJECT(Impl64, X64, X65, X66, X67, X68, X69, X70, X71, X72, X73) { } void dummy() override { } };
struct I65 { virtual ~I65() noexcept = default; virtual void dummy() = 0; }; struct Impl65 : I65 { BOOST_DI_INJECT(Impl65, X65, X66, X67, X68, X69, X70, X71, X72, X73, X74) { } void dummy() override { } };
struct I66 { virtual ~I66() noexcept = default; virtual void dummy() = 0; }; struct Impl66 : I66 { BOOST_DI_INJECT(Impl66, X66, X67, X68, X69, X70, X71, X72, X73, X74, X75) { } void dummy() override { } };
struct I67 { virtual ~I67() noexcept = default; virtual void dummy() = 0; }; struct Impl67 : I67 { BOOST_DI_INJECT(Impl67, X67, X68, X69, X70, X71, X72, X73, X74, X75, X76) { } void dummy() override { } };
struct I68 { virtual ~I68() noexcept = default; virtual void dummy() = 0; }; struct Impl68 : I68 { BOOST_DI_INJECT(Impl68, X68, X69, X70, X71, X72, X73, X74, X75, X76, X77) { } void dummy() override { } };
struct I69 { virtual ~I69() noexcept = default; virtual void dummy() = 0; }; struct Impl69 : I69 { BOOST_DI_INJECT(Impl69, X69, X70, X71, X72, X73, X74, X75, X76, X77, X78) { } void dummy() override { } };
struct I70 { virtual ~I70() noexcept = default; virtual void dummy() = 0; }; struct Impl70 : I70 { BOOST_DI_INJECT(Impl70, X70, X71, X72, X73, X74, X75, X76, X77, X78, X79) { } void dummy() override { } };
struct I71 { virtual ~I71() noexcept = default; virtual void dummy() = 0; }; struct Impl71 : I71 { BOOST_DI_INJECT(Impl71, X71, X72, X73, X74, X75, X76, X77, X78, X79, X80) { } void dummy() override { } };
struct I72 { virtual ~I72() noexcept = default; virtual void dummy() = 0; }; struct Impl72 : I72 { BOOST_DI_INJECT(Impl72, X72, X73, X74, X75, X76, X77, X78, X79, X80, X81) { } void dummy() override { } };
struct I73 { virtual ~I73() noexcept = default; virtual void dummy() = 0; }; struct Impl73 : I73 { BOOST_DI_INJECT(Impl73, X73, X74, X75, X76, X77, X78, X79, X80, X81, X82) { } void dummy() override { } };
struct I74 { virtual ~I74() noexcept = default; virtual void dummy() = 0; }; struct Impl74 : I74 { BOOST_DI_INJECT(Impl74, X74, X75, X76, X77, X78, X79, X80, X81, X82, X83) { } void dummy() override { } };
struct I75 { virtual ~I75() noexcept = default; virtual void dummy() = 0; }; struct Impl75 : I75 { BOOST_DI_INJECT(Impl75, X75, X76, X77, X78, X79, X80, X81, X82, X83, X84) { } void dummy() override { } };
struct I76 { virtual ~I76() noexcept = default; virtual void dummy() = 0; }; struct Impl76 : I76 { BOOST_DI_INJECT(Impl76, X76, X77, X78, X79, X80, X81, X82, X83, X84, X85) { } void dummy() override { } };
struct I77 { virtual ~I77() noexcept = default; virtual void dummy() = 0; }; struct Impl77 : I77 { BOOST_DI_INJECT(Impl77, X77, X78, X79, X80, X81, X82, X83, X84, X85, X86) { } void dummy() override { } };
struct I78 { virtual ~I78() noexcept = default; virtual void dummy() = 0; }; struct Impl78 : I78 { BOOST_DI_INJECT(Impl78, X78, X79, X80, X81, X82, X83, X84, X85, X86, X87) { } void dummy() override { } };
struct I79 { virtual ~I79() noexcept = default; virtual void dummy() = 0; }; struct Impl79 : I79 { BOOST_DI_INJECT(Impl79, X79, X80, X81, X82, X83, X84, X85, X86, X87, X88) { } void dummy() override { } };
struct I80 { virtual ~I80() noexcept = default; virtual void dummy() = 0; }; struct Impl80 : I80 { BOOST_DI_INJECT(Impl80, X80, X81, X82, X83, X84, X85, X86, X87, X88, X89) { } void dummy() override { } };
struct I81 { virtual ~I81() noexcept = default; virtual void dummy() = 0; }; struct Impl81 : I81 { BOOST_DI_INJECT(Impl81, X81, X82, X83, X84, X85, X86, X87, X88, X89, X90) { } void dummy() override { } };
struct I82 { virtual ~I82() noexcept = default; virtual void dummy() = 0; }; struct Impl82 : I82 { BOOST_DI_INJECT(Impl82, X82, X83, X84, X85, X86, X87, X88, X89, X90, X91) { } void dummy() override { } };
struct I83 { virtual ~I83() noexcept = default; virtual void dummy() = 0; }; struct Impl83 : I83 { BOOST_DI_INJECT(Impl83, X83, X84, X85, X86, X87, X88, X89, X90, X91, X92) { } void dummy() override { } };
struct I84 { virtual ~I84() noexcept = default; virtual void dummy() = 0; }; struct Impl84 : I84 { BOOST_DI_INJECT(Impl84, X84, X85, X86, X87, X88, X89, X90, X91, X92, X93) { } void dummy() override { } };
struct I85 { virtual ~I85() noexcept = default; virtual void dummy() = 0; }; struct Impl85 : I85 { BOOST_DI_INJECT(Impl85, X85, X86, X87, X88, X89, X90, X91, X92, X93, X94) { } void dummy() override { } };
struct I86 { virtual ~I86() noexcept = default; virtual void dummy() = 0; }; struct Impl86 : I86 { BOOST_DI_INJECT(Impl86, X86, X87, X88, X89, X90, X91, X92, X93, X94, X95) { } void dummy() override { } };
struct I87 { virtual ~I87() noexcept = default; virtual void dummy() = 0; }; struct Impl87 : I87 { BOOST_DI_INJECT(Impl87, X87, X88, X89, X90, X91, X92, X93, X94, X95, X96) { } void dummy() override { } };
struct I88 { virtual ~I88() noexcept = default; virtual void dummy() = 0; }; struct Impl88 : I88 { BOOST_DI_INJECT(Impl88, X88, X89, X90, X91, X92, X93, X94, X95, X96, X97) { } void dummy() override { } };
struct I89 { virtual ~I89() noexcept = default; virtual void dummy() = 0; }; struct Impl89 : I89 { BOOST_DI_INJECT(Impl89, X89, X90, X91, X92, X93, X94, X95, X96, X97, X98) { } void dummy() override { } };
struct I90 { virtual ~I90() noexcept = default; virtual void dummy() = 0; }; struct Impl90 : I90 { BOOST_DI_INJECT(Impl90, X90, X91, X92, X93, X94, X95, X96, X97, X98, X99) { } void dummy() override { } };
struct I91 { virtual ~I91() noexcept = default; virtual void dummy() = 0; }; struct Impl91 : I91 { BOOST_DI_INJECT(Impl91, X91, X92, X93, X94, X95, X96, X97, X98, X99, X00) { } void dummy() override { } };
struct I92 { virtual ~I92() noexcept = default; virtual void dummy() = 0; }; struct Impl92 : I92 { BOOST_DI_INJECT(Impl92, X92, X93, X94, X95, X96, X97, X98, X99, X00, X01) { } void dummy() override { } };
struct I93 { virtual ~I93() noexcept = default; virtual void dummy() = 0; }; struct Impl93 : I93 { BOOST_DI_INJECT(Impl93, X93, X94, X95, X96, X97, X98, X99, X00, X01, X02) { } void dummy() override { } };
struct I94 { virtual ~I94() noexcept = default; virtual void dummy() = 0; }; struct Impl94 : I94 { BOOST_DI_INJECT(Impl94, X94, X95, X96, X97, X98, X99, X00, X01, X02, X03) { } void dummy() override { } };
struct I95 { virtual ~I95() noexcept = default; virtual void dummy() = 0; }; struct Impl95 : I95 { BOOST_DI_INJECT(Impl95, X95, X96, X97, X98, X99, X00, X01, X02, X03, X04) { } void dummy() override { } };
struct I96 { virtual ~I96() noexcept = default; virtual void dummy() = 0; }; struct Impl96 : I96 { BOOST_DI_INJECT(Impl96, X96, X97, X98, X99, X00, X01, X02, X03, X04, X05) { } void dummy() override { } };
struct I97 { virtual ~I97() noexcept = default; virtual void dummy() = 0; }; struct Impl97 : I97 { BOOST_DI_INJECT(Impl97, X97, X98, X99, X00, X01, X02, X03, X04, X05, X06) { } void dummy() override { } };
struct I98 { virtual ~I98() noexcept = default; virtual void dummy() = 0; }; struct Impl98 : I98 { BOOST_DI_INJECT(Impl98, X98, X99, X00, X01, X02, X03, X04, X05, X06, X07) { } void dummy() override { } };
struct I99 { virtual ~I99() noexcept = default; virtual void dummy() = 0; }; struct Impl99 : I99 { BOOST_DI_INJECT(Impl99, X99, X00, X01, X02, X03, X04, X05, X06, X07, X08) { } void dummy() override { } };
struct C0 { BOOST_DI_INJECT(C0, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C1 { BOOST_DI_INJECT(C1, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C2 { BOOST_DI_INJECT(C2, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C3 { BOOST_DI_INJECT(C3, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C4 { BOOST_DI_INJECT(C4, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C5 { BOOST_DI_INJECT(C5, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C6 { BOOST_DI_INJECT(C6, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C7 { BOOST_DI_INJECT(C7, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C8 { BOOST_DI_INJECT(C8, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct C9 { BOOST_DI_INJECT(C9, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr, std::unique_ptr) { } };
struct Complex { BOOST_DI_INJECT(Complex, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9) { } };
// clang-format on
auto module = [] {
// clang-format off
auto i = di::make_injector(
di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind.to()
, di::bind