home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 247_01 / flash.hpp < prev    next >
Text File  |  1989-04-19  |  10KB  |  225 lines

  1. /*
  2.  *    Experimental MIRACL  C++ Header file, for use with Zortech C++
  3.  *
  4.  *    AUTHOR  :    N.Coghlan
  5.  *                 Modified by M.Scott
  6.  *    NAME    :    flash.hpp
  7.  *             
  8.  *    PURPOSE :    Definition of class Flash
  9.  */
  10.  
  11. overload cos;
  12. overload sin;
  13. overload tan;
  14. overload acos;
  15. overload asin;
  16. overload atan;
  17.  
  18. overload cosh;
  19. overload sinh;
  20. overload tanh;
  21. overload acosh;
  22. overload asinh;
  23. overload atanh;
  24.  
  25. overload log;
  26. overload exp;
  27. overload pow;
  28. overload sqrt;
  29. overload fabs;
  30. overload rand;
  31.  
  32. #include <stdlib.h>
  33. #include <string.h>
  34. #include <math.h>
  35. #include "miracl.h"
  36.  
  37. class miracl
  38. { /* dummy class to initialise MIRACL */
  39. public:
  40.     miracl(int nd,small nb=MAXBASE) {mirsys(nd,nb);STROUT=TRUE;POINT=TRUE;}
  41. };
  42.  
  43. class Flash
  44. { /* Flash Class Definitions */
  45.     flash fn;      /* pointer to actual data */
  46. public:
  47.     Flash()                                                 {fn=mirvar(0);}
  48.     Flash(int i)                                            {fn=mirvar(i);}
  49.     Flash(long lg)                          {fn=mirvar(0);   lconv(lg,fn);}
  50.     Flash(double d)                         {fn=mirvar(0);    dconv(d,fn);}
  51.     Flash(Flash& f)                         {fn=mirvar(0); copy(f.fn, fn);}
  52.     Flash(char* s)        {fn=mirvar(0);strcpy(IBUFF,s);cinnum(fn, stdin);}
  53.  
  54.     Flash& operator=(int i)              {convert(i,fn);     return *this;}
  55.     Flash& operator=(const double& d)    {dconv(d,fn);       return *this;}
  56.     Flash& operator=(const Flash& f)     {copy(f.fn, fn);    return *this;}
  57.     Flash& operator=(char* s)            {strcpy(IBUFF,s);cinnum(fn,stdin);
  58.                                                              return *this;}
  59.     Flash& operator++()                  {fincr(fn,1,1,fn);  return *this;}
  60.     Flash& operator--()                  {fincr(fn,-1,1,fn); return *this;}
  61.     Flash& operator+=(int i)             {fincr(fn,i,1,fn);  return *this;}
  62.     Flash& operator+=(const Flash& f)    {fadd(fn,f.fn,fn);  return *this;}
  63.     Flash& operator-=(int i)             {fincr(fn,-i,1,fn); return *this;}
  64.     Flash& operator-=(const Flash& f)    {fsub(fn,f.fn,fn);  return *this;}
  65.     Flash& operator*=(int i)             {fpmul(fn,i,1,fn);  return *this;}
  66.     Flash& operator*=(const Flash& f)    {fmul(fn,f.fn,fn);  return *this;}
  67.     Flash& operator/=(int i)             {fpmul(fn,1,i,fn);  return *this;}
  68.     Flash& operator/=(const Flash& f)    {fdiv(fn,f.fn,fn);  return *this;}
  69.  
  70.     friend Flash operator-(const Flash&);   /* unary - */
  71.  
  72.     /* binary ops */
  73.  
  74.     friend Flash operator+(const Flash&, const Flash&);
  75.     friend Flash operator+(const Flash&, int);
  76.     friend Flash operator+(int, const Flash&);
  77.  
  78.     friend Flash operator-(const Flash&, const Flash&);
  79.     friend Flash operator-(const Flash&, int);
  80.     friend Flash operator-(int, const Flash&);
  81.  
  82.     friend Flash operator*(const Flash&, const Flash&);
  83.     friend Flash operator*(const Flash&, int);
  84.     friend Flash operator*(int, const Flash&);
  85.  
  86.     friend Flash operator/(const Flash&, const Flash&);
  87.     friend Flash operator/(const Flash&, int);
  88.     friend Flash operator/(int, const Flash&);
  89.  
  90.     /* relational ops */
  91.  
  92.     friend bool operator<=(const Flash& f1, const Flash& f2)
  93.              {if (fcomp(f1.fn,f2.fn) <= 0) return TRUE; else return FALSE;}
  94.     friend bool operator<=(const Flash& f, int i);
  95.     friend bool operator<=(int i, const Flash& f);
  96.  
  97.     friend bool operator>=(const Flash& f1, const Flash& f2) 
  98.              {if (fcomp(f1.fn,f2.fn) >= 0) return TRUE; else return FALSE;}
  99.     friend bool operator>=(const Flash& f, int i);
  100.     friend bool operator>=(int i, const Flash& f);
  101.  
  102.     friend bool operator==(const Flash& f1, const Flash& f2)
  103.              {if (fcomp(f1.fn,f2.fn) == 0) return TRUE; else return FALSE;}
  104.     friend bool operator==(const Flash& f, int i);
  105.     friend bool operator==(int i, const Flash& f);
  106.  
  107.     friend bool operator!=(const Flash& f1, const Flash& f2)
  108.              {if (fcomp(f1.fn,f2.fn) != 0) return TRUE; else return FALSE;}
  109.     friend bool operator!=(const Flash& f, int i);
  110.     friend bool operator!=(int i, const Flash& f);
  111.  
  112.     friend bool operator<(const Flash& f1, const Flash& f2)
  113.              {if (fcomp(f1.fn,f2.fn) < 0)  return TRUE; else return FALSE;}
  114.     friend bool operator<(const Flash& f, int i);
  115.     friend bool operator<(int i, const Flash& f);
  116.  
  117.     friend bool operator>(const Flash& f1, const Flash& f2) 
  118.              {if (fcomp(f1.fn,f2.fn) > 0)  return TRUE; else return FALSE;}
  119.     friend bool operator>(const Flash& f, int i);
  120.     friend bool operator>(int i, const Flash& f);
  121.  
  122.     friend Flash pi(); 
  123.     friend Flash cos(const Flash&);
  124.     friend Flash sin(const Flash&);
  125.     friend Flash tan(const Flash&);
  126.  
  127.     friend Flash acos(const Flash&);
  128.     friend Flash asin(const Flash&);
  129.     friend Flash atan(const Flash&);
  130.  
  131.     friend Flash cosh(const Flash&);
  132.     friend Flash sinh(const Flash&);
  133.     friend Flash tanh(const Flash&);
  134.  
  135.     friend Flash acosh(const Flash&);
  136.     friend Flash asinh(const Flash&);
  137.     friend Flash atanh(const Flash&);
  138.  
  139.     friend Flash log(const Flash&);
  140.     friend Flash exp(const Flash&);
  141.     friend Flash pow(const Flash&,const Flash&);
  142.     friend Flash pow(const Flash&,int);
  143.     friend Flash sqrt(const Flash&);
  144.     friend Flash fabs(const Flash&);
  145.  
  146.     friend istream& operator>>(istream& s, Flash& x)
  147.                            { s >> IBUFF; cinnum(x.fn,stdin) ;   return s; }
  148.     friend ostream& operator<<(ostream& s, Flash& x)
  149.                   { cotnum(x.fn,stdout); if (STROUT) s << OBUFF; return s;}
  150.  
  151.     ~Flash()                                            {free((char *)fn);}
  152. };
  153.  
  154. Flash operator-(const Flash& f)  {Flash nf; negate(f.fn,nf.fn); return nf;}
  155.  
  156. Flash operator+(const Flash& f1, const Flash& f2)
  157.                          {Flash aff; fadd(f1.fn,f2.fn,aff.fn); return aff;}
  158. Flash operator+(const Flash& f,int i)
  159.                          {Flash afi;    fincr(f.fn,i,1,afi.fn);return afi;}
  160. Flash operator+(int i,const Flash& f)
  161.                          {Flash aif;    fincr(f.fn,i,1,aif.fn);return aif;}
  162.  
  163. Flash operator-(const Flash& f1, const Flash& f2)
  164.                          {Flash mff; fsub(f1.fn,f2.fn,mff.fn); return mff;}
  165. Flash operator-(const Flash& f, int i)
  166.                          {Flash mfi; fincr(f.fn,(-i),1,mfi.fn);return mfi;}
  167. Flash operator-(int i, const Flash& f)
  168.     {Flash mif;fincr(f.fn,(-i),1,mif.fn);negate(mif.fn,mif.fn);return mif;}
  169.  
  170. Flash operator*(const Flash& f1, const Flash& f2)
  171.                          {Flash xff; fmul(f1.fn,f2.fn,xff.fn); return xff;}
  172. Flash operator*(const Flash& f, int i)
  173.                          {Flash xfi;  fpmul(f.fn,i,1,xfi.fn);  return xfi;}
  174. Flash operator*(int i, const Flash& f)
  175.                          {Flash xif;  fpmul(f.fn,i,1,xif.fn);  return xif;}
  176.  
  177. Flash operator/(const Flash& f1, const Flash& f2)
  178.                          {Flash dff; fdiv(f1.fn,f2.fn,dff.fn); return dff;}
  179. Flash operator/(const Flash& f, int i)
  180.                          {Flash dfi;  fpmul(f.fn,1,i,dfi.fn);  return dfi;}
  181. Flash operator/(int i, const Flash& f)
  182.     {Flash dif;  fpmul(f.fn,1,i,dif.fn);frecip(dif.fn,dif.fn); return dif;}
  183.  
  184. Flash pi()                        {Flash z; fpi(z.fn);           return z;}
  185.  
  186. Flash cos(const Flash& f)         {Flash z; fcos(f.fn, z.fn);    return z;}
  187. Flash sin(const Flash& f)         {Flash z; fsin(f.fn, z.fn);    return z;}
  188. Flash tan(const Flash& f)         {Flash z; ftan(f.fn, z.fn);    return z;}
  189.  
  190. Flash acos(const Flash& f)        {Flash z; facos(f.fn, z.fn);   return z;}
  191. Flash asin(const Flash& f)        {Flash z; fasin(f.fn, z.fn);   return z;}
  192. Flash atan(const Flash& f)        {Flash z; fatan(f.fn, z.fn);   return z;}
  193.  
  194. Flash cosh(const Flash& f)        {Flash z; fcosh(f.fn, z.fn);   return z;}
  195. Flash sinh(const Flash& f)        {Flash z; fsinh(f.fn, z.fn);   return z;}
  196. Flash tanh(const Flash& f)        {Flash z; ftanh(f.fn, z.fn);   return z;}
  197.  
  198. Flash acosh(const Flash& f)       {Flash z; facosh(f.fn, z.fn);  return z;}
  199. Flash asinh(const Flash& f)       {Flash z; fasinh(f.fn, z.fn);  return z;}
  200. Flash atanh(const Flash& f)       {Flash z; fatanh(f.fn, z.fn);  return z;}
  201.  
  202. Flash log(const Flash& f)         {Flash z; flog(f.fn, z.fn);    return z;}
  203. Flash exp(const Flash& f)         {Flash z; fexp(f.fn, z.fn);    return z;}
  204. Flash pow(const Flash& f1,const Flash& f2) 
  205.                                {Flash z;fpowf(f1.fn,f2.fn,z.fn); return z;}
  206. Flash pow(const Flash& f,int i)
  207.                                {Flash z; fpower(f.fn,i,z.fn);    return z;}
  208.  
  209. Flash sqrt(const Flash& f)     {Flash z; froot(f.fn, 2, z.fn);   return z;}
  210. Flash fabs(const Flash& f)     {Flash z; absol(f.fn,z.fn);       return z;}
  211.  
  212. bool operator<=(const Flash& b, int i)          {Flash z=i; return (b<=z);}
  213. bool operator<=(int i, const Flash& b)          {Flash z=i; return (z<=b);}
  214. bool operator>=(const Flash& b, int i)          {Flash z=i; return (b>=z);}
  215. bool operator>=(int i, const Flash& b)          {Flash z=i; return (z>=b);}
  216. bool operator==(const Flash& b, int i)          {Flash z=i; return (b==z);}
  217. bool operator==(int i, const Flash& b)          {Flash z=i; return (z==b);}
  218. bool operator!=(const Flash& b, int i)          {Flash z=i; return (b!=z);}
  219. bool operator!=(int i, const Flash& b)          {Flash z=i; return (z!=b);}
  220. bool operator<(const Flash& b, int i)            {Flash z=i; return (b<z);}
  221. bool operator<(int i, const Flash& b)            {Flash z=i; return (z<b);}
  222. bool operator>(const Flash& b, int i)            {Flash z=i; return (b>z);}
  223. bool operator>(int i, const Flash& b)            {Flash z=i; return (z>b);}
  224.  
  225.