1 /*
  2  *   Copyright (c) 2011, Michael Lehn
  3  *
  4  *   All rights reserved.
  5  *
  6  *   Redistribution and use in source and binary forms, with or without
  7  *   modification, are permitted provided that the following conditions
  8  *   are met:
  9  *
 10  *   1) Redistributions of source code must retain the above copyright
 11  *      notice, this list of conditions and the following disclaimer.
 12  *   2) Redistributions in binary form must reproduce the above copyright
 13  *      notice, this list of conditions and the following disclaimer in
 14  *      the documentation and/or other materials provided with the
 15  *      distribution.
 16  *   3) Neither the name of the FLENS development group nor the names of
 17  *      its contributors may be used to endorse or promote products derived
 18  *      from this software without specific prior written permission.
 19  *
 20  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 21  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 22  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 23  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 24  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 25  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 26  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 27  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 28  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 29  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 30  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 31  */
 32 
 33 #ifndef FLENS_LAPACK_AUX_CONVERT_H
 34 #define FLENS_LAPACK_AUX_CONVERT_H 1
 35 
 36 #include <flens/typedefs.h>
 37 #include <flens/lapack/typedefs.h>
 38 #include <flens/lapack/aux/lascl.h>
 39 #include <flens/lapack/eig/bak.h>
 40 #include <flens/lapack/eig/bal.h>
 41 #include <flens/lapack/eig/evx.h>
 42 #include <flens/lapack/eig/hseqr.h>
 43 #include <flens/lapack/eig/trevc.h>
 44 #include <flens/lapack/eig/trsna.h>
 45 
 46 namespace flens { namespace lapack {
 47 
 48 //-- convert: enum Transpose
 49 template <typename ENUM>
 50     typename RestrictTo<IsSame<ENUM,Transpose>::value, char>::Type
 51     getF77LapackChar(ENUM enumValue);
 52 
 53 //-- convert: enum Side
 54 template <typename ENUM>
 55     typename RestrictTo<IsSame<ENUM,Side>::value, char>::Type
 56     getF77LapackChar(ENUM enumValue);
 57 
 58 //-- convert: enum Norm
 59 template <typename ENUM>
 60     typename RestrictTo<IsSame<ENUM,Norm>::value, char>::Type
 61     getF77LapackChar(ENUM enumValue);
 62 
 63 //-- convert: enum BALANCE::Balance
 64 template <typename ENUM>
 65     typename RestrictTo<IsSame<ENUM,BALANCE::Balance>::value, char>::Type
 66     getF77LapackChar(ENUM enumValue);
 67 
 68 //-- convert: enum SENSE::Sense
 69 template <typename ENUM>
 70     typename RestrictTo<IsSame<ENUM,SENSE::Sense>::value, char>::Type
 71     getF77LapackChar(ENUM enumValue);
 72 
 73 //-- convert: enum HSEQR::Job
 74 template <typename ENUM>
 75     typename RestrictTo<IsSame<ENUM,HSEQR::Job>::value, char>::Type
 76     getF77LapackChar(ENUM enumValue);
 77 
 78 //-- convert: enum HSEQR::ComputeZ
 79 template <typename ENUM>
 80     typename RestrictTo<IsSame<ENUM,HSEQR::ComputeZ>::value, char>::Type
 81     getF77LapackChar(ENUM enumValue);
 82 
 83 //-- convert: enum TREVC::Job
 84 template <typename ENUM>
 85     typename RestrictTo<IsSame<ENUM,TREVC::Job>::value, char>::Type
 86     getF77LapackChar(ENUM enumValue);
 87 
 88 //-- convert: enum TRSNA::Job
 89 template <typename ENUM>
 90     typename RestrictTo<IsSame<ENUM,TRSNA::Job>::value, char>::Type
 91     getF77LapackChar(ENUM enumValue);
 92 
 93 //-- convert: enum TRSNA::HowMany
 94 template <typename ENUM>
 95     typename RestrictTo<IsSame<ENUM,TRSNA::HowMany>::value, char>::Type
 96     getF77LapackChar(ENUM enumValue);
 97 
 98 //-- convert: enum LASCL::Type
 99 template <typename ENUM>
100     typename RestrictTo<IsSame<ENUM,LASCL::Type>::value, char>::Type
101     getF77LapackChar(ENUM enumValue);
102 
103 //------------------------------------------------------------------------------
104 
105 //-- convert: char to enum BALANCE::Balance
106 template <typename ENUM>
107     typename RestrictTo<IsSame<ENUM,BALANCE::Balance>::value,
108                         BALANCE::Balance>::Type
109     getFlensLapackEnum(char trans);
110 
111 //-- convert: char to enum SENSE::Sense
112 template <typename ENUM>
113     typename RestrictTo<IsSame<ENUM,SENSE::Sense>::value,
114                         SENSE::Sense>::Type
115     getFlensLapackEnum(char trans);
116 
117 //-- convert: char to enum Transpose
118 template <typename ENUM>
119     typename RestrictTo<IsSame<ENUM,Transpose>::value, Transpose>::Type
120     getFlensLapackEnum(char trans);
121 
122 //-- convert: char to enum Side
123 template <typename ENUM>
124     typename RestrictTo<IsSame<ENUM,Side>::value, Side>::Type
125     getFlensLapackEnum(char side);
126 
127 //-- convert: char to enum Norm
128 template <typename ENUM>
129     typename RestrictTo<IsSame<ENUM,Norm>::value, Norm>::Type
130     getFlensLapackEnum(char norm);
131 
132 } } // namespace lapack, flens
133 
134 #endif // FLENS_LAPACK_AUX_CONVERT_H