$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: rwgk (rwgk_at_[hidden])
Date: 2002-03-09 12:07:41
--- In boost_at_y..., "jhrwalter" <walter_at_g...> wrote:
> Sure, IMO. One possibility is to use the array template
> argument of numerics::vector (or numerics::matrix ;-) to
> adapt your own storage container.
Thanks for the hint, this looks very interesting!
When I first looked at the ublas documentation I mistook
"A" for "allocator." Maybe you want to make this clearer,
e.g.
template <typename ElementType, typename ArrayType>
class vector ...
I was looking for information about the requirements for
"A" but could not find anything more than "The type of the
adapted array." Did I miss the relevant documentation?
Unfortunately I am having trouble compiling this minimal
example:
#include <vector>
#include <boost/numeric/ublas/config.h>
#include <boost/numeric/ublas/vector.h>
int main()
{
numerics::vector<float, std::vector<float> > ua(1000);
ua = ua * ua;
return 0;
}
Attached are the minimal patches that I applied to config.h
and iterator.h, and the output from two compilers.
Advice on how to fix the problems is very much appreciated.
Thanks,
Ralf
Index: config.h
===================================================================
RCS file: /cvsroot/boost/boost/boost/numeric/ublas/Attic/config.h,v
retrieving revision 1.1.2.8
diff -b -w -r1.1.2.8 config.h
108c108
< #ifdef USE_GCC
---
> #if defined(USE_GCC) || defined(__EDG__) // temp hack for EDG
Index: iterator.h
===================================================================
RCS file: /cvsroot/boost/boost/boost/numeric/ublas/Attic/iterator.h,v
retrieving revision 1.1.2.8
diff -b -w -r1.1.2.8 iterator.h
519c519
< base () -= n;
---
> this->base () -= n;
524c524
< base () += n;
---
> this->base () += n;
543c543
< return base () ();
---
> return this->base () ();
548c548
< return base ().index ();
---
> return this->base ().index ();
575c575
< base () -= n;
---
> this->base () -= n;
580c580
< base () += n;
---
> this->base () += n;
599c599
< return base () ();
---
> return this->base () ();
604c604
< return base ().index1 ();
---
> return this->base ().index1 ();
608c608
< return base ().index2 ();
---
> return this->base ().index2 ();
614c614
< return base ().begin ();
---
> return this->base ().begin ();
618c618
< return base ().end ();
---
> return this->base ().end ();
654c654
< base () -= n;
---
> this->base () -= n;
659c659
< base () += n;
---
> this->base () += n;
678c678
< return base () ();
---
> return this->base () ();
683c683
< return base ().index1 ();
---
> return this->base ().index1 ();
687c687
< return base ().index2 ();
---
> return this->base ().index2 ();
693c693
< return base ().begin ();
---
> return this->base ().begin ();
697c697
< return base ().end ();
---
> return this->base ().end ();
gcc 3.0.4 (RedHat 7.1):
g++ -fPIC -ftemplate-depth-50 -DUSE_GCC -g -
I"/net/cci/rwgk/boost" -c ublas_shared.cpp
ublas_shared.cpp: In function `int main()':
ublas_shared.cpp:8: ambiguous overload for `numerics::vector<float,
std::vector<float, std::allocator<float> > >& *
numerics::vector<float,
std::vector<float, std::allocator<float> > >&' operator
/net/cci/rwgk/boost/boost/numeric/ublas/vector_et.h:1331: candidates
are:
typename numerics::vector_binary_scalar2_traits<E1, T2,
numerics::scalar_multiplies<typename E1::value_type, T2>
>::result_type
numerics::operator*(const numerics::vector_expression<E>&, const
T2&) [with
E1 = numerics::vector<float, std::vector<float,
std::allocator<float> > >,
T2 = numerics::vector<float, std::vector<float,
std::allocator<float> > >]
/net/cci/rwgk/boost/boost/numeric/ublas/vector_et.h:1113:
typename numerics::vector_binary_scalar1_traits<T1, E2,
numerics::scalar_multiplies<T1, typename E2::value_type>
>::result_type
numerics::operator*(const T1&, const
numerics::vector_expression<E2>&) [with
T1 = numerics::vector<float, std::vector<float,
std::allocator<float> > >,
E2 = numerics::vector<float, std::vector<float,
std::allocator<float> > >]
make: *** [ublas_shared.o] Error 1
Compaq cxx 6.2 (EDG240):
Compaq cxx 6.5 (EDG245):
cxx -I"/net/cci/rwgk/boost"/boost/compatibility/cpp_c_headers -std
strict_ansi -msg_display_number -msg_disable 186,450,1115 -O2 -
I"/net/cci/rwgk/boost" -c ublas_shared.cpp
cxx: Error: ublas_shared.cpp, line 8: #350 more than one operator "*"
matches
these operands:
function template "numerics::operator*(const T1 &, const
numerics::vector_expression<E2> &)"
function template "numerics::operator*(const
numerics::vector_expression<E> &, const T2 &)"
operand types are: numerics::vector<float,
std::vector<float,
std::allocator<float>>> *
numerics::vector<float,
std::vector<float, std::allocator<float>>>
ua = ua * ua;
----------^
cxx: Info: 1 error detected in the compilation of "ublas_shared.cpp".