void DependencyPipe::RemoveUnsupportedFeatures(Instance *instance, Parts *parts, bool pruner, const vector<bool> &selected_parts, Features *features) { Parameters *parameters; if (pruner) { parameters = pruner_parameters_; } else { parameters = parameters_; } for (int r = 0; r < parts->size(); ++r) { if (!selected_parts[r]) continue; if (pruner) CHECK_EQ((*parts)[r]->type(), DEPENDENCYPART_ARC); // Skip labeled arcs, are they use the features from unlabeled arcs. if ((*parts)[r]->type() == DEPENDENCYPART_LABELEDARC) continue; BinaryFeatures *part_features = static_cast<DependencyFeatures*>(features)->GetMutablePartFeatures(r); int num_supported = 0; for (int j = 0; j < part_features->size(); ++j) { if (parameters->Exists((*part_features)[j])) { (*part_features)[num_supported] = (*part_features)[j]; ++num_supported; } } part_features->resize(num_supported); } }