MPQC
2.3.1
src
lib
util
group
rnglock.h
1
//
2
// rnglock.h
3
//
4
// Copyright (C) 1996 Limit Point Systems, Inc.
5
//
6
// Author: Curtis Janssen <cljanss@limitpt.com>
7
// Maintainer: LPS
8
//
9
// This file is part of the SC Toolkit.
10
//
11
// The SC Toolkit is free software; you can redistribute it and/or modify
12
// it under the terms of the GNU Library General Public License as published by
13
// the Free Software Foundation; either version 2, or (at your option)
14
// any later version.
15
//
16
// The SC Toolkit is distributed in the hope that it will be useful,
17
// but WITHOUT ANY WARRANTY; without even the implied warranty of
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
// GNU Library General Public License for more details.
20
//
21
// You should have received a copy of the GNU Library General Public License
22
// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
//
25
// The U.S. Government is granted a limited license as per AL 91-7.
26
//
27
28
#ifdef __GNUC__
29
#pragma interface
30
#endif
31
32
#ifndef _util_group_rnglock_h
33
#define _util_group_rnglock_h
34
35
#include <iostream>
36
37
#include <util/misc/exenv.h>
38
39
namespace
sc {
40
41
class
Pool;
42
43
class
RangeLockItem
{
44
public
:
45
RangeLockItem
*prev;
46
RangeLockItem
*next;
47
int
start;
48
int
fence;
49
int
value;
50
RangeLockItem
(
RangeLockItem
*p,
RangeLockItem
*n,
int
s,
int
f,
int
v):
51
prev(p), next(n), start(s), fence(f), value(v) {}
52
~
RangeLockItem
() {};
53
54
static
void
*
operator
new
(size_t,
Pool
*);
55
static
void
operator
delete
(
void
*,
Pool
*);
56
};
57
58
class
RangeLockValOp;
59
class
RangeLock
{
60
private
:
61
RangeLockItem
*root_;
62
Pool
*pool_;
63
64
void
split_ranges(
int
start,
int
fence);
65
void
do_valop(RangeLockValOp&,
int
start,
int
fence);
66
public
:
67
RangeLock
(
Pool
*pool = 0);
68
~
RangeLock
();
69
70
void
increment(
int
start,
int
fence);
71
void
decrement(
int
start,
int
fence);
72
void
set(
int
start,
int
fence,
int
value);
73
void
sum(
int
start,
int
fence,
int
delta);
74
75
// check for anything within a range to be equal to a value
76
int
checkeq(
int
start,
int
fence,
int
value);
77
// check for anything within a range to be greater than a value
78
int
checkgr(
int
start,
int
fence,
int
value);
79
80
void
check();
81
void
print(std::ostream &o =
ExEnv::out0
())
const
;
82
83
int
lockvalue(
int
i);
84
};
85
86
}
87
88
#endif
89
90
// Local Variables:
91
// mode: c++
92
// c-file-style: "CLJ"
93
// End:
sc::RangeLock
Definition:
rnglock.h:59
sc::Pool
Definition:
pool.h:266
sc::RangeLockItem
Definition:
rnglock.h:43
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
Generated at Sun Jan 26 2020 23:33:04 for
MPQC
2.3.1 using the documentation package
Doxygen
1.8.16.