Changeset 2990

Show
Ignore:
Timestamp:
07/02/08 06:39:29 (2 months ago)
Author:
dumas
Message:

added Generic trait for iterators without value_type (typically X*)

Location:
trunk/linbox/linbox/matrix
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/linbox/linbox/matrix/sparse.h

    r2814 r2990  
    557557                { return ConstRawIterator (_A.end (), _A.back ().end (), _A.end ()); } 
    558558 
     559 
     560 
     561        /* Generic trait for iterators without type */ 
     562    template<typename U> 
     563    struct IteratorValueType { 
     564        typedef typename U::value_type value_type; 
     565    }; 
     566     
     567    template<typename X> 
     568    struct IteratorValueType<const X*> { 
     569        typedef X value_type; 
     570    }; 
     571 
     572        /* Generic trait for iterators without type */ 
     573 
     574 
     575 
    559576        template <class RepIterator, class RowIdxIterator> 
    560577        class _RawIndexedIterator 
     
    563580//              // typedef std::pair<size_t, size_t> value_type; 
    564581//              typedef typename RowIdxIterator/*::value_type*/::second_type value_type; 
    565                 typedef typename RowIdxIterator::value_type::second_type value_type; 
     582//              typedef typename RowIdxIterator::value_type::second_type value_type; 
     583            typedef typename IteratorValueType< RowIdxIterator >::value_type::second_type value_type; 
    566584 
    567585                _RawIndexedIterator (size_t idx, const RepIterator &i, const RowIdxIterator &j, const RepIterator &A_end) 
  • trunk/linbox/linbox/matrix/sparse.inl

    r2814 r2990  
    711711        ::setEntry (size_t i, size_t j, const Element &value)  
    712712{ 
     713        typedef typename Row::value_type value_type; 
    713714        Row &v = _A[i]; 
    714715        typename Row::iterator iter; 
    715  
     716         
    716717        if (v.size () == 0) { 
    717                 v.push_back (std::pair <size_t, Element> (j, value));                 
     718                v.push_back ( value_type(j, value));                 
    718719        } else { 
    719720                iter = std::lower_bound (v.begin (), v.end (), j, VectorWrapper::CompareSparseEntries<Element> ()); 
    720721 
    721722                if (iter == v.end () || iter->first != j) 
    722                         iter = v.insert (iter, std::pair <size_t, Element> (j, value)); 
     723                        iter = v.insert (iter, value_type(j, value)); 
    723724                else 
    724725                        iter->second = value;