Beispiel #1
0
static int GM_CDECL gmfMin(gmThread * a_thread)
{
  GM_CHECK_NUM_PARAMS(2);

  int minType = gmMin<int>(a_thread->ParamType(0), a_thread->ParamType(1));
  if(minType < GM_INT)
  {
    return GM_EXCEPTION;
  }

  int maxType = gmMax<int>(a_thread->ParamType(0), a_thread->ParamType(1));

  if(maxType == GM_INT)
  {
    int valX = a_thread->Param(0).m_value.m_int;
    int valY = a_thread->Param(1).m_value.m_int;
    a_thread->PushInt( gmMin(valX, valY) );

    return GM_OK;
  }
  else if(maxType == GM_FLOAT)
  {
    float valX = gmGetFloatOrIntParamAsFloat(a_thread, 0);
    float valY = gmGetFloatOrIntParamAsFloat(a_thread, 1);
    a_thread->PushFloat( gmMin(valX, valY) );

    return GM_OK;
  }
  else
  {
    return GM_EXCEPTION;
  }
}
Beispiel #2
0
void Algebraic::degree(int deg)
{
  int i;

  double* m_a_back;
  m_a_back = m_a;
  int* m_x_back = m_x;
  int* m_y_back = m_y;
  int* m_z_back = m_z;
  double* m_xPow_back = m_xPow;
  double* m_yPow_back = m_yPow;
  double* m_zPow_back = m_zPow;

  int old_numCoef = m_numCoef;
  int old_m_d = m_d;

  m_d = deg;

  calcNumCoef();

  m_a = new double[m_numCoef];
  m_x = new int[m_numCoef];
  m_y = new int[m_numCoef];
  m_z = new int[m_numCoef];
  m_xPow = new double[m_d+1];
  m_yPow = new double[m_d+1];
  m_zPow = new double[m_d+1];

  for (i = 0; i < gmMin(old_numCoef, m_numCoef); i++)
    {
      m_a[i] = m_a_back[i];
      m_x[i] = m_x_back[i];
      m_y[i] = m_y_back[i];
      m_z[i] = m_z_back[i];
    }

  for (i = 0; i < gmMin(old_m_d+1, m_d+1); i++)
    {
      m_xPow[i] = m_xPow_back[i];
      m_yPow[i] = m_yPow_back[i];
      m_zPow[i] = m_zPow_back[i];
    }

  for (i = (int)gmMin(old_numCoef, m_numCoef); i < m_numCoef; i++)
    m_a[i] = 0.0;

  initPowerArrays();

  delete[] m_a_back;
  delete[] m_x_back;
  delete[] m_y_back;
  delete[] m_z_back;
  delete[] m_xPow_back;
  delete[] m_yPow_back;
  delete[] m_zPow_back;
}