Merge pull request #20 from weefuzzy/better-concurrency

Better concurrency
nix
tremblap 4 years ago committed by GitHub
commit 5237cc5a3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

File diff suppressed because it is too large Load Diff

@ -0,0 +1,60 @@
/*
Part of the Fluid Corpus Manipulation Project (http://www.flucoma.org/)
Copyright 2017-2019 University of Huddersfield.
Licensed under the BSD-3 License.
See license.md file in the project root for full license information.
This project has received funding from the European Research Council (ERC)
under the European Unions Horizon 2020 research and innovation programme
(grant agreement No 725899).
*/
#pragma once
#include <SC_PlugIn.hpp>
#include <cstdlib>
#include <limits>
#include <new>
namespace fluid {
template <typename T, typename Wrapper>
class SCWorldAllocator
{
World* mWorld;
InterfaceTable* mInterface;
public:
using propagate_on_container_move_assignment = std::true_type;
using value_type = T;
template <typename U, typename W>
friend class SCWorldAllocator;
SCWorldAllocator(World* w, InterfaceTable* interface)
: mWorld{w}, mInterface{interface}
{}
template <typename U, typename W>
SCWorldAllocator(const SCWorldAllocator<U, W>& other) noexcept
{
mWorld = other.mWorld;
mInterface = other.mInterface;
}
T* allocate(std::size_t n)
{
if (n > std::numeric_limits<std::size_t>::max() / sizeof(T))
throw std::bad_array_new_length();
if (mWorld && mInterface)
if (auto p = static_cast<T*>(mInterface->fRTAlloc(mWorld, n * sizeof(T))))
return p;
throw std::bad_alloc();
}
void deallocate(T* p, std::size_t /*n*/) noexcept
{
if (mWorld && mInterface) mInterface->fRTFree(mWorld, p);
}
};
} // namespace fluid

@ -17,8 +17,8 @@ target_link_libraries(
${PLUGIN} PRIVATE FLUID_DECOMPOSITION
)
include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake)
if(MSVC)
target_compile_options(${PLUGIN} PRIVATE /bigobj)
if(WIN32)
target_compile_options(${PLUGIN} PUBLIC /bigobj)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake)

Loading…
Cancel
Save