1 #ifndef CPPAD_CG_CUSTOM_POSITION_INCLUDED 2 #define CPPAD_CG_CUSTOM_POSITION_INCLUDED 29 std::vector<std::vector<bool> > elFilter_;
31 std::vector<std::set<size_t> > elements_;
35 filterDefined_(
false),
39 template<
class VectorSize>
41 const VectorSize& rows,
42 const VectorSize& cols) :
44 elFilter_(m, std::vector<bool>(n,
false)),
46 CPPADCG_ASSERT_KNOWN(rows.size() == cols.size(),
"The number of row indexes must be the same as the number of column indexes.")
47 for (
size_t i = 0; i < rows.size(); i++) {
48 elFilter_[rows[i]][cols[i]] =
true;
52 template<
class VectorSet>
54 const VectorSet& elements) :
56 elFilter_(m, std::vector<bool>(n,
false)),
58 CPPADCG_ASSERT_KNOWN(elements.size() <= m,
"Invalid number of rows.")
60 for (
size_t i = 0; i < elements.size(); i++) {
61 for (
size_t it : elements[i]) {
62 elFilter_[i][it] =
true;
67 inline bool isFilterDefined()
const {
68 return filterDefined_;
71 inline bool isFullDefined()
const {
75 inline void setFullElements(
const std::vector<std::set<size_t> >& elements) {
81 inline const std::vector<std::set<size_t> >& getFullElements()
const {
85 inline void filter(
CppAD::vector<std::set<size_t> >& sparsity)
const {
90 inline void filter(std::vector<std::set<size_t> >& sparsity)
const {
95 inline void filter(
ArrayView<std::set<size_t> >& sparsity)
const {
99 std::set<size_t>::iterator it, currentIt;
101 for (
size_t i = 0; i < sparsity.size(); i++) {
102 it = sparsity[i].begin();
103 while (it != sparsity[i].end()) {
106 if (!elFilter_[i][*currentIt]) {
107 sparsity[i].erase(currentIt);