4 * Created on: 31 авг. 2016 г.
8 #ifndef SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_
9 #define SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_
18 class has_set_array_size {
19 typedef char select_small;
24 template <typename C, void (C::*) (size_t)> class selector
27 template <typename C> static select_small test( selector<C, &C::set_array>* );
28 template <typename C> static select_big test(...);
31 static constexpr bool value = sizeof(test<T>(0)) == sizeof(char);
34 template<int DefaultSize = 10>
42 static std::vector<int> pop_buff;
43 static size_t buffer_size;
45 explicit heavy_value(int new_value = 0)
51 heavy_value( heavy_value const& other)
54 , nWriterNo(other.nWriterNo)
56 // This is an imitation of heavy copy ctor
57 for(size_t i = 0; i < buffer_size; ++i)
58 pop_buff[i] = static_cast<int>( std::sqrt( std::abs( static_cast<double>( pop_buff[i] ) * rand())));
61 void set_array(size_t new_size)
63 set_array_size(new_size);
66 static void set_array_size(size_t new_size)
68 if (buffer_size == new_size) return;
69 buffer_size = new_size;
70 pop_buff.resize(buffer_size, rand());
74 template<int DefaultSize>
75 std::vector<int> heavy_value< DefaultSize >::pop_buff(DefaultSize, rand());
76 template<int DefaultSize>
77 std::vector<int>::size_type heavy_value< DefaultSize >::buffer_size = DefaultSize;
79 #endif /* SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEVY_VALUE_H_ */