main page
modules
namespaces
classes
files
Gecode home
Generated on Fri Aug 24 2012 04:52:06 for Gecode by
doxygen
1.8.1.2
gecode
gist
node.hh
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Guido Tack <tack@gecode.org>
5
*
6
* Copyright:
7
* Guido Tack, 2006
8
*
9
* Last modified:
10
* $Date: 2010-08-12 21:38:27 +1000 (Thu, 12 Aug 2010) $ by $Author: zayenz $
11
* $Revision: 11349 $
12
*
13
* This file is part of Gecode, the generic constraint
14
* development environment:
15
* http://www.gecode.org
16
*
17
* Permission is hereby granted, free of charge, to any person obtaining
18
* a copy of this software and associated documentation files (the
19
* "Software"), to deal in the Software without restriction, including
20
* without limitation the rights to use, copy, modify, merge, publish,
21
* distribute, sublicense, and/or sell copies of the Software, and to
22
* permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be
26
* included in all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
*
36
*/
37
38
#ifndef GECODE_GIST_NODE_HH
39
#define GECODE_GIST_NODE_HH
40
41
#include <
gecode/kernel.hh
>
42
43
namespace
Gecode {
namespace
Gist {
44
45
class
VisualNode;
46
48
template
<
class
T>
49
class
NodeAllocatorBase
{
50
private
:
52
static
const
int
NodeBlockSize = 1<<14;
54
class
Block {
55
public
:
57
T b[NodeBlockSize];
59
int
best
[NodeBlockSize];
60
};
62
Block** b;
64
int
n;
66
int
cur_b;
68
int
cur_t;
70
void
allocate(
void
);
72
bool
_bab;
73
public
:
75
NodeAllocatorBase
(
bool
bab
);
77
~NodeAllocatorBase
(
void
);
79
int
allocate(
int
p);
81
int
allocate(
Space
* root);
83
T*
operator []
(
int
i
)
const
;
85
T*
best
(
int
i)
const
;
87
void
setBest
(
int
i,
int
b);
89
bool
bab
(
void
)
const
;
90
};
91
93
class
Node
{
94
private
:
96
enum
{
97
UNDET,
//< Number of children not determined
98
LEAF,
//< Leaf node
99
TWO_CHILDREN,
//< Node with at most two children
100
MORE_CHILDREN
//< Node with more than two children
101
};
102
104
void
* childrenOrFirstChild;
105
109
int
noOfChildren;
110
112
int
parent;
113
115
unsigned
int
getTag(
void
)
const
;
117
void
setTag(
unsigned
int
tag);
119
void
* getPtr(
void
)
const
;
121
int
getFirstChild(
void
)
const
;
122
123
protected
:
125
bool
isUndetermined
(
void
)
const
;
126
128
int
getChild
(
int
n)
const
;
129
public
:
130
typedef
NodeAllocatorBase<VisualNode>
NodeAllocator
;
131
133
Node
(
int
p,
bool
failed =
false
);
134
136
int
getParent
(
void
)
const
;
138
VisualNode
*
getParent
(
const
NodeAllocator
& na)
const
;
140
VisualNode
*
getChild
(
const
NodeAllocator
& na,
int
n)
const
;
141
143
int
getIndex
(
const
NodeAllocator
& na)
const
;
144
146
bool
isRoot
(
void
)
const
;
147
149
void
setNumberOfChildren
(
unsigned
int
n,
NodeAllocator
& na);
150
152
unsigned
int
getNumberOfChildren
(
void
)
const
;
153
154
};
155
156
}}
157
158
#endif
159
160
// STATISTICS: gist-any