Re: [eigen] conservative resize ... |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] conservative resize ...
- From: Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>
- Date: Tue, 8 Sep 2009 10:05:11 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=x/4mve/j5vyrMllIe6wY2fMZ+GVhQGEBOCm5eaq7QlA=; b=xaXA47o1Cq3WpnTw28k4sazygkI3/EqTqjSDB0vrs4VoEYK0ypY/+qUpUCXoS7w2/w NrDF5BmVMSbvnwIGiC4DqvL8KVfcZfob4Nf/NyIN03vwnbNE6MBounuwLs4cPikgjV3n 4Y5NcxDCa5xTAdf1xLHj+7bFKfZlmo4CrVsYA=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=gdGbSCG7cYoF+ahQFdA52MazFjaRKEBcZ2XrE1p7eAk1GEXdBbm8Uv6QdZiUmmA8IJ tzLN24q5FVQL8H2FNVpz29iL5Se++0cwhvvu9Q3U4fpzP5PwBjb+bJjRbAuARHhrm5wG QtdsX9WsQx0s8jdh0OIrd7kt17ZjuxvMcER+s=
Sorry again for the gcc bugs.... they should be fixed by now.
I am still confused, whether it is a good idea to start polluting the
Matrix.h with expressions and forward declarations.
- Hauke
On Mon, Sep 7, 2009 at 5:50 PM, Hauke Heibel<hauke.heibel@xxxxxxxxxxxxxx> wrote:
> ok, it's in.
>
> On Mon, Sep 7, 2009 at 4:47 PM, Benoit Jacob<jacob.benoit.1@xxxxxxxxx> wrote:
>> Ah, the meta-selector to choose between the two paths for that function.
>>
>> Since that's specific to that function, it shouldn't go in
>> XprHelpers.h, instead it should go in the same file where (the rest
>> of) that function is implemented.
>>
>> The way we usually do it is rather:
>>
>> template <typename Derived, typename OtherDerived, int IsVector =
>> Derived::IsVectorAtCompileTime>
>> struct resize_helper
>> {
>> static void run(const Eigen::MatrixBase<Derived>& _this, const
>> Eigen::MatrixBase<OtherDerived>& other)
>> {
>> std::cout << "Matrix assignment" << std::endl;
>> }
>> };
>>
>> template <typename Derived, typename OtherDerived>
>> struct resize_helper<Derived, OtherDerived,true>
>> {
>> template <typename Derived, typename OtherDerived>
>> static void run(const Eigen::MatrixBase<Derived>& _this, const
>> Eigen::MatrixBase<Derived>& other)
>> {
>> std::cout << "Vector assignment" << std::endl;
>> }
>> };
>>
>> Then you can call it like resize_helper(a,b) and let all the template
>> parameters be resolved implicitly. This is less error-prone than
>> having to manually specify IsVector. Also note how we usually don't
>> put "xpr" in names since otherwise we'd have "xpr" about everywhere.
>>
>> Benoit
>>
>> 2009/9/7 Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>:
>>> On Mon, Sep 7, 2009 at 4:28 PM, Benoit Jacob<jacob.benoit.1@xxxxxxxxx> wrote:
>>>> There already is: MatrixBase<T>::IsVectorAtCompileTime.
>>>
>>> yes, i know.
>>>
>>> i was thinking about something like this...
>>>
>>> template <int IsVector>
>>> struct resize_xpr_helper
>>> {
>>> template <typename Derived, typename OtherDerived>
>>> static void run(const Eigen::MatrixBase<Derived>& _this, const
>>> Eigen::MatrixBase<OtherDerived>& other)
>>> {
>>> std::cout << "Matrix assignment" << std::endl;
>>> }
>>> };
>>>
>>> template <>
>>> struct resize_xpr_helper<1>
>>> {
>>> template <typename Derived, typename OtherDerived>
>>> static void run(const Eigen::MatrixBase<Derived>& _this, const
>>> Eigen::MatrixBase<Derived>& other)
>>> {
>>> std::cout << "Vector assignment" << std::endl;
>>> }
>>> };
>>>
>>> - hauke
>>>
>>>
>>>
>>
>>
>>
>