b53e98a7f80cd1469bcf7edb4f9bce4a2ab531cd
[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 = 10>
16     struct HeavyValue {
17
18         int value;
19         size_t buffer_size;
20
21         size_t nNo;
22         size_t nWriterNo;
23         static std::vector<int> pop_buff;
24
25         explicit HeavyValue(int new_value = 0, size_t new_bufer_size = DefaultSize)
26         : value(new_value),
27           buffer_size(new_bufer_size),
28           nNo(0),
29           nWriterNo(0)
30         {
31             if( buffer_size != pop_buff.size() ){
32                 pop_buff.resize(buffer_size);
33                 for(size_t i = 0; i < buffer_size; ++i)
34                    pop_buff[i] = i;
35             }
36         };
37         HeavyValue(const HeavyValue &other)
38             : value(other.value),
39               buffer_size(other.buffer_size),
40               nNo(other.nNo),
41               nWriterNo(other.nWriterNo)
42         {
43             for(size_t i = 0; i < buffer_size; ++i)
44                 pop_buff[i] =  static_cast<int>(std::sqrt(other.pop_buff[i]));
45         }
46         void operator=(const int& new_value)
47         {
48             value = new_value;
49         }
50         bool operator==(const int new_value) const
51         {
52             return value == new_value;
53         }
54         bool operator<=(const int new_value) const
55         {
56             return value <= new_value;
57         }
58         bool operator<(const int new_value) const
59         {
60             return value < new_value;
61         }
62         bool operator>(const int new_value) const
63         {
64             return value > new_value;
65         }
66         bool operator>=(const int new_value) const
67         {
68             return value >= new_value;
69         }
70     };
71
72     template<int DefaultSize>
73     std::vector<int> HeavyValue< DefaultSize >::pop_buff = {};
74 }
75 #endif /* SOURCE_DIRECTORY__TEST_INCLUDE_CDS_TEST_FC_HEVY_VALUE_H_ */