1. 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
  2. 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
  3. 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
  4. 4fdf228 Address a Clang 4.0 warning (so that Fruit compiles without warnings with Clang 4.0). by Marco Poletti · 7 years ago
  5. 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
  6. 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
  7. 56e84d4 Introduce a FRUIT_USES_BOOST CMake flag to allow building Fruit without Boost. by Marco Poletti · 7 years ago
  8. f8d1e29 Cleanup hashset/hashmap-related Fruit code. by Marco Poletti · 7 years ago
  9. c6b2e6e Mark constexpr methods as const, to silence a MSVC warning. by Marco Poletti · 7 years ago
  10. 56492f7 Add some integer casts to prevent overflows on 64bit Windows. by Marco Poletti · 7 years ago
  11. 6412745 Fix another build error introduced by commit 905dc09. by Marco Poletti · 7 years ago
  12. 905dc09 Support building Fruit with MSVC. by Marco Poletti · 7 years ago
  13. 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
  14. 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
  15. 66918a4 Improve 'binding not found' errors for abstract classes and add a specific e2e test. by Marco Poletti · 8 years ago
  16. 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
  17. 072fb36 Improve test coverage for bind<>. Also forbid non-class types in bind<>. by Marco Poletti · 8 years ago
  18. 0acba69 Improve test coverage for bindInstance, and report more user-friendly error messages in some error cases. by Marco Poletti · 8 years ago
  19. 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
  20. 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
  21. 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
  22. c75d608 Fix typo in doxygen comment. by Marco Poletti · 8 years ago
  23. 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
  24. 04cf924 Various minor executable size optimizations. by Marco Poletti · 8 years ago
  25. 6414851 Re-inline some component_storage methods, the increase in object size is relatively small. by Marco Poletti · 8 years ago
  26. 0316a00 Reimplement the storage for PartialComponent to: by Marco Poletti · 8 years ago
  27. 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
  28. feaed5c Report an error when passing a pointer to bindInstance(), instead of reporting an obscure error later on. by Marco Poletti · 8 years ago
  29. ba4d179 No longer include boost::hash{set,map} in fruit.h (not even as forward decls). by Marco Poletti · 8 years ago
  30. 3e576c2 No longer include normalized_component_storage.h in fruit.h. by Marco Poletti · 8 years ago
  31. 62f2574 Reduce the amount of code included when including fruit.h. by Marco Poletti · 8 years ago
  32. c6d5955 Use a singly-linked list instead of double-linked. This improves performance. by Marco Poletti · 8 years ago
  33. 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
  34. 6bbf6c9 Remove the method SemistaticGraph::changeNodeToTerminal(), it was never used. by Marco Poletti · 8 years ago
  35. e7a6d4c Remove a superfluous std::move() that was actually decreasing performance (following a Clang warning). by Marco Poletti · 8 years ago
  36. 8db9216 Use lists with a custom allocator instead of caching vectors. by Marco Poletti · 8 years ago
  37. 9722c4d Optimize component construction (before normalization) by caching binding vectors instead of repeatedly destroying and reconstructing them. by Marco Poletti · 8 years ago
  38. 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
  39. 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
  40. 375ea5d Revert "Use custom allocators for hash sets/maps." by Marco Poletti · 8 years ago
  41. 802e590 Use custom allocators for hash sets/maps. by Marco Poletti · 8 years ago
  42. a7b1efb Switch to Boost's unordered_{hash,map}. by Marco Poletti · 8 years ago
  43. e99fdb7 Use sparsehash. by Marco Poletti · 8 years ago
  44. 42c3b7c Do less compile-time work when FRUIT_NO_LOOP_CHECK was specified. by Marco Poletti · 8 years ago
  45. 72760b0 Allow recursive injection (Provider<T>::get() called while injecting another class U). by Marco Poletti · 8 years ago
  46. 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
  47. 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
  48. 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
  49. 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
  50. a198dbd Add assertions to help diagnose an error caught by Asan when using libc++ and Clang 3.8. by Marco Poletti · 8 years ago
  51. ea234f7 Use the default constructor for NormalizedComponentStorage instead of defining one explicitly. by Marco Poletti · 8 years ago
  52. 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
  53. 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
  54. ebe1225 Remove a couple of old debug-only hacks that are no longer needed. by Marco Poletti · 8 years ago
  55. cd6625f No longer handle the merge of interface bindings when installing a component, it can't happen anymore. by Marco Poletti · 8 years ago
  56. 4147b40 Forbid copying PartialComponent objects. by Marco Poletti · 8 years ago
  57. 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
  58. f10c67e Shift a size_t instead of shifting an int and then converting to size_t. by Marco Poletti · 8 years ago
  59. 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
  60. 0109baa Move binding types to fruit::impl. by Marco Poletti · 8 years ago
  61. 79b01d6 Get rid of remaining "using namespace" directives in header files. by Marco Poletti · 8 years ago
  62. 6cf268f Simplify component.defn.h (also getting rid of an "using namespace" that was there). by Marco Poletti · 8 years ago
  63. 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
  64. 6026b75 Report a specific error when a type is bound to itself. by Marco Poletti · 8 years ago
  65. 5852508 Filter out None elements in ConstructErrorWithArgVector. by Marco Poletti · 8 years ago
  66. 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
  67. 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
  68. 2a1d5c7 Some tweaks trying to make Fruit tests work on OS X. by Marco Poletti · 8 years ago
  69. 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
  70. 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
  71. d5fa227 Print more compiler-related information in the Travis CI postsubmits. by Marco Poletti · 8 years ago
  72. 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
  73. b9a4bec Fix compile error that appeared only with -DFRUIT_EXTRA_DEBUG. by Marco Poletti · 8 years ago
  74. 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
  75. cbe3c7a Now PartialComponent is parameterized on human-readable binding types, instead of metaprogramming types. by Marco Poletti · 8 years ago
  76. 0d5e069 Get rid of the last per-compiler check, introducing a new FRUIT_HAS_CXA_DEMANGLE configure macro. by Marco Poletti · 8 years ago
  77. 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
  78. 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
  79. 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
  80. f41d236 Remove code that was (technically) undefined behavior in LambdaInvoker (it broke strict aliasing rules). by Marco Poletti · 9 years ago
  81. 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
  82. 3c54483 Report more informative errors when an abstract class is used instead of a concrete class. by Marco Poletti · 9 years ago
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 0954754 Minor optimizations to the compile-time code. by Marco Poletti · 9 years ago
  89. e5c936b Replace a MapContainsKey with an IsInSet check where possible. This slightly improves compile-time performance. by Marco Poletti · 9 years ago
  90. 38b8df4 Optimize the Fold() operator, slightly increasing compile-time performance. by Marco Poletti · 9 years ago
  91. 1ff06b3 Reduce noise in (most) error messages by delaying the error reporting to the component conversion. by Marco Poletti · 9 years ago
  92. 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
  93. daf6222 Add a PartialCall metafunction and use it so that vector transforms now can use normal metafunctions. by Marco Poletti · 9 years ago
  94. ebc3312 Add a TransformVector meta-operation and use instead of doing transforms explicitly everywhere. by Marco Poletti · 9 years ago
  95. 3b95a51 Refactor a bit the metaprogramming code, plus some small optimizations. by Marco Poletti · 9 years ago
  96. 603c252 Improve compile-time performance by ~5% with a few small optimizations. by Marco Poletti · 9 years ago
  97. 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
  98. 1188cfc Fix compile error occurring only with GCC5 (which does a stricter check on prototype/definition signature consistency). by Marco Poletti · 9 years ago
  99. 2197297 Make a field of InjectorStorage private again (was temporarily turned into public). by Marco Poletti · 9 years ago
  100. 4fe2e72 Avoid duplication in the implementation of GetHelper by calling GetHelper recursively. by Marco Poletti · 9 years ago