void DataType::coreSizes(size_t parentOffset, SizeVector &sizes, SizeVector &offsets) const { sizes.push_back(objectSize()); offsets.push_back( parentOffset ); }
void UCK::makePathMatrix(const PairVector& e, SizeVector& sp, const Size e_size) { std::vector<Size>* line; // create bond-matrix, because Floyd's Algorithm requires a reachability matrix SizeVector* bond_matrix; line = new vector<Size>; bond_matrix = new SizeVector; // initialize bond-matrix with 0 at every position for (Size i = 0; i != e_size; ++i) { line->clear(); for(Size j = 0; j != e_size; ++j) { line->push_back(0); } bond_matrix->push_back(*line); } // proceed all edges and set corresponding position in bond_matrix to 1 for (Size i = 0; i != e.size(); ++i) { (*bond_matrix)[e[i].first][e[i].second] = 1; } // initialize sp-matrix for(Size i = 0; i != bond_matrix->size(); ++i) { line->clear(); for(Size j = 0; j != bond_matrix->size(); ++j) { if (i == j) // distance from a node to itself = 0 { line->push_back(0); } else if((*bond_matrix)[i][j] == 1) // if an edge exists between node i and j, { line->push_back(1); // the distance between them is 1 } else { line->push_back(std::numeric_limits<Index>::max()); // otherwise the distance is set to infinity } } sp.push_back(*line); } // Floyd's Algorithm for(Size i = 0; i != sp.size(); ++i) { for(Size j = 0; j != sp.size(); ++j) { for(Size k = 0; k != sp.size(); k++) { if(sp[j][k] > (sp[j][i] + sp[i][k])) { sp[j][k] = (sp[j][i] + sp[i][k]); } } } } delete bond_matrix; delete line; return; }