| 1069 | } |
| 1070 | |
| 1071 | DeepLayer DeepShapeStore::create_custom_layer (const db::RecursiveShapeIterator &si, HierarchyBuilderShapeReceiver *pipe, const db::ICplxTrans &trans) |
| 1072 | { |
| 1073 | unsigned int layout_index = layout_for_iter (si, trans); |
| 1074 | |
| 1075 | db::Layout &layout = m_layouts[layout_index]->layout; |
| 1076 | db::HierarchyBuilder &builder = m_layouts[layout_index]->builder; |
| 1077 | |
| 1078 | builder.set_wants_all_cells (m_wants_all_cells); |
| 1079 | builder.set_sparse_array_limit (m_sparse_array_limit); |
| 1080 | |
| 1081 | unsigned int layer_index = init_layer (layout, si); |
| 1082 | builder.set_target_layer (layer_index); |
| 1083 | |
| 1084 | // Build the working hierarchy from the recursive shape iterator |
| 1085 | try { |
| 1086 | |
| 1087 | tl::SelfTimer timer (tl::verbosity () >= 41, tl::to_string (tr ("Building working hierarchy"))); |
| 1088 | db::LayoutLocker ll (&layout, true /*no update*/); |
| 1089 | |
| 1090 | builder.set_shape_receiver (pipe); |
| 1091 | db::RecursiveShapeIterator (si).push (& builder); |
| 1092 | builder.set_shape_receiver (0); |
| 1093 | |
| 1094 | } catch (...) { |
| 1095 | builder.set_shape_receiver (0); |
| 1096 | throw; |
| 1097 | } |
| 1098 | |
| 1099 | return DeepLayer (this, layout_index, layer_index); |
| 1100 | } |
| 1101 | |
| 1102 | DeepLayer DeepShapeStore::create_copy (const DeepLayer &source, HierarchyBuilderShapeReceiver *pipe) |
| 1103 | { |
no test coverage detected