Re: [eigen] Minimal ei_traits? |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
I am attempting a SymmetricMatrix implementation modeled on what Eigen already does - hence the ei_traits question. I need this class because I really want to store only the triangular part - my application runs out of memory quickly. I am trying the rectangular packed format that Gael pointed out in an earlier mail. Any suggestions, particularly on the class hierarchy, would be welcome. I am attaching a graphviz-generated diagram for comments from everyone. Maybe I can even submit a patch if I get it working :-) Thanks, Manoj On Wednesday 30 June 2010 03:36:11 pm Benoit Jacob wrote: > There is, and you can find that in Macros.h, in > EIGEN_DENSE_PUBLIC_INTERFACE, which is basically where ei_traits are > used: > > #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ > typedef typename Eigen::ei_traits<Derived>::Scalar Scalar; /*!< > \brief Numeric type, e.g. float, double, int or std::complex<float>. > */ \ > typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; /*!< > \brief The underlying numeric type for composed scalar types. \details > In cases where Scalar is e.g. std::complex<T>, T were corresponding to > RealScalar. */ \ > typedef typename Base::PacketScalar PacketScalar; \ > typedef typename Base::CoeffReturnType CoeffReturnType; /*!< \brief > The return type for coefficient access. \details Depending on whether > the object allows direct coefficient access (e.g. for a MatrixXd), > this type is either 'const Scalar&' or simply 'Scalar' for objects > that do not allow direct coefficient access. */ \ > typedef typename Eigen::ei_nested<Derived>::type Nested; \ > typedef typename Eigen::ei_traits<Derived>::StorageKind StorageKind; \ > typedef typename Eigen::ei_traits<Derived>::Index Index; \ > enum { RowsAtCompileTime = Eigen::ei_traits<Derived>::RowsAtCompileTime, > \ ColsAtCompileTime = Eigen::ei_traits<Derived>::ColsAtCompileTime, \ > MaxRowsAtCompileTime = > Eigen::ei_traits<Derived>::MaxRowsAtCompileTime, \ > MaxColsAtCompileTime = > Eigen::ei_traits<Derived>::MaxColsAtCompileTime, \ > Flags = Eigen::ei_traits<Derived>::Flags, \ > CoeffReadCost = Eigen::ei_traits<Derived>::CoeffReadCost, \ > SizeAtCompileTime = Base::SizeAtCompileTime, \ > MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ > IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ > using Base::derived; \ > using Base::const_cast_derived; > > > Notice that NOT all of the above lines refer to stuff in ei_traits. > Those that do, tell you what ei_traits must provide. > > But let me take this occasion to insist that the ONLY place where you > have to use ei_traits, is if you are hacking Eigen and adding or > modifying some base class underneath some expression class. If you are > just trying to get compile-time information on a given Eigen > expression type (or even if you are just coding some new expression > class for Eigen), you can access these typedefs and enum values right > off this type: > > do: > > enum { myvalue = Derived::RowsAtCompileTime }; > typedef typename Derived::Scalar mytype; > > and NOT (unless you are hacking Eigen's own base classes): > > enum { myvalue = ei_traits<Derived>::RowsAtCompileTime }; > typedef typename ei_traits<Derived>::Scalar mytype; > > The only case where you have to do the latter, is when Derived is not > fully defined. You might ask how could this possibly happen? This > happens when you are inside of a template Base<Derived> class and > Derived inherits Base<Derived>. See the link I just mentioned about > the CRTP. > > Now I know that there are many places in Eigen where we use ei_traits, > and that's unnecessary, so that's bad. A patch fixing that is always > welcome. Only use ei_traits if it's needed in order to compile. > > Benoit > > 2010/6/30 Manoj Rajagopalan <rmanoj@xxxxxxxxx>: > > hi eigen developers, > > > > It is a little difficult to trace the various ei_traits because of > > their distribution and levels of inheritance? Is there a minimum set of > > typedefs, enums etc. that any ei_traits must > > declare/define/statically-compute? > > > > thanks, > > Manoj
Attachment:
class-hierarchy.png
Description: PNG image
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |