This is MathComplexArrayPrivate.m in view mode; [Download] [Up]
/*
MathComplexArrayPrivate - functions shared by complex MathArrays
Copyright (C) 1995, Adam Fedor
MathComplexArrayPrivate.m,v 1.7 1995/08/10 16:47:24 adam Exp
*/
#include <math.h>
#include <sys/param.h> /* MIN, MAX */
#include "MathArray/complex.h"
#include "MathArray/MaskedException.h"
#include "MathComplexArrayPrivate.h"
complex_double
find_cmin(complex_double a, complex_double b)
{
return (a.real < b.real) ? a : b;
}
complex_double
find_cmax(complex_double a, complex_double b)
{
return (a.real > b.real) ? a : b;
}
complex_double
find_csum(complex_double sum, complex_double num)
{
return c_add(sum, num);
}
complex_double
complexf2d(const void *data, unsigned long loc)
{
complex_double t;
t.real = ((complex_float*)data + loc)->real;
t.imag = ((complex_float*)data + loc)->imag;
return t;
}
complex_float
complexd2f(const void *data, unsigned long loc)
{
complex_float t;
t.real = ((complex_double*)data + loc)->real;
t.imag = ((complex_double*)data + loc)->imag;
return t;
}
/* All the functions which know how to operate on this type */
static inline complex_double
op_exponent(complex_double a, complex_double b) {return cpow(a,b);}
static inline complex_double
op_multiply(complex_double a, complex_double b) {return c_mult(a, b);}
static inline complex_double
op_divide(complex_double a, complex_double b) {return c_div(a, b);}
static inline complex_double
op_add(complex_double a, complex_double b) {return c_add(a,b);}
static inline complex_double
op_subtract(complex_double a, complex_double b) {return c_sub(a, b);}
/*
static inline complex_double
op_mod(complex_double a, complex_double b) { }
*/
static inline complex_double
op_minimum(complex_double a, complex_double b) {return (a.real < b.real) ? a : b;}
static inline complex_double
op_maximum(complex_double a, complex_double b) {return (a.real > b.real) ? a : b;}
/*
static inline complex_double
op_not(complex_double a, complex_double b) { }
*/
static inline complex_double
op_equal(complex_double a, complex_double b)
{
if (a.real == b.real && a.imag == b.imag)
a.real = 1;
else
a.real = 0;
return a;
}
static inline complex_double
op_not_equal(complex_double a, complex_double b)
{
if (a.real != b.real || a.imag != b.imag)
a.real = 1;
else
a.real = 0;
return a;
}
/*
static inline complex_double
op_less_or_equal(complex_double a, complex_double b) { }
static inline complex_double
op_less(complex_double a, complex_double b) { }
static inline complex_double
op_greater_or_equal(complex_double a, complex_double b) { }
static inline complex_double
op_greater(complex_double a, complex_double b) { }
static inline complex_double
op_and(complex_double a, complex_double b) { }
static inline complex_double
op_or(complex_double a, complex_double b) { }
static inline complex_double
op_xor(complex_double a, complex_double b) { }
*/
operate_f_t
operate_function(ma_operator_t operator)
{
switch(operator) {
case ma_exponent:
return op_exponent;
break;
case ma_multiply:
return op_multiply;
break;
case ma_matrix_multiply:
NSCAssert(0, @"Invalid operator reference");
break;
case ma_divide:
return op_divide;
break;
case ma_add:
return op_add;
break;
case ma_subtract:
return op_subtract;
break;
case ma_mod:
return NULL;
break;
case ma_minimum:
return op_minimum;
break;
case ma_maximum:
return op_maximum;
break;
case ma_not:
return NULL;
break;
case ma_equal:
return op_equal;
break;
case ma_not_equal:
return op_not_equal;
break;
case ma_less_or_equal:
return NULL;
break;
case ma_less:
return NULL;
break;
case ma_greater_or_equal:
return NULL;
break;
case ma_greater:
return NULL;
break;
case ma_and:
return NULL;
break;
case ma_or:
return NULL;
break;
case ma_xor:
return NULL;
break;
}
return NULL;
}
complex_func_t
replace_function(double_func_t cf)
{
if (cf == (double_func_t)fabs)
return (complex_func_t)NULL;
else if (cf == (double_func_t)cos)
return ccos;
else if (cf == (double_func_t)exp)
return cexp;
else if (cf == (double_func_t)log)
return clog;
else if (cf == (double_func_t)log10)
return clog10;
else if (cf == (double_func_t)sin)
return csin;
else if (cf == (double_func_t)sqrt)
return csqrt;
else if (cf == (double_func_t)acos)
return cacos;
else if (cf == (double_func_t)asin)
return casin;
else if (cf == (double_func_t)atan)
return catan;
else if (cf == (double_func_t)cosh)
return ccosh;
else if (cf == (double_func_t)sinh)
return csinh;
else if (cf == (double_func_t)tan)
return ctan;
else if (cf == (double_func_t)tanh)
return ctanh;
return (complex_func_t)NULL;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.