Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
contrib
epee
include
reg_exp_definer.h
Go to the documentation of this file.
1
// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are met:
6
// * Redistributions of source code must retain the above copyright
7
// notice, this list of conditions and the following disclaimer.
8
// * Redistributions in binary form must reproduce the above copyright
9
// notice, this list of conditions and the following disclaimer in the
10
// documentation and/or other materials provided with the distribution.
11
// * Neither the name of the Andrey N. Sabelnikov nor the
12
// names of its contributors may be used to endorse or promote products
13
// derived from this software without specific prior written permission.
14
//
15
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
19
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
//
26
27
28
#ifndef _REG_EXP_DEFINER_H_
29
#define _REG_EXP_DEFINER_H_
30
31
#include <atomic>
32
#include <boost/regex.hpp>
33
#include "
syncobj.h
"
34
35
namespace
epee
36
{
37
class
global_regexp_critical_section
38
{
39
private
:
40
mutable
critical_section
regexp_lock
;
41
public
:
42
global_regexp_critical_section
(){}
43
critical_section
&
get_lock
()
const
{
return
regexp_lock
;}
44
};
45
46
const
static
global_regexp_critical_section
gregexplock
;
47
48
#define STATIC_REGEXP_EXPR_1(var_name, xpr_text, reg_exp_flags) \
49
static std::atomic<bool> regexp_initialized_1(false);\
50
volatile uint32_t local_is_initialized_1 = regexp_initialized_1;\
51
if(!local_is_initialized_1)\
52
gregexplock.get_lock().lock();\
53
static const boost::regex var_name(xpr_text , reg_exp_flags);\
54
if(!local_is_initialized_1)\
55
{\
56
regexp_initialized_1 = true;\
57
gregexplock.get_lock().unlock();\
58
}
59
60
#define STATIC_REGEXP_EXPR_2(var_name, xpr_text, reg_exp_flags) \
61
static std::atomic<bool> regexp_initialized_2(false);\
62
volatile uint32_t local_is_initialized_2 = regexp_initialized_2;\
63
if(!local_is_initialized_2)\
64
gregexplock.get_lock().lock().lock();\
65
static const boost::regex var_name(xpr_text , reg_exp_flags);\
66
if(!local_is_initialized_2)\
67
{\
68
regexp_initialized_2 = true;\
69
gregexplock.get_lock().lock().unlock();\
70
}
71
72
#define STATIC_REGEXP_EXPR_3(var_name, xpr_text, reg_exp_flags) \
73
static std::atomic<bool> regexp_initialized_3(false);\
74
volatile uint32_t local_is_initialized_3 = regexp_initialized_3;\
75
if(!local_is_initialized_3)\
76
gregexplock.get_lock().lock().lock();\
77
static const boost::regex var_name(xpr_text , reg_exp_flags);\
78
if(!local_is_initialized_3)\
79
{\
80
regexp_initialized_3 = true;\
81
gregexplock.get_lock().lock().unlock();\
82
}
83
}
84
85
#endif
//_REG_EXP_DEFINER_H_
epee::critical_section
Definition
syncobj.h:82
epee::global_regexp_critical_section
Definition
reg_exp_definer.h:38
epee::global_regexp_critical_section::global_regexp_critical_section
global_regexp_critical_section()
Definition
reg_exp_definer.h:42
epee::global_regexp_critical_section::regexp_lock
critical_section regexp_lock
Definition
reg_exp_definer.h:40
epee::global_regexp_critical_section::get_lock
critical_section & get_lock() const
Definition
reg_exp_definer.h:43
epee
TODO: (mj-xmr) This will be reduced in an another PR.
Definition
byte_slice.h:40
epee::gregexplock
static const global_regexp_critical_section gregexplock
Definition
reg_exp_definer.h:46
syncobj.h
Generated on
for Monero by
1.17.0