Line data Source code
1 : //
2 : // Author: Vladimir Migashko <migashko@wamba.com>, (C) 2013
3 : //
4 : // Copyright: See COPYING file that comes with this distribution
5 : //
6 :
7 : #ifndef COMPARATORS_OFFSET_COMPARE_HPP
8 : #define COMPARATORS_OFFSET_COMPARE_HPP
9 :
10 : namespace vset{
11 :
12 : /**
13 : * @brief Обертка компаратора для сравнения целочисленных смещений менеджера памяти
14 : * @tparam O смещение (обычно size_t, uint32_t или uint16_t)
15 : * @tparam M менеджер памяти (vset::memory::fsb_mmap, vset::memory::fsb_inmem)
16 : * @tparam C компаратор для исходных типов
17 : */
18 : template<typename O, typename M, typename C>
19 : class offset_compare: C
20 : {
21 : public:
22 : typedef C super;
23 : typedef O offset_t;
24 : typedef M memory_manager_type;
25 : typedef typename memory_manager_type::pointer pointer_type;
26 :
27 : /**
28 : * @brief Конструктор создает неинициализированный объект, кторый нельзя использовать для сравнения
29 : */
30 1 : offset_compare()
31 : : lvp()
32 1 : , rvp()
33 : {
34 1 : }
35 :
36 : /**
37 : * @brief Конструктор
38 : * @param ptr указатель на любой объект менеджера памяти, в том числе и, например, vset::memory::fsb_mmap::end()
39 : */
40 1 : explicit offset_compare( pointer_type ptr )
41 : : lvp(ptr)
42 1 : , rvp(ptr)
43 : {
44 1 : }
45 :
46 : /**
47 : * @brief Оператор сравнения
48 : * @param left значение для сравнения
49 : * @param right значение для сравнения
50 : */
51 393 : bool operator() ( offset_t left, offset_t right ) const
52 : {
53 393 : lvp.set_offset( left );
54 393 : rvp.set_offset( right );
55 393 : return super::operator()(*lvp, *rvp);
56 : }
57 :
58 : private:
59 :
60 : mutable pointer_type lvp;
61 : mutable pointer_type rvp;
62 : };
63 :
64 : }
65 :
66 : #endif
|