1 //=================================================================================================
2 /*!
3 //  \file blaze/math/CustomVector.h
4 //  \brief Header file for the complete CustomVector implementation
5 //
6 //  Copyright (C) 2012-2020 Klaus Iglberger - All Rights Reserved
7 //
8 //  This file is part of the Blaze library. You can redistribute it and/or modify it under
9 //  the terms of the New (Revised) BSD License. Redistribution and use in source and binary
10 //  forms, with or without modification, are permitted provided that the following conditions
11 //  are met:
12 //
13 //  1. Redistributions of source code must retain the above copyright notice, this list of
14 //     conditions and the following disclaimer.
15 //  2. Redistributions in binary form must reproduce the above copyright notice, this list
16 //     of conditions and the following disclaimer in the documentation and/or other materials
17 //     provided with the distribution.
18 //  3. Neither the names of the Blaze development group nor the names of its contributors
19 //     may be used to endorse or promote products derived from this software without specific
20 //     prior written permission.
21 //
22 //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23 //  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 //  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25 //  SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 //  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27 //  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 //  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 //  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 //  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31 //  DAMAGE.
32 */
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_CUSTOMVECTOR_H_
36 #define _BLAZE_MATH_CUSTOMVECTOR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/math/AlignmentFlag.h>
44 #include <blaze/math/dense/CustomVector.h>
45 #include <blaze/math/dense/DynamicVector.h>
46 #include <blaze/math/dense/StaticVector.h>
47 #include <blaze/math/DenseVector.h>
48 #include <blaze/math/DynamicMatrix.h>
49 #include <blaze/math/ZeroVector.h>
50 #include <blaze/util/Random.h>
51 
52 
53 namespace blaze {
54 
55 //=================================================================================================
56 //
57 //  RAND SPECIALIZATION
58 //
59 //=================================================================================================
60 
61 //*************************************************************************************************
62 /*! \cond BLAZE_INTERNAL */
63 /*!\brief Specialization of the Rand class template for CustomVector.
64 // \ingroup random
65 //
66 // This specialization of the Rand class randomizes instances of CustomVector.
67 */
68 template< typename Type     // Data type of the vector
69         , AlignmentFlag AF  // Alignment flag
70         , PaddingFlag PF    // Padding flag
71         , bool TF           // Transpose flag
72         , typename Tag      // Type tag
73         , typename RT >     // Result type
74 class Rand< CustomVector<Type,AF,PF,TF,Tag,RT> >
75 {
76  public:
77    //**********************************************************************************************
78    /*!\brief Randomization of a CustomVector.
79    //
80    // \param vector The vector to be randomized.
81    // \return void
82    */
randomize(CustomVector<Type,AF,PF,TF,Tag,RT> & vector)83    inline void randomize( CustomVector<Type,AF,PF,TF,Tag,RT>& vector ) const
84    {
85       using blaze::randomize;
86 
87       const size_t size( vector.size() );
88       for( size_t i=0UL; i<size; ++i ) {
89          randomize( vector[i] );
90       }
91    }
92    //**********************************************************************************************
93 
94    //**********************************************************************************************
95    /*!\brief Randomization of a CustomVector.
96    //
97    // \param vector The vector to be randomized.
98    // \param min The smallest possible value for a vector element.
99    // \param max The largest possible value for a vector element.
100    // \return void
101    */
102    template< typename Arg >  // Min/max argument type
randomize(CustomVector<Type,AF,PF,TF,Tag,RT> & vector,const Arg & min,const Arg & max)103    inline void randomize( CustomVector<Type,AF,PF,TF,Tag,RT>& vector,
104                           const Arg& min, const Arg& max ) const
105    {
106       using blaze::randomize;
107 
108       const size_t size( vector.size() );
109       for( size_t i=0UL; i<size; ++i ) {
110          randomize( vector[i], min, max );
111       }
112    }
113    //**********************************************************************************************
114 };
115 /*! \endcond */
116 //*************************************************************************************************
117 
118 } // namespace blaze
119 
120 #endif
121