Simplify lsp state types

This commit is contained in:
Glen Fernandes
2017-07-01 10:00:47 -04:00
parent e4ba116d7e
commit 3aa419463c

View File

@ -51,48 +51,34 @@ private:
template<class A> template<class A>
class lsp_array_state class lsp_array_state
: public lsp_array_base { : public sp_array_state<A> {
public: public:
typedef A type;
template<class U> template<class U>
lsp_array_state(const U& allocator, std::size_t size) BOOST_SP_NOEXCEPT lsp_array_state(const U& other, std::size_t size) BOOST_SP_NOEXCEPT
: allocator_(allocator), : sp_array_state<A>(other, size) { }
size_(size) { }
A& allocator() BOOST_SP_NOEXCEPT { lsp_array_base& base() BOOST_SP_NOEXCEPT {
return allocator_; return base_;
}
std::size_t size() const BOOST_SP_NOEXCEPT {
return size_;
} }
private: private:
A allocator_; lsp_array_base base_;
std::size_t size_;
}; };
template<class A, std::size_t N> template<class A, std::size_t N>
class lsp_size_array_state class lsp_size_array_state
: public lsp_array_base { : public sp_size_array_state<A, N> {
public: public:
typedef A type;
template<class U> template<class U>
lsp_size_array_state(const U& allocator, std::size_t) BOOST_SP_NOEXCEPT lsp_size_array_state(const U& other, std::size_t size) BOOST_SP_NOEXCEPT
: allocator_(allocator) { } : sp_size_array_state<A, N>(other, size) { }
A& allocator() BOOST_SP_NOEXCEPT { lsp_array_base& base() BOOST_SP_NOEXCEPT {
return allocator_; return base_;
}
BOOST_CONSTEXPR std::size_t size() const BOOST_SP_NOEXCEPT {
return N;
} }
private: private:
A allocator_; lsp_array_base base_;
}; };
} /* detail */ } /* detail */
@ -111,7 +97,7 @@ allocate_local_shared(const A& allocator, std::size_t count)
base* node = result.get(); base* node = result.get();
scalar* start = detail::sp_array_start<base, scalar>(node); scalar* start = detail::sp_array_start<base, scalar>(node);
::new(static_cast<void*>(node)) base(allocator, size, start); ::new(static_cast<void*>(node)) base(allocator, size, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),
@ -134,7 +120,7 @@ allocate_local_shared(const A& allocator)
base* node = result.get(); base* node = result.get();
scalar* start = detail::sp_array_start<base, scalar>(node); scalar* start = detail::sp_array_start<base, scalar>(node);
::new(static_cast<void*>(node)) base(allocator, size, start); ::new(static_cast<void*>(node)) base(allocator, size, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),
@ -158,7 +144,7 @@ allocate_local_shared(const A& allocator, std::size_t count,
::new(static_cast<void*>(node)) base(allocator, size, ::new(static_cast<void*>(node)) base(allocator, size,
reinterpret_cast<const scalar*>(&value), reinterpret_cast<const scalar*>(&value),
detail::sp_array_count<type>::value, start); detail::sp_array_count<type>::value, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),
@ -184,7 +170,7 @@ allocate_local_shared(const A& allocator,
::new(static_cast<void*>(node)) base(allocator, size, ::new(static_cast<void*>(node)) base(allocator, size,
reinterpret_cast<const scalar*>(&value), reinterpret_cast<const scalar*>(&value),
detail::sp_array_count<type>::value, start); detail::sp_array_count<type>::value, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),
@ -206,7 +192,7 @@ allocate_local_shared_noinit(const A& allocator, std::size_t count)
scalar* start = detail::sp_array_start<base, scalar>(node); scalar* start = detail::sp_array_start<base, scalar>(node);
::new(static_cast<void*>(node)) base(detail::sp_default(), allocator, ::new(static_cast<void*>(node)) base(detail::sp_default(), allocator,
size, start); size, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),
@ -230,7 +216,7 @@ allocate_local_shared_noinit(const A& allocator)
scalar* start = detail::sp_array_start<base, scalar>(node); scalar* start = detail::sp_array_start<base, scalar>(node);
::new(static_cast<void*>(node)) base(detail::sp_default(), allocator, ::new(static_cast<void*>(node)) base(detail::sp_default(), allocator,
size, start); size, start);
detail::lsp_array_base& local = node->state(); detail::lsp_array_base& local = node->state().base();
local.set(node); local.set(node);
result.release(); result.release();
return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(), return local_shared_ptr<T>(detail::lsp_internal_constructor_tag(),