Electroneum
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 <boost/interprocess/detail/atomic.hpp>
32
#include "
syncobj.h
"
33
34
namespace
epee
35
{
36
class
global_regexp_critical_section
37
{
38
private
:
39
mutable
critical_section
regexp_lock;
40
public
:
41
global_regexp_critical_section
(){}
42
critical_section
&
get_lock
()
const
{
return
regexp_lock;}
43
};
44
45
const
static
global_regexp_critical_section gregexplock;
46
47
#define STATIC_REGEXP_EXPR_1(var_name, xpr_text, reg_exp_flags) \
48
static volatile uint32_t regexp_initialized_1 = 0;\
49
volatile uint32_t local_is_initialized_1 = regexp_initialized_1;\
50
if(!local_is_initialized_1)\
51
gregexplock.get_lock().lock();\
52
static const boost::regex var_name(xpr_text , reg_exp_flags);\
53
if(!local_is_initialized_1)\
54
{\
55
boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_1, 1);\
56
gregexplock.get_lock().unlock();\
57
}
58
59
#define STATIC_REGEXP_EXPR_2(var_name, xpr_text, reg_exp_flags) \
60
static volatile uint32_t regexp_initialized_2 = 0;\
61
volatile uint32_t local_is_initialized_2 = regexp_initialized_2;\
62
if(!local_is_initialized_2)\
63
gregexplock.get_lock().lock().lock();\
64
static const boost::regex var_name(xpr_text , reg_exp_flags);\
65
if(!local_is_initialized_2)\
66
{\
67
boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_2, 1);\
68
gregexplock.get_lock().lock().unlock();\
69
}
70
71
#define STATIC_REGEXP_EXPR_3(var_name, xpr_text, reg_exp_flags) \
72
static volatile uint32_t regexp_initialized_3 = 0;\
73
volatile uint32_t local_is_initialized_3 = regexp_initialized_3;\
74
if(!local_is_initialized_3)\
75
gregexplock.get_lock().lock().lock();\
76
static const boost::regex var_name(xpr_text , reg_exp_flags);\
77
if(!local_is_initialized_3)\
78
{\
79
boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_3, 1);\
80
gregexplock.get_lock().lock().unlock();\
81
}
82
}
83
84
#endif //_REG_EXP_DEFINER_H_
syncobj.h
epee::global_regexp_critical_section
Definition:
reg_exp_definer.h:36
epee::global_regexp_critical_section::get_lock
critical_section & get_lock() const
Definition:
reg_exp_definer.h:42
epee::critical_section
Definition:
syncobj.h:81
epee::global_regexp_critical_section::global_regexp_critical_section
global_regexp_critical_section()
Definition:
reg_exp_definer.h:41
epee
Definition:
ado_db_helper.h:66
contrib
epee
include
reg_exp_definer.h
Generated on Sun Mar 10 2024 12:00:00 for Electroneum by
1.8.14