71693f72a92b9e08378d8e625f1494d3cff0de13
[libcds.git] / test / include / cds_test / fc_hevy_value.h
1 /*
2  * fc_hevy_value.h
3  *
4  *  Created on: 31 авг. 2016 г.
5  *      Author: marsel
6  */
7
8 #ifndef SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_
9 #define SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEAVY_VALUE_H_
10
11 #include <math.h>
12 #include <vector>
13
14 namespace{
15         template<int DefaultSize = 10000>
16         struct HeavyValue {
17                 static std::vector<int> pop_buff;
18                 int value;
19                 size_t buffer_size;
20
21                 size_t nNo;
22                 size_t nWriterNo;
23
24                 explicit HeavyValue(int new_value = 0, size_t new_bufer_size = DefaultSize)
25                 : value(new_value),
26                   buffer_size(new_bufer_size),
27                   nNo(0),
28                   nWriterNo(0)
29
30                 {
31                         if( buffer_size != pop_buff.size() ){
32                                 pop_buff.resize(buffer_size);
33                         }
34                 };
35                 HeavyValue(const HeavyValue &other)
36                         : value(other.value),
37                           buffer_size(other.buffer_size)
38                 {
39                         working(other);
40                 }
41                 void operator=(const int& new_value)
42                 {
43                         value = new_value;
44                 }
45                 bool operator==(const int new_value) const
46                 {
47                         return value == new_value;
48                 }
49                 void working(const HeavyValue &other) {
50                         for (size_t i = 0; i < buffer_size; ++i)
51                                 pop_buff[i] =  static_cast<int>(std::sqrt(other.pop_buff[i]));
52                 }
53         };
54
55         template<int DefaultSize>
56         std::vector<int> HeavyValue< DefaultSize >::pop_buff = {};
57 }
58 #endif /* SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEVY_VALUE_H_ */