1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
#include <flens/lapack/interface/include/config.h>
#include <flens/flens.cxx>

namespace flens { namespace lapack {

extern "C" {

MachineParameter
_getMachineParameter(const char c)
{
    MachineParameter machineParameter;

    switch (c) {
        case 'E':
        case 'e': machineParameter = Eps;
                  break;
        case 'S':
        case 's': machineParameter = SafeMin;
                  break;
        case 'B':
        case 'b': machineParameter = Base;
                  break;
        case 'P':
        case 'p': machineParameter = Precision;
                  break;
        case 'N':
        case 'n': machineParameter = Mantissa;
                  break;
        case 'R':
        case 'r': machineParameter = Rounding;
                  break;
        case 'M':
        case 'm': machineParameter = UnderflowExp;
                  break;
        case 'U':
        case 'u': machineParameter = UnderflowThreshold;
                  break;
        case 'L':
        case 'l': machineParameter = OverflowExp;
                  break;
        case 'O':
        case 'o': machineParameter = OverflowThreshold;
                  break;
        default:  ASSERT(0);
    }
    return machineParameter;
}

//-- dlamch --------------------------------------------------------------------
// TODO: change this back to "LAPACK_DECL(dlamch)"
DOUBLE
LAPACK_DECL(__dlamch)(const char *c)
{
    return lamch<DOUBLE>(_getMachineParameter(*c));
}

// extern "C"

} } // namespace lapack, flens