1. 3e21dcf Make the Fruit deprecated marker work in Visual Studio. by Marco Poletti · 7 years ago
  2. 11a9561 Update the example code and doxygen comments to use the new-style install() methods. by Marco Poletti · 7 years ago
  3. c9e7a0b Mark the old PartialComponent::install() method as deprecated. by Marco Poletti · 7 years ago
  4. a636283 Make HasDuplicatesHelper compile on MSVC again. by Marco Poletti · 7 years ago
  5. f67a5bc Extract a 'constant' in HasDuplicates, trying to help MSVC parse that code (while GCC and Clang can parse it just fine already). by Marco Poletti · 7 years ago
  6. 55b5410 Add a wrapping Id<> in HasDuplicates, to (try to) fix compilation in Visual Studio. by Marco Poletti · 7 years ago
  7. 5de0d4f Simplify the new install() API. by Marco Poletti · 7 years ago
  8. 09843e0 Add a new PartialComponent#install() method that takes a function + args. This has the potential of being much more efficient than the one that takes a Component; however for now it's just implemented as a wrapper around the old install() method. by Marco Poletti · 7 years ago
  9. fef4823 Use a SumAll metafunction instead of a staticSum constexpr function, since constexpr functions are slower in GCC (at least in GCC 6). by Marco Poletti · 7 years ago
  10. 0a1436f Remove the constexpr-based staticOr, use the StaticOr metafunction instead. staticOr is significantly slower under GCC. by Marco Poletti · 7 years ago
  11. fdc7990 When injecting shared_ptr<>s dependencies for an object, first inject (pointers to) all dependencies and then construct all the shared_ptr<>s at the end, before calling the constructor/provider. This helps the optimizer optimize out increments/decrements/checks of the shared_ptr<> reference count (this is useful at least for GCC 6; e.g. Clang 4 already optimized those out without this re-organization of the code). by Marco Poletti · 7 years ago
  12. dfcdced If __attribute__((always_inline)) is not supported by the compiler, use MSVC's __forceinline if that's available and fallback to nothing if neither is supported. by Marco Poletti · 7 years ago
  13. 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
  14. 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
  15. 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
  16. 4fdf228 Address a Clang 4.0 warning (so that Fruit compiles without warnings with Clang 4.0). by Marco Poletti · 7 years ago
  17. 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
  18. 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
  19. 56e84d4 Introduce a FRUIT_USES_BOOST CMake flag to allow building Fruit without Boost. by Marco Poletti · 7 years ago
  20. f8d1e29 Cleanup hashset/hashmap-related Fruit code. by Marco Poletti · 7 years ago
  21. c6b2e6e Mark constexpr methods as const, to silence a MSVC warning. by Marco Poletti · 7 years ago
  22. 56492f7 Add some integer casts to prevent overflows on 64bit Windows. by Marco Poletti · 7 years ago
  23. 6412745 Fix another build error introduced by commit 905dc09. by Marco Poletti · 7 years ago
  24. 905dc09 Support building Fruit with MSVC. by Marco Poletti · 7 years ago
  25. 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
  26. 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
  27. 66918a4 Improve 'binding not found' errors for abstract classes and add a specific e2e test. by Marco Poletti · 8 years ago
  28. 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
  29. 072fb36 Improve test coverage for bind<>. Also forbid non-class types in bind<>. by Marco Poletti · 8 years ago
  30. 0acba69 Improve test coverage for bindInstance, and report more user-friendly error messages in some error cases. by Marco Poletti · 8 years ago
  31. 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
  32. 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
  33. 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
  34. c75d608 Fix typo in doxygen comment. by Marco Poletti · 8 years ago
  35. 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
  36. 04cf924 Various minor executable size optimizations. by Marco Poletti · 8 years ago
  37. 6414851 Re-inline some component_storage methods, the increase in object size is relatively small. by Marco Poletti · 8 years ago
  38. 0316a00 Reimplement the storage for PartialComponent to: by Marco Poletti · 8 years ago
  39. 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
  40. feaed5c Report an error when passing a pointer to bindInstance(), instead of reporting an obscure error later on. by Marco Poletti · 8 years ago
  41. ba4d179 No longer include boost::hash{set,map} in fruit.h (not even as forward decls). by Marco Poletti · 8 years ago
  42. 3e576c2 No longer include normalized_component_storage.h in fruit.h. by Marco Poletti · 8 years ago
  43. 62f2574 Reduce the amount of code included when including fruit.h. by Marco Poletti · 8 years ago
  44. c6d5955 Use a singly-linked list instead of double-linked. This improves performance. by Marco Poletti · 8 years ago
  45. 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
  46. 6bbf6c9 Remove the method SemistaticGraph::changeNodeToTerminal(), it was never used. by Marco Poletti · 8 years ago
  47. e7a6d4c Remove a superfluous std::move() that was actually decreasing performance (following a Clang warning). by Marco Poletti · 8 years ago
  48. 8db9216 Use lists with a custom allocator instead of caching vectors. by Marco Poletti · 8 years ago
  49. 9722c4d Optimize component construction (before normalization) by caching binding vectors instead of repeatedly destroying and reconstructing them. by Marco Poletti · 8 years ago
  50. 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
  51. 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
  52. 375ea5d Revert "Use custom allocators for hash sets/maps." by Marco Poletti · 8 years ago
  53. 802e590 Use custom allocators for hash sets/maps. by Marco Poletti · 8 years ago
  54. a7b1efb Switch to Boost's unordered_{hash,map}. by Marco Poletti · 8 years ago
  55. e99fdb7 Use sparsehash. by Marco Poletti · 8 years ago
  56. 42c3b7c Do less compile-time work when FRUIT_NO_LOOP_CHECK was specified. by Marco Poletti · 8 years ago
  57. 72760b0 Allow recursive injection (Provider<T>::get() called while injecting another class U). by Marco Poletti · 8 years ago
  58. 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
  59. 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
  60. 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
  61. 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
  62. a198dbd Add assertions to help diagnose an error caught by Asan when using libc++ and Clang 3.8. by Marco Poletti · 8 years ago
  63. ea234f7 Use the default constructor for NormalizedComponentStorage instead of defining one explicitly. by Marco Poletti · 8 years ago
  64. 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
  65. 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
  66. ebe1225 Remove a couple of old debug-only hacks that are no longer needed. by Marco Poletti · 8 years ago
  67. cd6625f No longer handle the merge of interface bindings when installing a component, it can't happen anymore. by Marco Poletti · 8 years ago
  68. 4147b40 Forbid copying PartialComponent objects. by Marco Poletti · 8 years ago
  69. 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
  70. f10c67e Shift a size_t instead of shifting an int and then converting to size_t. by Marco Poletti · 8 years ago
  71. 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
  72. 0109baa Move binding types to fruit::impl. by Marco Poletti · 8 years ago
  73. 79b01d6 Get rid of remaining "using namespace" directives in header files. by Marco Poletti · 8 years ago
  74. 6cf268f Simplify component.defn.h (also getting rid of an "using namespace" that was there). by Marco Poletti · 8 years ago
  75. 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
  76. 6026b75 Report a specific error when a type is bound to itself. by Marco Poletti · 8 years ago
  77. 5852508 Filter out None elements in ConstructErrorWithArgVector. by Marco Poletti · 8 years ago
  78. 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
  79. 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
  80. 2a1d5c7 Some tweaks trying to make Fruit tests work on OS X. by Marco Poletti · 8 years ago
  81. 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
  82. 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
  83. d5fa227 Print more compiler-related information in the Travis CI postsubmits. by Marco Poletti · 8 years ago
  84. 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 · 9 years ago
  85. b9a4bec Fix compile error that appeared only with -DFRUIT_EXTRA_DEBUG. by Marco Poletti · 9 years ago
  86. 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 · 9 years ago
  87. cbe3c7a Now PartialComponent is parameterized on human-readable binding types, instead of metaprogramming types. by Marco Poletti · 9 years ago
  88. 0d5e069 Get rid of the last per-compiler check, introducing a new FRUIT_HAS_CXA_DEMANGLE configure macro. by Marco Poletti · 9 years ago
  89. 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 · 9 years ago
  90. 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 · 9 years ago
  91. 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
  92. f41d236 Remove code that was (technically) undefined behavior in LambdaInvoker (it broke strict aliasing rules). by Marco Poletti · 9 years ago
  93. 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
  94. 3c54483 Report more informative errors when an abstract class is used instead of a concrete class. by Marco Poletti · 9 years ago
  95. 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
  96. 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
  97. 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
  98. 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
  99. 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
  100. 0954754 Minor optimizations to the compile-time code. by Marco Poletti · 9 years ago