- 1e44d55 Fix a performance bug that was preventing binding compression from working. E.g. with the 100 classes benchmark under Clang 4.0, this fix reduces the per-request injection time by 27%. by Marco Poletti · 7 years ago
- d1b46ee Extract the lambdas used to create injected objects from create*BindingDataFor* methods, into static methods. For some reason, Clang (4.0 at least) would otherwise generate an __invoke method wrapping each lambda for no apparent reason. This change reduces (slightly) the executable size. by Marco Poletti · 7 years ago
- 9198ba0 Force inlining of some functions/methods that will only be called once, and use std::forward to forward arguments. This reduces the code size and helps the optimizer. The lack of inlining was causing an 8x slowdown of the per-request injection time with Clang and a 2.5x increase in the executable size. by Marco Poletti · 7 years ago
- 4fdf228 Address a Clang 4.0 warning (so that Fruit compiles without warnings with Clang 4.0). by Marco Poletti · 7 years ago
- 552790f Report an error if Required<...> is passed as a non-first argument to Component/NormalizedComponent. This is not supported, and it was hard to figure out the issue before (in some cases the Required<> type was just ignored). Also add relevant tests. by Marco Poletti · 7 years ago
- b1e00d9 Add a note in fruit::Injector's conversion operator documentation explaining that it can't be used for annotated injection. Fixes issue #23. by Marco Poletti · 7 years ago
- 56e84d4 Introduce a FRUIT_USES_BOOST CMake flag to allow building Fruit without Boost. by Marco Poletti · 7 years ago
- f8d1e29 Cleanup hashset/hashmap-related Fruit code. by Marco Poletti · 7 years ago
- c6b2e6e Mark constexpr methods as const, to silence a MSVC warning. by Marco Poletti · 7 years ago
- 56492f7 Add some integer casts to prevent overflows on 64bit Windows. by Marco Poletti · 7 years ago
- 6412745 Fix another build error introduced by commit 905dc09. by Marco Poletti · 7 years ago
- 905dc09 Support building Fruit with MSVC. by Marco Poletti · 7 years ago
- 8a8c76f Add an include to fix a compile error introduced by fa6a049 (that happened only in some compilation modes). by Marco Poletti · 7 years ago
- fa6a049 Don't call alignof(T) for abstract types. This is not supported in Visual Studio (and Fruit never needs this value for abstract types anyway). by Marco Poletti · 7 years ago
- 66918a4 Improve 'binding not found' errors for abstract classes and add a specific e2e test. by Marco Poletti · 8 years ago
- 3a7b93d Move test-only code to a separate header instead of using include guards. This fixes a compile error that occurred only in release mode, due to the use of PCHs in tests. Also remove the ConstructProofForest metafunction since it was never used. by Marco Poletti · 8 years ago
- 072fb36 Improve test coverage for bind<>. Also forbid non-class types in bind<>. by Marco Poletti · 8 years ago
- 0acba69 Improve test coverage for bindInstance, and report more user-friendly error messages in some error cases. by Marco Poletti · 8 years ago
- 417e045 Improve testing coverage of binding clashes using parameterized tests. Also fix a few cases where a clashing interface binding was ignored instead of causing an error. by Marco Poletti · 8 years ago
- 8b2abe6 Compile with -pedantic in debug mode, and fix a few issues that were reported, notably a declaration of a 0-length array that isn't standard C++ (even though GCC and Clang accept it). Fixes issue 26. by Marco Poletti · 8 years ago
- 1c7e821 Make the FruitAssistedTypedef and FruitAnnotatedTypedef typedefs public, so that the INJECT macro no longer needs to contain private:/public: specifiers. The public: specifier could have unintentionally exposed private parts of a class if INJECT is used in the private part of a class. by Marco Poletti · 8 years ago
- c75d608 Fix typo in doxygen comment. by Marco Poletti · 8 years ago
- 8223fe5 Execute lazyGetPtr() calls all together before the corresponding getPtr() calls. This improves per-request performance by ~10%, but causes an increase of ~15-20% of the executable size. by Marco Poletti · 8 years ago
- 04cf924 Various minor executable size optimizations. by Marco Poletti · 8 years ago
- 6414851 Re-inline some component_storage methods, the increase in object size is relatively small. by Marco Poletti · 8 years ago
- 0316a00 Reimplement the storage for PartialComponent to: by Marco Poletti · 8 years ago
- cf5c9f1 No longer inline some component-related code, to reduce the executable size of client code using Fruit. This yields a ~6x reduction in the benchmark with 100 classes (1.6MB -> 275KB). by Marco Poletti · 8 years ago
- feaed5c Report an error when passing a pointer to bindInstance(), instead of reporting an obscure error later on. by Marco Poletti · 8 years ago
- ba4d179 No longer include boost::hash{set,map} in fruit.h (not even as forward decls). by Marco Poletti · 8 years ago
- 3e576c2 No longer include normalized_component_storage.h in fruit.h. by Marco Poletti · 8 years ago
- 62f2574 Reduce the amount of code included when including fruit.h. by Marco Poletti · 8 years ago
- c6d5955 Use a singly-linked list instead of double-linked. This improves performance. by Marco Poletti · 8 years ago
- 29c8cf4 Save memory and slightly improve performance by storing a BindingData in 3*sizeof(void*) bytes instead of 4*sizeof(void*). by Marco Poletti · 8 years ago
- 6bbf6c9 Remove the method SemistaticGraph::changeNodeToTerminal(), it was never used. by Marco Poletti · 8 years ago
- e7a6d4c Remove a superfluous std::move() that was actually decreasing performance (following a Clang warning). by Marco Poletti · 8 years ago
- 8db9216 Use lists with a custom allocator instead of caching vectors. by Marco Poletti · 8 years ago
- 9722c4d Optimize component construction (before normalization) by caching binding vectors instead of repeatedly destroying and reconstructing them. by Marco Poletti · 8 years ago
- 886289c Switch back to an STL hashmap for multibindings and debug-only maps, and avoid including Boost's hashmap in public headers to reduce the compile time of code using Fruit. by Marco Poletti · 8 years ago
- 31335f8 Use a custom FruitAssert macro instead of plain assert() so that client code can compile with/without NDEBUG but without the additional slowdown caused by assertions in Fruit. by Marco Poletti · 8 years ago
- 375ea5d Revert "Use custom allocators for hash sets/maps." by Marco Poletti · 8 years ago
- 802e590 Use custom allocators for hash sets/maps. by Marco Poletti · 8 years ago
- a7b1efb Switch to Boost's unordered_{hash,map}. by Marco Poletti · 8 years ago
- e99fdb7 Use sparsehash. by Marco Poletti · 8 years ago
- 42c3b7c Do less compile-time work when FRUIT_NO_LOOP_CHECK was specified. by Marco Poletti · 8 years ago
- 72760b0 Allow recursive injection (Provider<T>::get() called while injecting another class U). by Marco Poletti · 8 years ago
- 0e7e515 Fix a bug that caused a compilation error when registering a factory of unique_ptr<C> when C was not copy-constructible. by Marco Poletti · 8 years ago
- b00d0d3 Fix a bug in registerFactory(), where compilation would fail if there were multiple non-assisted parameters with different types. by Marco Poletti · 8 years ago
- 866e0fb Fix a bug in assisted injection, that caused a compilation error when more than 1 argument to a function was assisted and they had different types. by Marco Poletti · 8 years ago
- 7bbb2e9 Fix a potentially-problematic issue where some fields were left initialized in a default-constructed SemistaticMap::HashFunction (although they were never read). by Marco Poletti · 8 years ago
- a198dbd Add assertions to help diagnose an error caught by Asan when using libc++ and Clang 3.8. by Marco Poletti · 8 years ago
- ea234f7 Use the default constructor for NormalizedComponentStorage instead of defining one explicitly. by Marco Poletti · 8 years ago
- f8cb4bc Rename Argz->Args in several places. This was used to work-around an old GCC bug, but it's not needed anymore. by Marco Poletti · 8 years ago
- 3b8e91a When FRUIT_DEEP_TEMPLATE_INSTANTIATION_STACKTRACES_FOR_ERRORS is enabled (only for debugging) unwrap the error arguments so that the correct Error is instantiated. by Marco Poletti · 8 years ago
- ebe1225 Remove a couple of old debug-only hacks that are no longer needed. by Marco Poletti · 8 years ago
- cd6625f No longer handle the merge of interface bindings when installing a component, it can't happen anymore. by Marco Poletti · 8 years ago
- 4147b40 Forbid copying PartialComponent objects. by Marco Poletti · 8 years ago
- dff7748 Report an error when binding a type twice, once with a bind<I, C>() and once with another kind of binding. by Marco Poletti · 8 years ago
- f10c67e Shift a size_t instead of shifting an int and then converting to size_t. by Marco Poletti · 8 years ago
- 40aaab1 Add a script to check that each defn.h header includes the main header and vice versa, fix current violations. by Marco Poletti · 8 years ago
- 0109baa Move binding types to fruit::impl. by Marco Poletti · 8 years ago
- 79b01d6 Get rid of remaining "using namespace" directives in header files. by Marco Poletti · 8 years ago
- 6cf268f Simplify component.defn.h (also getting rid of an "using namespace" that was there). by Marco Poletti · 8 years ago
- 169e50f When autoinjecting an annotated type, expect no annotation in the Inject typedef, instead of expecting the currently-required annotation. by Marco Poletti · 8 years ago
- 6026b75 Report a specific error when a type is bound to itself. by Marco Poletti · 8 years ago
- 5852508 Filter out None elements in ConstructErrorWithArgVector. by Marco Poletti · 8 years ago
- df07a49 Change the implementation of LambdaInvoker to avoid what was technically still undefined behavior (even though both GCC and Clang under Linux compiled fine). by Marco Poletti · 8 years ago
- b5ae785 Give up supporting AppleClang and clang 3.5 on OS X, they don't work due to compiler bugs (at least in the versions provided by Travis CI + brew). by Marco Poletti · 8 years ago
- 2a1d5c7 Some tweaks trying to make Fruit tests work on OS X. by Marco Poletti · 8 years ago
- 227bef1 Fix a few OS X-only issues, and blacklist Travis CI tests on OSX that use libstdc++ since they'll never work (the libstdc++ STL on OSX is very old, not C++11 compliant). by Marco Poletti · 8 years ago
- 370e4ff When the compiler/STL feature detection fails, fall back to the standard-compliant option and raise a warning, instead of raising unconditional errors later, during the build. by Marco Poletti · 8 years ago
- d5fa227 Print more compiler-related information in the Travis CI postsubmits. by Marco Poletti · 8 years ago
- e02d055 Workaround a bug in the STL shipped with GCC <4.8.2, where calling data() on an empty vector causes undefined behavior (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59829). by Marco Poletti · 8 years ago
- b9a4bec Fix compile error that appeared only with -DFRUIT_EXTRA_DEBUG. by Marco Poletti · 8 years ago
- e844355 Revert to the previous behavior of reporting errors early (as before the last commit), but maintaining the conciseness of instantiation traces. by Marco Poletti · 8 years ago
- cbe3c7a Now PartialComponent is parameterized on human-readable binding types, instead of metaprogramming types. by Marco Poletti · 8 years ago
- 0d5e069 Get rid of the last per-compiler check, introducing a new FRUIT_HAS_CXA_DEMANGLE configure macro. by Marco Poletti · 8 years ago
- 66906ac Some changes towards support of additional compilers/platforms (notably Intel C++ on Linux, Apple Clang on OS X and MSVC on Windows). by Marco Poletti · 8 years ago
- f289510 Add configure-time checks on compiler and STL features, and use the results of those in macros in Fruit code, instead of checking for specific compilers and/or versions. by Marco Poletti · 8 years ago
- 7e8b15a Change the metaprogramming library so that errors are now builtin and propagated by default (instead of having to be propagated manually which is very error-prone). by Marco Poletti · 9 years ago
- f41d236 Remove code that was (technically) undefined behavior in LambdaInvoker (it broke strict aliasing rules). by Marco Poletti · 9 years ago
- d3aa8f0 Avoid calling memcpy(0,0,0) in some cases, it's technically undefined behavior (even if it doesn't cause issues with GCC and Clang). by Marco Poletti · 9 years ago
- 3c54483 Report more informative errors when an abstract class is used instead of a concrete class. by Marco Poletti · 9 years ago
- a67d7f6 Add a Clang-only workaround for the Clang bug: https://llvm.org/bugs/show_bug.cgi?id=25669 by Marco Poletti · 9 years ago
- 05ad808 Fix compile errors in tests that appear only in release mode, by defining the relevant test-only macros in release mode too. by Marco Poletti · 9 years ago
- f9d58c1 Fix compile errors that happened in some cases when using assisted autoinjection, caused by two off by one error that were hiding each other in tests. by Marco Poletti · 9 years ago
- 661837a Improve testing coverage. Also fix a few bugs that in some cases caused compile-time errors (or internal errors instead of more user-friendly errors). by Marco Poletti · 9 years ago
- ec5c520 Use Set-specific operations (forwarding to Vector operations where appropriate) instead of using Vector operations directly on Sets. by Marco Poletti · 9 years ago
- 0954754 Minor optimizations to the compile-time code. by Marco Poletti · 9 years ago
- e5c936b Replace a MapContainsKey with an IsInSet check where possible. This slightly improves compile-time performance. by Marco Poletti · 9 years ago
- 38b8df4 Optimize the Fold() operator, slightly increasing compile-time performance. by Marco Poletti · 9 years ago
- 1ff06b3 Reduce noise in (most) error messages by delaying the error reporting to the component conversion. by Marco Poletti · 9 years ago
- 36253c9 Major changes to the metaprogramming code. Now using a DFS search to find dependency loops instead of transitive closure of the edges (at compile time), expressing more operations as Fold/Transform for conciseness, added ImmutableSet/ImmutableMap (compile-time data structures), now calculating the exact dep loop (if any), and many other small changes. by Marco Poletti · 9 years ago
- daf6222 Add a PartialCall metafunction and use it so that vector transforms now can use normal metafunctions. by Marco Poletti · 9 years ago
- ebc3312 Add a TransformVector meta-operation and use instead of doing transforms explicitly everywhere. by Marco Poletti · 9 years ago
- 3b95a51 Refactor a bit the metaprogramming code, plus some small optimizations. by Marco Poletti · 9 years ago
- 603c252 Improve compile-time performance by ~5% with a few small optimizations. by Marco Poletti · 9 years ago
- 010daa6 Rewrite all metaprogramming code to use a more readable style. What was Apply<F, X, Y> before can now be written as F(X, Y). After this commit all code uses the new style and passes existing tests, but there is a ~60% compile-time performance hit that still needs to be investigated/addressed. by Marco Poletti · 9 years ago
- 1188cfc Fix compile error occurring only with GCC5 (which does a stricter check on prototype/definition signature consistency). by Marco Poletti · 9 years ago
- 2197297 Make a field of InjectorStorage private again (was temporarily turned into public). by Marco Poletti · 9 years ago
- 4fe2e72 Avoid duplication in the implementation of GetHelper by calling GetHelper recursively. by Marco Poletti · 9 years ago