- bc7a2df Revert part of commit f06151, that part actually made Fruit slightly slower now that the hash table is bigger. by Marco Poletti · 6 years ago
- f061517 Some small optimizations when constructing a SemistaticMap. by Marco Poletti · 6 years ago
- c41eb97 Double the size of SemistaticMap's hash table, with the previous size there can be many collisions when the number of elements is just under a power of 2. by Marco Poletti · 6 years ago
- 8c79fba Make componentFunction() work with MSVC 2015. by Marco Poletti · 6 years ago
- 6794aa7 (try to) workaround a MSVC 2015 bug on overload resolution with a variadic type list that can be empty. by Marco Poletti · 6 years ago
- 5fbea5b Another attempt at improving the error messages for componentFunction() misuse when using MSVC. by Marco Poletti · 6 years ago
- 7a0a167 Revert "Slight change to componentFunction() so that the user gets a better error in MSVC when they try to pass a param type that's not movable." by Marco Poletti · 6 years ago
- dc2acf5 Slight change to componentFunction() so that the user gets a better error in MSVC when they try to pass a param type that's not movable. by Marco Poletti · 6 years ago
- 893f655 Move the RemoveAnnotation<> helper out of Injector<> to fix a compiler crash in recent versions of MSVC 2017. by Marco Poletti · 6 years ago
- 2a24a06 Fix some macro issues introduced by the previous commit. by Marco Poletti · 6 years ago
- 066d689 Use #if instead of #ifdef for Fruit macros (apart from include guards). by Marco Poletti · 6 years ago
- ecd9c29 Minor change in installComponentFunctions(), hoping to workaround a MSVC bug that causes a compilation error when dealing with initializer lists. by Marco Poletti · 6 years ago
- 4cd88f0 Fix a compile error with old versions of the STL where std::tuple's constructor is marked as explicit. by Marco Poletti · 6 years ago
- b1af2be Fix a method overload ambiguity error (Clang-only) when using installComponentFunctions(). by Marco Poletti · 6 years ago
- 5397682 Remove an extra semicolon that was causing a warning in pedantic mode. by Marco Poletti · 6 years ago
- ef35710 Merge branch 'master' of github.com:google/fruit by Marco Poletti · 6 years ago
- 3c9c517 Add a PartialComponent::installComponentFunctions() method that allows to install a variable number of components (typically by expanding a template parameter pack). by Marco Poletti · 6 years ago
- 58040a5 Include <thread> in injector_storage.h for std::recursive_mutex, trying to fix a compile error on Windows with old versions of GCC. by Marco Poletti · 6 years ago
- c62fb68 Cast explicitly from node_iterator to const_node_iterator (otherwise MSVC chokes on code comparing the two). by Marco Poletti · 6 years ago
- 7187fbb Add a SemistaticGraph::node_iterator -> SemistaticGraph::const_node_iterator conversion, now needed in an assertion. by Marco Poletti · 6 years ago
- d81f3dc Make Fruit injectors accessible concurrently from multiple threads. This commit is probably backwards-incompatible on some platforms (e.g. OS X), so I expect CI errors in some configurations. I'll add a CMake flag to allow switching this off in a separate commit. by Marco Poletti · 6 years ago
- 11728df Add another workaround for the MSVC 2017 bug. by Marco Poletti · 6 years ago
- 93c195c Workaround a regression in the MSVC 2017 15.5 compiler. by Marco Poletti · 6 years ago
- 1b959ab Add a .clang-format config file and reformat all C++ source code using that. Also added some documentation on the preferred style in CONTRIBUTING.md. by Marco Poletti · 7 years ago
- dad7ba8 Try to workaround some Visual Studio ICEs that appeared in the last Appveyor build. by Marco Poletti · 7 years ago
- 59fe3a2 A few more fixes to make Fruit work under MSVC 2015 and 2017 in Appveyor. by Marco Poletti · 7 years ago
- 680c75a Another attempt to make Fruit work with MSVC (2015 and 2017) in Appveyor. by Marco Poletti · 7 years ago
- 23a4495 Fix compilation on Linux. by Marco Poletti · 7 years ago
- 7cdc510 Added support for MSVC 14 (VS2015) by Clayton Lemons · 7 years ago
- 4d26bed Report a compile time error when an class must have a virtual destructor but doesn't have one. by Marco Poletti · 7 years ago
- bdb151a Fix a bug in FixedSizeVector where std::allocator::deallocate() was called with an incorrect size after swapping vectors. When using a malloc-based std:allocator this was not an issue (since free doesn't take the size as a parameter), but it can cause problems with other STL implementations. by Marco Poletti · 7 years ago
- aa95150 Only call std::allocator::deallocate() in FixedSizeVector for non-empty vectors. When using a malloc-based std:allocator this was not an issue (since free(0) is a no-op), but it can cause problems with other STL implementations. by Marco Poletti · 7 years ago
- 872de45 Add an #include to fix a compile error when fruit/normalized_component.h is included on its own. by Marco Poletti · 7 years ago
- 666ed2a Make install() de-duplication and component replacements work across NormalizedComponent+Component. by Marco Poletti · 7 years ago
- 6ae9208 Change Injector's and NormalizedComponent's constructors to take a component function + args (like the new PartialComponent::install) instead of taking a Component<> directly. by Marco Poletti · 7 years ago
- 3a92133 Allow implicit conversions in the arguments passed to PartialComponent's install() and replace().with() methods. by Marco Poletti · 7 years ago
- 95cb811 Allow bind<I,C> when C was bound as a constant (and I is only needed as a constant). by Marco Poletti · 7 years ago
- 418e9bf Allow binding const references in bindInstance. by Marco Poletti · 7 years ago
- 0d55521 Remove Injector::unsafeGet. Also change Fruit tests to use a Fruit-internal version of that (that returns a const pointer, in preparation for supporting const-only bindings). by Marco Poletti · 7 years ago
- 6da3f8d Workaround a (different) MSVC bug that was causing compilation failures. by Marco Poletti · 7 years ago
- 9719f73 Add another workaround for the MSVC bug that affects some metafunctions. by Marco Poletti · 7 years ago
- 3016ee2 Workaround a MSVC bug that was causing compile errors in the ConvertComponent metafunction. by Marco Poletti · 7 years ago
- c84c7de Allow Component, NormalizedComponent, Injector and Provider to specify that they only require/provide a const T (instead of requiring/providing a T). This is in preparation for allowing const bindings. by Marco Poletti · 7 years ago
- b95efcc Report better errors when attempting to bind/inject a type that can't be bound/injected. Also add more thorough tests for these cases, in preparation for supporting const bindings. by Marco Poletti · 7 years ago
- 91ce401 Define PartialComponentWithReplaceInProgress within ParttialComponent, otherwise MSVC chokes on the out-of-class definition. Also rename it to PartialComponentWithReplacementInProgress. by Marco Poletti · 7 years ago
- 508af7c Remove Component's copy constructor, conversion operator and install method. by Marco Poletti · 7 years ago
- f810408 Remove workarounds for GCC 4.8.x bugs now that it's no longer supported. by Marco Poletti · 7 years ago
- 2012b39 Fix a memory leak introduced with the replacement component feature. This was detected by Asan and Valgrind. by Marco Poletti · 7 years ago
- a5e1db0 Fix a compile error encountered when building Fruit without boost. by Marco Poletti · 7 years ago
- 5d549fa Remove a couple of unnecessary semicolons that were causing compilation warnings. by Marco Poletti · 7 years ago
- 102a707 Add a new PartialComponent feature: component replacement. by Marco Poletti · 7 years ago
- 46b3d22 Add LCOV_* comments to suppress line/branch coverage for unreachable lines/branches. by Marco Poletti · 7 years ago
- 629be9d Delete dead code (found in the coerage report). by Marco Poletti · 7 years ago
- a0228a2 Workaround a GCC 4.8 bug causing FixedSizeAllocator's move-assignment operator to misbehave (but only in release mode). This issue was caught by Valgrind. by Marco Poletti · 7 years ago
- 4511c4e Remove a few superfluous FRUIT_UNREACHABLEs. These were causing warning C4702 with MSVC (and that was treated as an error due to /WX). by Marco Poletti · 7 years ago
- e2b3cc9 Use FRUIT_UNREACHABLE in places where we report an irrecoverable error. by Marco Poletti · 7 years ago
- 3486f49 Introduce a FRUIT_UNREACHABLE macro and use it instead of FruitAssert(false) in places that are known to be unreachable, to help the compiler optimize out those branches. by Marco Poletti · 7 years ago
- f862062 Avoid a Clang warning when using FruitStaticAssert at class/struct level in release mode. by Marco Poletti · 7 years ago
- 14db200 Fix a Windows-only compile error caused by a type mismatch. by Marco Poletti · 7 years ago
- f966c50 Fix a couple of compile warnings (that were considered as errors due to -Werror). by Marco Poletti · 7 years ago
- dcf7e03 Fix a debug-only compile error. by Marco Poletti · 7 years ago
- 76f2649 Don't calculate BindingCompressionInfoMap when constructing an injector directly from a Component. We'll never need to undo binding compression in that case. by Marco Poletti · 7 years ago
- fc8a232 Always inline MemoryPool::allocate. In the common case where n==1, when this method is inlined the compiler can significantly simplify the code. by Marco Poletti · 7 years ago
- ac054f0 Avoid excessive re-sizing in MemoryPool. This should (marginally) improve performance. by Marco Poletti · 7 years ago
- 3e12b3d Use arena allocation for BindingCompressionInfoMap too. by Marco Poletti · 7 years ago
- a8c2964 Use arena allocation for temporary collections created when normalizing a component and when initializing an injector, to improve performance. by Marco Poletti · 7 years ago
- 03d9c9f Declare Component's copy constructor explicitly instead of relying on the default implementation, hoping that this will let MSVC report the deprecated warning (it doesn't ATM). by Marco Poletti · 7 years ago
- 69e5748 Fix 2 memory leaks when dealing with lazy component with arguments. These were detected by Valgrind and ASan during CI tests. by Marco Poletti · 7 years ago
- 589fdbc Fix the order of multibindings (that was knowingly broken in commit c563512e), and add tests to make sure all corner-cases wrt lazy components are covered. by Marco Poletti · 7 years ago
- d757cd1 Move the 'NormalizedComponent + Component' merging logic from injector_storage.cpp to binding_normalization.*. Also refactor the code to avoid a double pass on the entries array when a single pass is enough. by Marco Poletti · 7 years ago
- 8ff8ec6 No longer collect binding compressions when they're not needed (i.e. when constructing an Injector from a NormalizedComponent + a Component). by Marco Poletti · 7 years ago
- 8f9720e Simplify/optimize binding splitting: now we no longer need the intermediate vectors for bindings and compressed bindings. by Marco Poletti · 7 years ago
- f2bec68 Use a FixedSizeVector instead of an std::vector in ComponentStorage, so that we'll do at most 1 allocation per ComponentStorage (and we don't need the size checks on push_back anymore). by Marco Poletti · 7 years ago
- c563512 Change the internal representation of Component to use a single vector instead of using separate vector for various kinds of bindings. This reduces the amount of allocation/deallocation done when moving/copying Components. However this changes the order in which multibindings are returned by the injector; that will be fixed in a follow-up commit. by Marco Poletti · 7 years ago
- c3334a5 More class moves/renames in preparation for the upcoming change in the representation of bindings. by Marco Poletti · 7 years ago
- 6103cdb Move binding-related headers from fruit/impl/ to fruit/impl/bindings/, in preparation for more binding-related changes. by Marco Poletti · 7 years ago
- 4018a7b Implement an optimization for the new-style install, in the case when there are no arguments to the getComponent function. by Marco Poletti · 7 years ago
- 6ea962d Remove superfluous param names in defaulted constructors/methods. For some reason, Apple Clang considers the first (at least) as an unused parameter and emits a warning about that. by Marco Poletti · 7 years ago
- c6fea76 Implement de-duping and loop checking for the new-style install() method. by Marco Poletti · 7 years ago
- 716773c First step of the real implementation of the new install method: now lazy components are expanded at normalization time instead of install time; however component de-duplication and loop checking are still missing. by Marco Poletti · 7 years ago
- 3e21dcf Make the Fruit deprecated marker work in Visual Studio. by Marco Poletti · 7 years ago
- c9e7a0b Mark the old PartialComponent::install() method as deprecated. by Marco Poletti · 7 years ago
- a636283 Make HasDuplicatesHelper compile on MSVC again. by Marco Poletti · 7 years ago
- 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
- 55b5410 Add a wrapping Id<> in HasDuplicates, to (try to) fix compilation in Visual Studio. by Marco Poletti · 7 years ago
- 5de0d4f Simplify the new install() API. by Marco Poletti · 7 years ago
- 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
- 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
- 0a1436f Remove the constexpr-based staticOr, use the StaticOr metafunction instead. staticOr is significantly slower under GCC. by Marco Poletti · 7 years ago
- 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
- 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
- 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
- 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