Compare commits

..

3 Commits

Author SHA1 Message Date
Glen Fernandes
74cbc0f659 Merge branch 'develop' 2019-05-03 20:01:49 -04:00
Glen Fernandes
2f03d28dab Update appveyor configuration 2019-05-03 17:38:44 -04:00
Glen Fernandes
5bdb4f852c Use alloc_construct utilities from Boost.Core 2019-05-03 10:24:32 -04:00
3 changed files with 16 additions and 80 deletions

View File

@@ -12,19 +12,27 @@ branches:
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-9.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-10.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-11.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-12.0
ADDRMD: 32,64
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
TOOLSET: msvc-14.0
ADDRMD: 32,64
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: msvc-14.1
CXXSTD: 14,17
ADDRMD: 32,64
STANDARD: 14,17
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLSET: clang-win
ADDRMD: 32,64
STANDARD: 14,17
install:
- set BOOST_BRANCH=develop

View File

@@ -33,7 +33,7 @@
#include "boost/multi_array/subarray.hpp"
#include "boost/multi_array/multi_array_ref.hpp"
#include "boost/multi_array/algorithm.hpp"
#include "boost/multi_array/allocators.hpp"
#include "boost/core/alloc_construct.hpp"
#include "boost/core/empty_value.hpp"
#include "boost/array.hpp"
#include "boost/mpl/if.hpp"
@@ -545,12 +545,12 @@ private:
base_ = allocator().allocate(this->num_elements());
this->set_base_ptr(base_);
allocated_elements_ = this->num_elements();
detail::multi_array::construct(allocator(),base_,base_+allocated_elements_);
boost::alloc_construct_n(allocator(),base_,allocated_elements_);
}
void deallocate_space() {
if(base_) {
detail::multi_array::destroy(allocator(),base_,base_+allocated_elements_);
boost::alloc_destroy_n(allocator(),base_,allocated_elements_);
allocator().deallocate(base_,allocated_elements_);
}
}

View File

@@ -1,72 +0,0 @@
// Copyright 2018 Glen Joseph Fernandes
// (glenjofe@gmail.com)
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MULTI_ARRAY_ALLOCATORS_HPP
#define BOOST_MULTI_ARRAY_ALLOCATORS_HPP
#include <boost/config.hpp>
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
#include <memory>
#else
#include <new>
#endif
namespace boost {
namespace detail {
namespace multi_array {
template<class A, class T>
inline void destroy(A& allocator, T* ptr, T* end)
{
for (; ptr != end; ++ptr) {
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
std::allocator_traits<A>::destroy(allocator,ptr);
#else
ptr->~T();
#endif
}
}
template<class A, class T>
inline void construct(A& allocator, T* ptr)
{
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
std::allocator_traits<A>::construct(allocator,ptr);
#else
::new(static_cast<void*>(ptr)) T();
#endif
}
#if !defined(BOOST_NO_EXCEPTIONS)
template<class A, class T>
inline void construct(A& allocator, T* ptr, T* end)
{
T* start = ptr;
try {
for (; ptr != end; ++ptr) {
boost::detail::multi_array::construct(allocator,ptr);
}
} catch (...) {
boost::detail::multi_array::destroy(allocator,start,ptr);
throw;
}
}
#else
template<class A, class T>
inline void construct(A& allocator, T* ptr, T* end)
{
for (; ptr != end; ++ptr) {
boost::detail::multi_array::construct(allocator,ptr);
}
}
#endif
} // multi_array
} // detail
} // boost
#endif