27 throw Exceptions::NullException(0);
28 this->shapeset = shapeset;
33 set_quad_2d(&g_quad_2d_std);
38 while (pss->is_slave())
39 pss = pss->master_pss;
41 shapeset = pss->shapeset;
44 set_quad_2d(&g_quad_2d_std);
47 void PrecalcShapeset::update_max_index()
53 void PrecalcShapeset::set_quad_2d(Quad2D* quad_2d)
58 void PrecalcShapeset::handle_overflow_idx()
67 nodes =
new LightArray<Node *>;
74 unsigned key =
cur_quad | (
element->get_mode() << 3) | ((
unsigned) (max_index[
element->get_mode()] - index) << 4);
76 if(master_pss == NULL)
78 if(!tables.present(key))
79 tables.add(
new std::map<uint64_t, LightArray<Node*>*>, key);
84 if(!master_pss->tables.present(key))
85 master_pss->tables.add(
new std::map<uint64_t, LightArray<Node*>*>, key);
101 void PrecalcShapeset::precalculate(
int order,
int mask)
107 int np = quad->get_num_points(order, this->
element->get_mode());
108 double3* pt = quad->get_points(order, this->
element->get_mode());
111 int newmask = mask | oldmask;
117 for (k = 0; k < 6; k++)
122 memcpy(node->values[j][k],
cur_node->values[j][k], np *
sizeof(
double));
124 for (i = 0; i < np; i++)
125 node->values[j][k][i] = shapeset->
get_value(k, index,
ctm->m[0] * pt[i][0] +
ctm->
t[0],
130 if(
nodes->present(order))
133 ::free(
nodes->get(order));
135 nodes->add(node, order);
139 void PrecalcShapeset::free()
141 if(master_pss != NULL)
return;
143 for(
unsigned int i = 0; i < tables.get_size(); i++)
144 if(tables.present(i))
146 for(std::map<uint64_t, LightArray<Node*>*>::iterator it = tables.get(i)->begin(); it != tables.get(i)->end(); it++)
148 for(
unsigned int k = 0; k < it->second->get_size(); k++)
149 if(it->second->present(k))
150 ::free(it->second->get(k));
153 delete tables.get(i);
165 extern PrecalcShapeset ref_map_pss;
172 void PrecalcShapeset::push_transform(
int son)
179 void PrecalcShapeset::pop_transform()
186 int PrecalcShapeset::get_active_shape()
const
191 Shapeset* PrecalcShapeset::get_shapeset()
const
201 void PrecalcShapeset::set_master_transform()
203 assert(master_pss != NULL);
210 int PrecalcShapeset::get_edge_fn_order(
int edge)
215 bool PrecalcShapeset::is_slave()
const
217 return master_pss != NULL;
220 void PrecalcShapeset::force_transform(uint64_t sub_idx, Trf* ctm)