1 #ifndef CPPAD_CG_CUSTOM_POSITION_INCLUDED 2 #define CPPAD_CG_CUSTOM_POSITION_INCLUDED 28 std::vector<std::vector<bool> > elFilter_;
30 std::vector<std::set<size_t> > elements_;
34 filterDefined_(
false),
38 template<
class VectorSize>
40 const VectorSize& rows,
41 const VectorSize& cols) :
43 elFilter_(m, std::vector<bool>(n,
false)),
45 CPPADCG_ASSERT_KNOWN(rows.size() == cols.size(),
"The number of row indexes must be the same as the number of column indexes.");
46 for (
size_t i = 0; i < rows.size(); i++) {
47 elFilter_[rows[i]][cols[i]] =
true;
51 template<
class VectorSet>
53 const VectorSet& elements) :
55 elFilter_(m, std::vector<bool>(n,
false)),
57 CPPADCG_ASSERT_KNOWN(elements.size() <= m,
"Invalid number of rows.");
59 for (
size_t i = 0; i < elements.size(); i++) {
60 for (
size_t it : elements[i]) {
61 elFilter_[i][it] =
true;
66 inline bool isFilterDefined()
const {
67 return filterDefined_;
70 inline bool isFullDefined()
const {
74 inline void setFullElements(
const std::vector<std::set<size_t> >& elements) {
80 inline const std::vector<std::set<size_t> >& getFullElements()
const {
84 inline void filter(
CppAD::vector<std::set<size_t> >& sparsity)
const {
89 inline void filter(std::vector<std::set<size_t> >& sparsity)
const {
94 inline void filter(
ArrayView<std::set<size_t> >& sparsity)
const {
98 std::set<size_t>::iterator it, currentIt;
100 for (
size_t i = 0; i < sparsity.size(); i++) {
101 it = sparsity[i].begin();
102 while (it != sparsity[i].end()) {
105 if (!elFilter_[i][*currentIt]) {
106 sparsity[i].erase(currentIt);