本文整理汇总了C++中Space类的典型用法代码示例。如果您正苦于以下问题:C++ Space类的具体用法?C++ Space怎么用?C++ Space使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Space类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void TBSpaceAllocator::FreeSpace(Space *space)
{
m_used_space_list.Remove(space);
m_available_space += space->width;
// Find where in m_free_space_list we should insert the space,
// or which existing space we can extend.
Space *preceeding = nullptr;
Space *succeeding = nullptr;
for (Space *fs = m_free_space_list.GetFirst(); fs; fs = fs->GetNext())
{
if (fs->x < space->x)
preceeding = fs;
if (fs->x > space->x)
{
succeeding = fs;
break;
}
}
if (preceeding && preceeding->x + preceeding->width == space->x)
{
preceeding->width += space->width;
delete space;
}
else if (succeeding && succeeding->x == space->x + space->width)
{
succeeding->x -= space->width;
succeeding->width += space->width;
delete space;
}
else
{
if (preceeding)
m_free_space_list.AddAfter(space, preceeding);
else if (succeeding)
m_free_space_list.AddBefore(space, succeeding);
else
{
assert(!m_free_space_list.HasLinks());
m_free_space_list.AddLast(space);
}
}
// Merge free spaces
Space *fs = m_free_space_list.GetFirst();
while (fs)
{
Space *next_fs = fs->GetNext();
if (!next_fs)
break;
if (fs->x + fs->width == next_fs->x)
{
fs->width += next_fs->width;
m_free_space_list.Delete(next_fs);
continue;
}
fs = next_fs;
}
#ifdef TB_RUNTIME_DEBUG_INFO
// Check that free space is in order
Space *tmp = m_free_space_list.GetFirst();
int x = 0;
while (tmp)
{
assert(tmp->x >= x);
x = tmp->x + tmp->width;
tmp = tmp->GetNext();
}
#endif // TB_RUNTIME_DEBUG_INFO
}
示例2: is
ExecStatus
SuperOfInter<View0,View1,View2>::propagate(Space& home, const ModEventDelta& med) {
bool allassigned = x0.assigned() && x1.assigned() && x2.assigned();
ModEvent me0 = View0::me(med);
ModEvent me1 = View1::me(med);
ModEvent me2 = View2::me(med);
bool modified = false;
do {
// glb(x2) >= glb(x0) ^ glb(x1)
if ( modified || Rel::testSetEventLB(me0,me1)) {
GlbRanges<View0> lb0(x0);
GlbRanges<View1> lb1(x1);
Iter::Ranges::Inter<GlbRanges<View0>,GlbRanges<View1> >
is(lb0, lb1);
GECODE_ME_CHECK_MODIFIED(modified,x2.includeI(home,is));
}
// lub(x0) -= glb(x1)-lub(x2)
// lub(x1) -= glb(x0)-lub(x2)
if ( modified || Rel::testSetEventAnyB(me0,me1,me2)) {
modified = false;
GlbRanges<View1> lb12(x1);
LubRanges<View2> ub22(x2);
Iter::Ranges::Diff<GlbRanges<View1>, LubRanges<View2> >
diff1(lb12, ub22);
GECODE_ME_CHECK_MODIFIED(modified, x0.excludeI(home,diff1));
GlbRanges<View0> lb01(x0);
LubRanges<View2> ub23(x2);
Iter::Ranges::Diff<GlbRanges<View0>, LubRanges<View2> >
diff2(lb01, ub23);
GECODE_ME_CHECK_MODIFIED(modified, x1.excludeI(home,diff2));
} else {
modified = false;
}
// Cardinality propagation
if ( modified ||
Rel::testSetEventCard(me0,me1,me2) ||
Rel::testSetEventUB(me0,me1)
) {
LubRanges<View0> ub0(x0);
LubRanges<View1> ub1(x1);
Iter::Ranges::Union<LubRanges<View0>, LubRanges<View1> > u(ub0,ub1);
unsigned int m = Iter::Ranges::size(u);
if (m < x0.cardMin() + x1.cardMin()) {
GECODE_ME_CHECK_MODIFIED(modified,
x2.cardMin( home,
x0.cardMin()+x1.cardMin() - m ) );
}
if (m + x2.cardMax() > x1.cardMin()) {
GECODE_ME_CHECK_MODIFIED(modified,
x0.cardMax( home,
m+x2.cardMax()-x1.cardMin() ) );
}
if (m + x2.cardMax() > x0.cardMin()) {
GECODE_ME_CHECK_MODIFIED(modified,
x1.cardMax( home,
m+x2.cardMax()-x0.cardMin() ) );
}
}
} while (modified);
if (shared(x0,x1,x2)) {
if (allassigned) {
return home.ES_SUBSUMED(*this);
} else {
return ES_NOFIX;
}
} else {
if (x0.assigned() + x1.assigned() + x2.assigned() >= 2) {
return home.ES_SUBSUMED(*this);
} else {
return ES_FIX;
}
}
}
示例3:
ExecStatus
NthRoot<A,B>::propagate(Space& home, const ModEventDelta&) {
GECODE_ME_CHECK(x1.eq(home,nth_root(x0.domain(),m_n)));
GECODE_ME_CHECK(x0.eq(home,pow(x1.domain(),m_n)));
return x0.assigned() ? home.ES_SUBSUMED(*this) : ES_FIX;
}
示例4: main
int main(int argc, char **argv) {
int res = ERR_SUCCESS;
#ifdef WITH_PETSC
PetscInitialize(&argc, &argv, (char *) PETSC_NULL, PETSC_NULL);
#endif
set_verbose(false);
if (argc < 5) error("Not enough parameters.");
H1ShapesetLobattoHex shapeset;
printf("* Loading mesh '%s'\n", argv[1]);
Mesh mesh;
Mesh3DReader mloader;
if (!mloader.load(argv[1], &mesh)) error("Loading mesh file '%s'\n", argv[1]);
printf("* Setting the space up\n");
H1Space space(&mesh, &shapeset);
space.set_bc_types(bc_types);
space.set_essential_bc_values(essential_bc_values);
int o[3] = { 0, 0, 0 };
sscanf(argv[2], "%d", o + 0);
sscanf(argv[3], "%d", o + 1);
sscanf(argv[4], "%d", o + 2);
order3_t order(o[0], o[1], o[2]);
printf(" - Setting uniform order to (%d, %d, %d)\n", order.x, order.y, order.z);
space.set_uniform_order(order);
WeakForm wf;
wf.add_matrix_form(bilinear_form<double, scalar>, bilinear_form<ord_t, ord_t>, SYM, ANY);
wf.add_vector_form(linear_form<double, scalar>, linear_form<ord_t, ord_t>, ANY);
LinearProblem lp(&wf);
lp.set_space(&space);
bool done = false;
int iter = 0;
do {
Timer assemble_timer("Assembling stiffness matrix");
Timer solve_timer("Solving stiffness matrix");
printf("\n=== Iter #%d ================================================================\n", iter);
printf("\nSolution\n");
#if defined WITH_UMFPACK
UMFPackMatrix mat;
UMFPackVector rhs;
UMFPackLinearSolver solver(&mat, &rhs);
#elif defined WITH_PARDISO
PardisoMatrix mat;
PardisoVector rhs;
PardisoLinearSolver solver(&mat, &rhs);
#elif defined WITH_PETSC
PetscMatrix mat;
PetscVector rhs;
PetscLinearSolver solver(&mat, &rhs);
#elif defined WITH_MUMPS
MumpsMatrix mat;
MumpsVector rhs;
MumpsSolver solver(&mat, &rhs);
#endif
int ndofs = space.assign_dofs();
printf(" - Number of DOFs: %d\n", ndofs);
// assemble stiffness matrix
printf(" - Assembling... "); fflush(stdout);
assemble_timer.reset();
assemble_timer.start();
lp.assemble(&mat, &rhs);
assemble_timer.stop();
printf("done in %s (%lf secs)\n", assemble_timer.get_human_time(), assemble_timer.get_seconds());
// solve the stiffness matrix
printf(" - Solving... "); fflush(stdout);
solve_timer.reset();
solve_timer.start();
bool solved = solver.solve();
solve_timer.stop();
if (solved)
printf("done in %s (%lf secs)\n", solve_timer.get_human_time(), solve_timer.get_seconds());
else {
res = ERR_FAILURE;
printf("failed\n");
break;
}
printf("Reference solution\n");
#if defined WITH_UMFPACK
UMFPackLinearSolver rsolver(&mat, &rhs);
#elif defined WITH_PARDISO
PardisoLinearSolver rsolver(&mat, &rhs);
#elif defined WITH_PETSC
PetscLinearSolver rsolver(&mat, &rhs);
#elif defined WITH_MUMPS
MumpsSolver rsolver(&mat, &rhs);
//.........这里部分代码省略.........
示例5: centerString
//Prints middle row with two spaces on either edge of the baord
//those spaces are in spaces[space1Index] and spaces[space2Index]
void Game_Board::printMiddleRow(int space1Index, int space2Index){
//print out each spaces name, centered and ending with a |
int padding = SPACE_WIDTH-2;
for(int i = 0; i < SPACES_IN_ROW; i++){
if(i == 0){
Space current = spaces[space1Index];
std::cout << "|" << std::left << std::setw(padding) << centerString(current.getName()) << "|";
} else if(i == 10){
Space current = spaces[space2Index];
std::cout << "|" << std::left << std::setw(padding) << centerString(current.getName()) << "|";
}else{
int x = 1;
if(i == 9) x = 2;
for(int j = 0; j < SPACE_WIDTH - x; j++){
std::cout << " ";
}
}
}
std::cout << std::endl; // right side ending bracket
//print out each spaces Owner, centered and ending with a |
for(int i = 0; i < SPACES_IN_ROW; i++){
if(i == 0){
Space current = spaces[space1Index];
if(current.isOwnable()){
std::string owner = current.getOwner();
std::string ownerLine = "Owner: " + owner;
std::cout << "|" << std::left << std::setw(padding) << centerString(ownerLine) << "|";
}else{
std::cout << "|";
for(int j = 0; j < SPACE_WIDTH - 2; j++){
std::cout << " ";
}
std::cout << "|";
}
} else if(i == 10){
Space current = spaces[space2Index];
if(current.isOwnable()){
std::string owner = current.getOwner();
std::string ownerLine = "Owner: " + owner;
std::cout << "|" << std::left << std::setw(padding) << centerString(ownerLine) << "|";
} else{
std::cout << "|";
for(int j = 0; j < SPACE_WIDTH - 2; j++){
std::cout << " ";
}
std::cout << "|";
}
}else{
int x = 1;
if(i == 9) x = 2;
for(int j = 0; j < SPACE_WIDTH - x; j++){
std::cout << " ";
}
}
}
std::cout << std::endl;
for(int i = 0; i < SPACES_IN_ROW; i++){
if(i == 0 || i == 10){
std::cout << "|";
for(int j = 0; j < SPACE_WIDTH-2; j++){
std::cout << " ";
}
std::cout << "|";
}else{
int x = 1;
if(i == 9) x = 2;
for(int j = 0; j < SPACE_WIDTH - x; j++){
std::cout << " ";
}
}
}
std::cout << std::endl;
//Prints out the players currently on each space
for(int i = 0; i < SPACES_IN_ROW; i++){
if(i == 0){
Space current = spaces[space1Index];
std::string result = current.playersOnSpaceToString();
std::cout << "|" << std::left << std::setw(padding) << centerString(result) << "|";
} else if(i == 10){
Space current = spaces[space2Index];
std::string result = current.playersOnSpaceToString();
std::cout << "|" << std::left << std::setw(padding) << centerString(result) << "|";
}else{
int x = 1;
if(i == 9) x = 2;
for(int j = 0; j < SPACE_WIDTH - x; j++){
std::cout << " ";
}
}
}
std::cout << std::endl;
}
示例6: main
int main()
{
// Create space, set Dirichlet BC, enumerate basis functions.
Space* space = new Space(A, B, NELEM, DIR_BC_LEFT, DIR_BC_RIGHT, P_INIT, NEQ, NEQ);
// Enumerate basis functions, info for user.
int ndof = Space::get_num_dofs(space);
info("ndof: %d", ndof);
// Initialize the weak formulation.
WeakForm wf(2);
wf.add_matrix_form(0, 0, jacobian_0_0);
wf.add_matrix_form(0, 1, jacobian_0_1);
wf.add_matrix_form(1, 0, jacobian_1_0);
wf.add_matrix_form(1, 1, jacobian_1_1);
wf.add_vector_form(0, residual_0);
wf.add_vector_form(1, residual_1);
// Initialize the FE problem.
bool is_linear = false;
DiscreteProblem *dp = new DiscreteProblem(&wf, space, is_linear);
// Newton's loop.
// Fill vector coeff_vec using dof and coeffs arrays in elements.
double *coeff_vec = new double[Space::get_num_dofs(space)];
get_coeff_vector(space, coeff_vec);
// Set up the solver, matrix, and rhs according to the solver selection.
SparseMatrix* matrix = create_matrix(matrix_solver);
Vector* rhs = create_vector(matrix_solver);
Solver* solver = create_linear_solver(matrix_solver, matrix, rhs);
int it = 1;
while (1) {
// Obtain the number of degrees of freedom.
int ndof = Space::get_num_dofs(space);
// Assemble the Jacobian matrix and residual vector.
dp->assemble(coeff_vec, matrix, rhs);
// Calculate the l2-norm of residual vector.
double res_l2_norm = get_l2_norm(rhs);
// Info for user.
info("---- Newton iter %d, ndof %d, res. l2 norm %g", it, Space::get_num_dofs(space), res_l2_norm);
// If l2 norm of the residual vector is within tolerance, then quit.
// NOTE: at least one full iteration forced
// here because sometimes the initial
// residual on fine mesh is too small.
if(res_l2_norm < NEWTON_TOL && it > 1) break;
// Multiply the residual vector with -1 since the matrix
// equation reads J(Y^n) \deltaY^{n+1} = -F(Y^n).
for(int i=0; i<ndof; i++) rhs->set(i, -rhs->get(i));
// Solve the linear system.
if(!solver->solve())
error ("Matrix solver failed.\n");
// Add \deltaY^{n+1} to Y^n.
for (int i = 0; i < ndof; i++) coeff_vec[i] += solver->get_solution()[i];
// If the maximum number of iteration has been reached, then quit.
if (it >= NEWTON_MAX_ITER) error ("Newton method did not converge.");
// Copy coefficients from vector y to elements.
set_coeff_vector(coeff_vec, space);
it++;
}
// Plot the solution.
Linearizer l(space);
l.plot_solution("solution.gp");
// Plot the resulting space.
space->plot("space.gp");
info("Done.");
return 0;
}
示例7: locker
void
TreeCanvas::inspectCurrentNode(bool fix, int inspectorNo) {
QMutexLocker locker(&mutex);
if (currentNode->isHidden()) {
toggleHidden();
return;
}
int failedInspectorType = -1;
int failedInspector = -1;
bool needCentering = false;
try {
switch (currentNode->getStatus()) {
case UNDETERMINED:
{
unsigned int kids =
currentNode->getNumberOfChildNodes(*na,curBest,stats,c_d,a_d);
int depth = -1;
for (VisualNode* p = currentNode; p != NULL; p=p->getParent(*na))
depth++;
if (kids > 0) {
needCentering = true;
depth++;
}
stats.maxDepth =
std::max(stats.maxDepth, depth);
if (currentNode->getStatus() == SOLVED) {
assert(currentNode->hasCopy());
emit solution(currentNode->getWorkingSpace());
currentNode->purge(*na);
}
emit statusChanged(currentNode,stats,true);
for (int i=0; i<moveInspectors.size(); i++) {
if (moveInspectors[i].second) {
failedInspectorType = 0;
failedInspector = i;
moveInspectors[i].first->
inspect(*currentNode->getWorkingSpace());
failedInspectorType = -1;
}
}
}
break;
case FAILED:
case STOP:
case UNSTOP:
case BRANCH:
case SOLVED:
{
// SizeCursor sc(currentNode);
// PreorderNodeVisitor<SizeCursor> pnv(sc);
// int nodes = 1;
// while (pnv.next()) { nodes++; }
// std::cout << "sizeof(VisualNode): " << sizeof(VisualNode)
// << std::endl;
// std::cout << "Size: " << (pnv.getCursor().s)/1024 << std::endl;
// std::cout << "Nodes: " << nodes << std::endl;
// std::cout << "Size / node: " << (pnv.getCursor().s)/nodes
// << std::endl;
Space* curSpace;
if (fix) {
if (currentNode->isRoot() && currentNode->getStatus() == FAILED)
break;
curSpace = currentNode->getSpace(*na,curBest,c_d,a_d);
if (currentNode->getStatus() == SOLVED &&
curSpace->status() != SS_SOLVED) {
// in the presence of weakly monotonic propagators, we may have to
// use search to find the solution here
Space* dfsSpace = Gecode::dfs(curSpace);
delete curSpace;
curSpace = dfsSpace;
}
} else {
if (currentNode->isRoot())
break;
VisualNode* p = currentNode->getParent(*na);
curSpace = p->getSpace(*na,curBest,c_d,a_d);
switch (curSpace->status()) {
case SS_SOLVED:
case SS_FAILED:
break;
case SS_BRANCH:
curSpace->commit(*p->getChoice(),
currentNode->getAlternative(*na));
break;
default:
GECODE_NEVER;
}
}
if (inspectorNo==-1) {
for (int i=0; i<doubleClickInspectors.size(); i++) {
if (doubleClickInspectors[i].second) {
failedInspectorType = 1;
failedInspector = i;
doubleClickInspectors[i].first->inspect(*curSpace);
failedInspectorType = -1;
//.........这里部分代码省略.........
示例8: vsc
ExecStatus
ReProp<View,rm>::propagate(Space& home, const ModEventDelta& med) {
// Add assigned views to value set
if (View::me(med) == ME_INT_VAL)
add(home,vs,x);
if (b.one()) {
if (rm == RM_PMI)
return home.ES_SUBSUMED(*this);
ValSet vsc(vs);
vs.flush();
GECODE_REWRITE(*this,Prop<View>::post(home,vsc,x,y));
}
if (b.zero()) {
if (rm != RM_IMP) {
ValSet::Ranges vsr(vs);
GECODE_ME_CHECK(y.minus_r(home,vsr,false));
for (int i=x.size(); i--; )
GECODE_ES_CHECK(Rel::Nq<View>::post(home,x[i],y));
}
return home.ES_SUBSUMED(*this);
}
// Eliminate views from x
eliminate(home);
switch (vs.compare(y)) {
case Iter::Ranges::CS_SUBSET:
if (rm != RM_IMP)
GECODE_ME_CHECK(b.one(home));
return home.ES_SUBSUMED(*this);
case Iter::Ranges::CS_DISJOINT:
if (x.size() == 0) {
if (rm != RM_PMI)
GECODE_ME_CHECK(b.zero(home));
return home.ES_SUBSUMED(*this);
}
break;
case Iter::Ranges::CS_NONE:
break;
default:
GECODE_NEVER;
}
// Check whether y is in union of x and value set
if (x.size() > 0) {
Region r(home);
ValSet::Ranges vsr(vs);
ViewRanges<View> xsr(x[x.size()-1]);
Iter::Ranges::NaryUnion u(r,vsr,xsr);
for (int i=x.size()-1; i--; ) {
ViewRanges<View> xir(x[i]);
u |= xir;
}
ViewRanges<View> yr(y);
if (Iter::Ranges::disjoint(u,yr)) {
if (rm != RM_PMI)
GECODE_ME_CHECK(b.zero(home));
return home.ES_SUBSUMED(*this);
}
}
return ES_FIX;
}
示例9:
Point::Point(const Point & point, const Space & space):
space(space){
x = space.getLocalX(point.physicalX());
y = space.getLocalY(point.physicalY());
}
示例10: main
int main() {
// Three macroelements are defined above via the interfaces[] array.
// poly_orders[]... initial poly degrees of macroelements.
// material_markers[]... material markers of macroelements.
// subdivisions[]... equidistant subdivision of macroelements.
int poly_orders[N_MAT] = {P_init_inner, P_init_outer, P_init_reflector };
int material_markers[N_MAT] = {Marker_inner, Marker_outer, Marker_reflector };
int subdivisions[N_MAT] = {N_subdiv_inner, N_subdiv_outer, N_subdiv_reflector };
// Create space.
Space* space = new Space(N_MAT, interfaces, poly_orders, material_markers, subdivisions, N_GRP, N_SLN);
// Enumerate basis functions, info for user.
info("N_dof = %d", Space::get_num_dofs(space));
// Initial approximation: u = 1.
double K_EFF_old;
double init_val = 1.0;
set_vertex_dofs_constant(space, init_val, 0);
// Initialize the weak formulation.
WeakForm wf;
wf.add_matrix_form(jacobian_vol_inner, NULL, Marker_inner);
wf.add_matrix_form(jacobian_vol_outer, NULL, Marker_outer);
wf.add_matrix_form(jacobian_vol_reflector, NULL, Marker_reflector);
wf.add_vector_form(residual_vol_inner, NULL, Marker_inner);
wf.add_vector_form(residual_vol_outer, NULL, Marker_outer);
wf.add_vector_form(residual_vol_reflector, NULL, Marker_reflector);
wf.add_vector_form_surf(residual_surf_left, BOUNDARY_LEFT);
wf.add_matrix_form_surf(jacobian_surf_right, BOUNDARY_RIGHT);
wf.add_vector_form_surf(residual_surf_right, BOUNDARY_RIGHT);
// Initialize the FE problem.
bool is_linear = false;
DiscreteProblem *dp = new DiscreteProblem(&wf, space, is_linear);
// Source iteration (power method).
for (int i = 0; i < Max_SI; i++)
{
// Obtain fission source.
int current_solution = 0, previous_solution = 1;
copy_dofs(current_solution, previous_solution, space);
// Obtain the number of degrees of freedom.
int ndof = Space::get_num_dofs(space);
// Fill vector coeff_vec using dof and coeffs arrays in elements.
double *coeff_vec = new double[Space::get_num_dofs(space)];
get_coeff_vector(space, coeff_vec);
// Set up the solver, matrix, and rhs according to the solver selection.
SparseMatrix* matrix = create_matrix(matrix_solver);
Vector* rhs = create_vector(matrix_solver);
Solver* solver = create_linear_solver(matrix_solver, matrix, rhs);
int it = 1;
while (1) {
// Obtain the number of degrees of freedom.
int ndof = Space::get_num_dofs(space);
// Assemble the Jacobian matrix and residual vector.
dp->assemble(matrix, rhs);
// Calculate the l2-norm of residual vector.
double res_l2_norm = get_l2_norm(rhs);
// Info for user.
info("---- Newton iter %d, ndof %d, res. l2 norm %g", it, Space::get_num_dofs(space), res_l2_norm);
// If l2 norm of the residual vector is within tolerance, then quit.
// NOTE: at least one full iteration forced
// here because sometimes the initial
// residual on fine mesh is too small.
if(res_l2_norm < NEWTON_TOL && it > 1) break;
// Multiply the residual vector with -1 since the matrix
// equation reads J(Y^n) \deltaY^{n+1} = -F(Y^n).
for(int i=0; i<ndof; i++) rhs->set(i, -rhs->get(i));
// Solve the linear system.
if(!solver->solve())
error ("Matrix solver failed.\n");
// Add \deltaY^{n+1} to Y^n.
for (int i = 0; i < ndof; i++) coeff_vec[i] += solver->get_solution()[i];
// If the maximum number of iteration has been reached, then quit.
if (it >= NEWTON_MAX_ITER) error ("Newton method did not converge.");
// Copy coefficients from vector y to elements.
set_coeff_vector(coeff_vec, space);
it++;
}
// Cleanup.
delete matrix;
delete rhs;
delete solver;
delete [] coeff_vec;
//.........这里部分代码省略.........
示例11: timetabling
ExecStatus
timetabling(Space& home, Propagator& p, TaskArray<Task>& t) {
Region r(home);
bool assigned;
if (Event* e = Event::events(r,t,assigned)) {
// Whether resource is free
bool free = true;
// Set of current but not required tasks
Support::BitSet<Region> tasks(r,static_cast<unsigned int>(t.size()));
// Process events
do {
// Current time
int time = e->time();
// Process events for completion of required part
for ( ; (e->type() == Event::LRT) && (e->time() == time); e++)
if (t[e->idx()].mandatory()) {
tasks.set(static_cast<unsigned int>(e->idx()));
free = true;
}
// Process events for completion of task
for ( ; (e->type() == Event::LCT) && (e->time() == time); e++)
tasks.clear(static_cast<unsigned int>(e->idx()));
// Process events for start of task
for ( ; (e->type() == Event::EST) && (e->time() == time); e++)
tasks.set(static_cast<unsigned int>(e->idx()));
// Process events for zero-length task
for ( ; (e->type() == Event::ZRO) && (e->time() == time); e++)
if (!free)
return ES_FAILED;
// Norun start time
int nrstime = time;
// Process events for start of required part
for ( ; (e->type() == Event::ERT) && (e->time() == time); e++)
if (t[e->idx()].mandatory()) {
tasks.clear(static_cast<unsigned int>(e->idx()));
if (!free)
return ES_FAILED;
free = false;
nrstime = time+1;
} else if (t[e->idx()].optional() && !free) {
GECODE_ME_CHECK(t[e->idx()].excluded(home));
}
if (!free)
for (Iter::Values::BitSet<Support::BitSet<Region> > j(tasks);
j(); ++j)
// Task j cannot run from time to next time - 1
if (t[j.val()].mandatory())
GECODE_ME_CHECK(t[j.val()].norun(home, nrstime, e->time() - 1));
} while (e->type() != Event::END);
}
if (assigned)
return home.ES_SUBSUMED(p);
return ES_NOFIX;
}
示例12: PyErr_Format
//-------------------------------------------------------------------------------------
PyObject* Space::__py_DelSpaceData(PyObject* self, PyObject* args)
{
SPACE_ID spaceID = 0;
if(PyTuple_Size(args) != 2)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: (argssize != (spaceID, key)) is error!");
PyErr_PrintEx(0);
return 0;
}
char* key = NULL;
if(PyArg_ParseTuple(args, "Is", &spaceID, &key) == -1)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: args is error!");
PyErr_PrintEx(0);
return 0;
}
if(key == NULL)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: key not is string!");
PyErr_PrintEx(0);
return 0;
}
if(strlen(key) == 0)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: key is empty!");
PyErr_PrintEx(0);
return 0;
}
Space* space = Spaces::findSpace(spaceID);
if(space == NULL)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: (spaceID=%u) not found!",
spaceID);
PyErr_PrintEx(0);
return 0;
}
if(!space->hasSpaceData(key))
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: (spaceID=%u, key=%s) not found!",
spaceID, key);
PyErr_PrintEx(0);
return 0;
}
if(kbe_stricmp(key, "_mapping") == 0)
{
PyErr_Format(PyExc_AssertionError, "KBEngine::delSpaceData: key{_mapping} is protected!",
spaceID);
PyErr_PrintEx(0);
return 0;
}
space->delSpaceData(key);
S_Return;
}
示例13: d
ExecStatus
ReSubset<View0,View1,rm>::propagate(Space& home, const ModEventDelta&) {
if (b.one()) {
if (rm == RM_PMI)
return home.ES_SUBSUMED(*this);
GECODE_REWRITE(*this,(Subset<View0,View1>::post(home(*this),x0,x1)));
}
if (b.zero()) {
if (rm == RM_IMP)
return home.ES_SUBSUMED(*this);
GECODE_REWRITE(*this,(NoSubset<View0,View1>::post(home(*this),x0,x1)));
}
// check whether cardinalities still allow subset
if (x0.cardMin() > x1.cardMax()) {
if (rm != RM_PMI)
GECODE_ME_CHECK(b.zero_none(home));
return home.ES_SUBSUMED(*this);
}
// check lub(x0) subset glb(x1)
{
LubRanges<View0> x0ub(x0);
GlbRanges<View1> x1lb(x1);
Iter::Ranges::Diff<LubRanges<View0>,GlbRanges<View1> > d(x0ub,x1lb);
if (!d()) {
if (rm != RM_IMP)
GECODE_ME_CHECK(b.one_none(home));
return home.ES_SUBSUMED(*this);
}
}
// check glb(x0) subset lub(x1)
{
GlbRanges<View0> x0lb(x0);
LubRanges<View1> x1ub(x1);
Iter::Ranges::Diff<GlbRanges<View0>,LubRanges<View1> > d(x0lb,x1ub);
if (d()) {
if (rm != RM_PMI)
GECODE_ME_CHECK(b.zero_none(home));
return home.ES_SUBSUMED(*this);
} else if (x0.assigned() && x1.assigned()) {
if (rm != RM_IMP)
GECODE_ME_CHECK(b.one_none(home));
return home.ES_SUBSUMED(*this);
}
}
if (x0.cardMin() > 0) {
LubRanges<View0> x0ub(x0);
LubRanges<View1> x1ub(x1);
Iter::Ranges::Inter<LubRanges<View0>,LubRanges<View1> >
i(x0ub,x1ub);
if (!i()) {
if (rm != RM_PMI)
GECODE_ME_CHECK(b.zero_none(home));
return home.ES_SUBSUMED(*this);
}
}
return ES_FIX;
}
示例14: CreateDesertSpace
bool CreateDesertSpace(Space &sp, Element &e, UdmDesertMap &des_map, DesertUdmMap &inv_des_map, UdmElementSet &elements, bool root)
{
static long parent; //id of the parent element
long old_parent; //save old parent
static long space; //id of the space
short decomposition; //0:leaf, 1: and, 2: or
//element.decomposition():
// has no children: leaf
// has children and decomposition is false: or node
// has children and decomposition is true: and node
set<Element> ev_set;
//static and non-static variables
//for progress indication
//(this is weird in case of a recursive function)
//CDesertStatusDlg * st_dlg = GetStatusDlg(NULL);
static short percent_done;
static short percent_to_do;
short percent_to_do_save;
if (root)
{
percent_done = 0;
percent_to_do = 100;
}
if (root)
{
//compute decomposition value
//mapping from boolean decomposition value
//to desert style short decomposition
set<Element> e_children = sp.Element_kind_children();
set<Element>::iterator i;
if (e_children.empty()) decomposition = 0;
else
{
if (sp.decomposition()) decomposition = 1;
else decomposition = 2;
}
//debug trace
TRACE ("CreateDesertSpace invoked: parent: %d, Space: %s , decomposition: %d\n", parent, ((string)sp.name()).c_str(), decomposition);
//
//create the space & the root element in the space
//
space = CreateSpace(((string)sp.name()).c_str());
//space = CreateSpace(((string)sp.name()).c_str(), sp.id(), sp.externalID());
/*
parent = CreateElement(
((string)sp.name()).c_str(),
space,
decomposition,
-1,
sp.id(),
sp.externalID());
*/
parent = CreateElement(
((string)sp.name()).c_str(),
space,
decomposition,
-1,
sp.externalID());
//map the UDM, desert object pairs
DoMap(sp, des_map, inv_des_map, parent);
//recursion here
//update progress bar
if (e_children.empty())
{
//leaf node
percent_done += percent_to_do;
//st_dlg->StepInState(percent_done);
}//eo if (e_children.empty())
else
{
//recursive hack for overall performance
//percent to done is always smaller
int no_of_children = e_children.size();
percent_to_do_save = percent_to_do;
percent_to_do = (short)((float)percent_to_do / (float)no_of_children);
//recursive step
for (i = e_children.begin(); i != e_children.end(); i++)
{
Element new_e = *i;
CreateDesertSpace(sp, new_e, des_map, inv_des_map, elements, false);
};//eo for (i...)
//.........这里部分代码省略.........
示例15: GECODE_INT_STATUS
ExecStatus
QEqv<BVA,BVB,BVC>::propagate(Space& home, const ModEventDelta&) {
#define GECODE_INT_STATUS(S0,S1,S2) \
((BVA::S0<<(2*BVA::BITS))|(BVB::S1<<(1*BVB::BITS))|(BVC::S2<<(0*BVC::BITS)))
switch ((x0.status() << (2*BVA::BITS)) | (x1.status() << (1*BVB::BITS)) |
(x2.status() << (0*BVC::BITS))) {
case GECODE_INT_STATUS(NONE,NONE,NONE):
GECODE_NEVER;
case GECODE_INT_STATUS(NONE,NONE,ZERO):
case GECODE_INT_STATUS(NONE,NONE,ONE):
return ES_FIX;
case GECODE_INT_STATUS(NONE,ZERO,NONE):
if (q0 == FORALL)
{
GECODE_ME_CHECK(x2.zero_none(home)); break;
}
return ES_FIX;
case GECODE_INT_STATUS(NONE,ZERO,ZERO):
if (q0 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x0.one_none(home)); break;
case GECODE_INT_STATUS(NONE,ZERO,ONE):
if (q0 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x0.zero_none(home)); break;
case GECODE_INT_STATUS(NONE,ONE,NONE):
if (q0 == FORALL)
{
GECODE_ME_CHECK(x2.zero_none(home)); break;
}
return ES_FIX;
case GECODE_INT_STATUS(NONE,ONE,ZERO):
if (q0 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x0.zero_none(home)); break;
case GECODE_INT_STATUS(NONE,ONE,ONE):
if (q0 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x0.one_none(home)); break;
case GECODE_INT_STATUS(ZERO,NONE,NONE):
if (q1 == FORALL)
{
GECODE_ME_CHECK(x2.zero_none(home)); break;
}
return ES_FIX;
case GECODE_INT_STATUS(ZERO,NONE,ZERO):
if (q1 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x1.one_none(home)); break;
case GECODE_INT_STATUS(ZERO,NONE,ONE):
if (q1 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x1.zero_none(home)); break;
case GECODE_INT_STATUS(ZERO,ZERO,NONE):
GECODE_ME_CHECK(x2.one_none(home)); break;
case GECODE_INT_STATUS(ZERO,ZERO,ZERO):
return ES_FAILED;
case GECODE_INT_STATUS(ZERO,ZERO,ONE):
break;
case GECODE_INT_STATUS(ZERO,ONE,NONE):
GECODE_ME_CHECK(x2.zero_none(home)); break;
case GECODE_INT_STATUS(ZERO,ONE,ZERO):
break;
case GECODE_INT_STATUS(ZERO,ONE,ONE):
return ES_FAILED;
case GECODE_INT_STATUS(ONE,NONE,NONE):
if (q1 == FORALL)
{
GECODE_ME_CHECK(x2.zero_none(home)); break;
}
return ES_FIX;
case GECODE_INT_STATUS(ONE,NONE,ZERO):
if (q1 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x1.zero_none(home)); break;
case GECODE_INT_STATUS(ONE,NONE,ONE):
if (q1 == FORALL) return ES_FAILED;
GECODE_ME_CHECK(x1.one_none(home)); break;
case GECODE_INT_STATUS(ONE,ZERO,NONE):
GECODE_ME_CHECK(x2.zero_none(home)); break;
case GECODE_INT_STATUS(ONE,ZERO,ZERO):
break;
case GECODE_INT_STATUS(ONE,ZERO,ONE):
return ES_FAILED;
case GECODE_INT_STATUS(ONE,ONE,NONE):
GECODE_ME_CHECK(x2.one_none(home)); break;
case GECODE_INT_STATUS(ONE,ONE,ZERO):
return ES_FAILED;
case GECODE_INT_STATUS(ONE,ONE,ONE):
break;
default:
GECODE_NEVER;
}
return home.ES_SUBSUMED(*this);
#undef GECODE_INT_STATUS
}