ab8ec30e29
- sistemato minuscole/maiuscole.
113 lines
3.2 KiB
C++
113 lines
3.2 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2018-2018
|
|
//----------------------------------------------------------------------------
|
|
// File : ENmLuaAux.h Data : 07.08.18 Versione : 1.9h1
|
|
// Contenuto : Funzioni per gestione parametri generali con LUA.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 07.08.18 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/ENkCplxCollection.h"
|
|
#include "/EgtDev/Include/EGnLuaAux.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
LuaGetParam( lua_State* L, int nInd, std::complex<double>& cpPar)
|
|
{
|
|
if ( lua_isnumber( L, nInd)) {
|
|
double dVal = lua_tonumber( L, nInd) ;
|
|
cpPar = std::complex<double>( dVal, 0.) ;
|
|
return true ;
|
|
}
|
|
double dVal[2] ;
|
|
if ( LuaGetParam( L, nInd, dVal)) {
|
|
cpPar = std::complex<double>( dVal[0], dVal[1]) ;
|
|
return true ;
|
|
}
|
|
return false ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
LuaGetParam( lua_State* L, int nInd, CPLXVECTOR& vPar)
|
|
{
|
|
vPar.clear() ;
|
|
std::complex<double> cpVal ;
|
|
if ( LuaGetParam( L, nInd, cpVal)) {
|
|
vPar.push_back( cpVal) ;
|
|
return true ;
|
|
}
|
|
else if ( lua_istable( L, nInd)) {
|
|
// lunghezza della tavola
|
|
lua_len( L, nInd) ;
|
|
if ( ! lua_isnumber( L, -1))
|
|
return false ;
|
|
int nLen = int( lua_tointeger( L, -1)) ;
|
|
lua_pop( L, 1) ;
|
|
vPar.reserve( nLen) ;
|
|
for ( int i = 1 ; i <= nLen ; ++ i) {
|
|
lua_rawgeti( L, nInd, i) ;
|
|
std::complex<double> cpVal ;
|
|
if ( ! LuaGetParam( L, -1, cpVal))
|
|
return false ;
|
|
vPar.push_back( cpVal) ;
|
|
lua_pop( L, 1) ;
|
|
}
|
|
return true ;
|
|
}
|
|
else
|
|
return false ;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
LuaSetParam( lua_State* L, const std::complex<double>& cpPar)
|
|
{
|
|
try {
|
|
lua_createtable( L, 2, 0) ;
|
|
lua_pushnumber( L, std::real( cpPar)) ;
|
|
lua_rawseti( L, -2, 1) ;
|
|
lua_pushnumber( L, std::imag( cpPar)) ;
|
|
lua_rawseti( L, -2, 2) ;
|
|
}
|
|
catch( ...) {
|
|
return false ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
inline bool
|
|
LuaSetParam( lua_State* L, const CPLXVECTOR& vPar)
|
|
{
|
|
try {
|
|
// recupero dimensione
|
|
int nDim = int( vPar.size()) ;
|
|
// creo tavola per vSel
|
|
lua_createtable( L, nDim, 0) ;
|
|
// creo e inserisco tavola per ogni componente
|
|
for ( int i = 1 ; i <= nDim ; ++ i) {
|
|
// creo tavola
|
|
lua_createtable( L, 2, 0) ;
|
|
lua_pushnumber( L, std::real( vPar[i-1])) ;
|
|
lua_rawseti( L, -2, 1) ;
|
|
lua_pushnumber( L, std::imag( vPar[i-1])) ;
|
|
lua_rawseti( L, -2, 2) ;
|
|
// la metto nel vettore
|
|
lua_rawseti( L, -2, i) ;
|
|
}
|
|
}
|
|
catch( ...) {
|
|
return false ;
|
|
}
|
|
return true ;
|
|
}
|