![]() |
Blitz Devel : |
From: Julian Cummings (cummings_at_[hidden])
Date: 2004-07-28 20:07:32
Theo,
This patch looks correct to me. Perhaps you could also add a short
testsuite code that
exercises the new swap() capability...?
-- Julian C.
Theodore Papadopoulo wrote:
> Hi,
>
>Here is the second of the patch set. This one allows for the use of
>swap on blitz arrays. Because of the way operator= is defined in
>blitz (no deep copy), the standard implementation of std::swap does
>not work, so an overload is needed. This is what this patch provides.
>
>Like the previous one, this post is to give people a chance to
>comment and amend. And I'll wait for an OK from Julian to commit it.
>
> Thank's,
>
> Theo.
>
>
>2004-07-28 Theodore Papadopoulo <Theodore.Papadopoulo_at_[hidden]>
>
> * blitz/memblock.h: Added support for swapping memblocks.
> * blitz/array-impl.h: Added support for swapping arrays using the
> memblock swapping.
>
>Index: blitz/array-impl.h
>===================================================================
>RCS file: /cvsroot/blitz/blitz/blitz/array-impl.h,v
>retrieving revision 1.16
>diff -c -3 -p -r1.16 array-impl.h
>*** blitz/array-impl.h 19 Jun 2004 03:14:11 -0000 1.16
>--- blitz/array-impl.h 28 Jul 2004 13:06:34 -0000
>*************** class _bz_ArrayExpr;
>*** 95,101 ****
> template<typename T_array, typename T_index>
> class IndirectArray;
>
>!
>
> /*
> * Declaration of class Array
>--- 95,102 ----
> template<typename T_array, typename T_index>
> class IndirectArray;
>
>! template <typename P_numtype,int N_rank>
>! void swap(Array<P_numtype,N_rank>&,Array<P_numtype,N_rank>&);
>
> /*
> * Declaration of class Array
>*************** protected:
>*** 2385,2390 ****
>--- 2386,2393 ----
>
> void doTranspose(int destRank, int sourceRank, T_array& array);
>
>+ friend void swap<>(Array<P_numtype,N_rank>&,Array<P_numtype,N_rank>&);
>+
> protected:
> //////////////////////////////////////////////
> // Data members
>*************** ostream& operator<<(ostream&, const Arra
>*** 2465,2470 ****
>--- 2468,2482 ----
> template<typename T_numtype, int N_rank>
> istream& operator>>(istream& is, Array<T_numtype,N_rank>& x);
>
>+ template <typename P_numtype,int N_rank>
>+ void swap(Array<P_numtype,N_rank>& a,Array<P_numtype,N_rank>& b) {
>+ MemoryBlockReference<P_numtype>::swap(a,b);
>+ std::swap(a.storage_,b.storage_);
>+ std::swap(a.length_,b.length_);
>+ std::swap(a.stride_,b.stride_);
>+ std::swap(a.zeroOffset_,b.zeroOffset_);
>+ }
>+
> BZ_NAMESPACE_END
>
> /*
>*************** BZ_NAMESPACE_END
>*** 2492,2495 ****
> #include <blitz/array/stencils.h> // Stencil objects
>
> #endif // BZ_ARRAY_H
>-
>--- 2504,2506 ----
>Index: blitz/memblock.h
>===================================================================
>RCS file: /cvsroot/blitz/blitz/blitz/memblock.h,v
>retrieving revision 1.13
>diff -c -3 -p -r1.13 memblock.h
>*** blitz/memblock.h 20 Jan 2004 20:28:29 -0000 1.13
>--- blitz/memblock.h 28 Jul 2004 13:06:34 -0000
>*************** public:
>*** 314,319 ****
>--- 314,325 ----
> return block_->references();
> }
>
>+ static void swap(MemoryBlockReference<P_type>& a,MemoryBlockReference<P_type>& b) {
>+ std::swap(a.data_,b.data_);
>+ std::swap(a.block_,b.block_);
>+ }
>+
>+
> protected:
>
> void changeToNullBlock()
>
> --------------------------------------------------------------------
> Theodore Papadopoulo
> Email: Theodore.Papadopoulo_at_[hidden] Tel: (33) 04 92 38 76 01
> --------------------------------------------------------------------
>
>
>
>_______________________________________________
>Blitz-dev mailing list
>Blitz-dev_at_[hidden]
>http://www.oonumerics.org/mailman/listinfo.cgi/blitz-dev
>
>
-- Dr. Julian C. Cummings E-mail: cummings_at_[hidden] California Institute of Technology Phone: 626-395-2543 1200 E. California Blvd., Mail Code 158-79 Fax: 626-584-5917 Pasadena, CA 91125