@ -1,13 +1,13 @@ 
			
		
	
		
			
				
					/ /  Basic  definitions  of  numbers  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# ifndef _CL_NUMBER_H  
			
		
	
		
			
				
					# define _CL_NUMBER_H  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# include  "cln/object.h"  
			
		
	
		
			
				
					# include  "cln/malloc.h"  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					namespace  cln  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Type  hierachy :  
			
		
	
		
			
				
					/ /  Number  ( N )  =  
			
		
	
		
			
				
					/ /     Real  ( R )  =  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -110,26 +110,12 @@ inline _class_& _class_::operator= (const unsigned long wert)		\ 
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Conversions  to  subtypes :  
			
		
	
		
			
				
					/ /  As ( cl_I ) ( x )  returns  x  as  a  cl_I .  It  first  checks  that  x  is  a  cl_I  
			
		
	
		
			
				
					/ /  and  then  returns  it  without  change  of  representation .  
			
		
	
		
			
				
					#if 0   / /   n o   d e b u g   i n f o r m a t i o n  
			
		
	
		
			
				
					  # define As(type)  as_##type  
			
		
	
		
			
				
					  # define CL_DEFINE_AS_CONVERSION(_class_)				\  
			
		
	
		
			
				
					    extern  const  _class_ &  as_ # # _class_  ( const  cl_number &  x ) ; 		\  
			
		
	
		
			
				
					    inline  const  _class_ &  as_ # # _class_  ( const  _class_ &  x )  {  return  x ;  }  
			
		
	
		
			
				
					# else  / /  Line number information for ease of debugging.  
			
		
	
		
			
				
					  # define As(type)  as_##type cl_as_aux  
			
		
	
		
			
				
					  # define cl_as_aux(expr)  (expr,__FILE__,__LINE__)  
			
		
	
		
			
				
					  # define CL_DEFINE_AS_CONVERSION(_class_)				\  
			
		
	
		
			
				
					    extern  const  _class_ &  as_ # # _class_  ( const  cl_number &  x ,  const  char  *  filename ,  int  line ) ;  \  
			
		
	
		
			
				
					    inline  const  _class_ &  as_ # # _class_  ( const  _class_ &  x ,  const  char  *  filename ,  int  line )  {  ( void ) filename ;  ( void ) line ;  return  x ;  }  
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					namespace  cln  {  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Constructors  and  assignment  operators  from  C  numeric  types .  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  from  ` float ' :  
			
		
	
		
			
				
					union  ffloatjanus ;  
			
		
	
		
			
				
					extern  cl_private_thing  cl_float_to_FF_pointer  ( const  union  ffloatjanus &  val ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# define CL_DEFINE_FLOAT_CONSTRUCTOR(_class_)				\  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -145,6 +131,7 @@ inline _class_& _class_::operator= (const float x)			\ 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  from  ` double ' :  
			
		
	
		
			
				
					union  dfloatjanus ;  
			
		
	
		
			
				
					extern  struct  cl_heap_dfloat  *  cl_double_to_DF_pointer  ( const  union  dfloatjanus &  val ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# define CL_DEFINE_DOUBLE_CONSTRUCTOR(_class_)				\  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -189,7 +176,6 @@ public: 
			
		
	
		
			
				
					/ / 	cl_number  ( const  char  * ) ;  
			
		
	
		
			
				
					/ /  Private  pointer  manipulations .  
			
		
	
		
			
				
						cl_number  ( cl_private_thing ) ;  
			
		
	
		
			
				
						cl_private_thing  _as_cl_private_thing  ( )  const ;  
			
		
	
		
			
				
					} ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Private  constructors .  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -217,8 +203,8 @@ CL_DEFINE_DOUBLE_CONSTRUCTOR(cl_number) 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Hack  section .  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Conversions  to  subtypes  without  checking :  
			
		
	
		
			
				
					/ /  the < cl_I > ( x )  converts  x  to  a  cl_I ,  without  change  of  representation !  
			
		
	
		
			
				
					/ /  Conversions  to  subtypes  without  checking ,  template  version :  
			
		
	
		
			
				
					/ /  the < cl_I > ( x )  converts  x  to  a  cl_I ,  without  change  of  representation .  
			
		
	
		
			
				
					template < class  type >  
			
		
	
		
			
				
					inline  const  type &  the ( const  cl_number &  x )  
			
		
	
		
			
				
					{  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -226,13 +212,31 @@ inline const type& the(const cl_number& x) 
			
		
	
		
			
				
						typedef  int  assertion1  [ 1  -  2  *  ( sizeof ( type )  ! =  sizeof ( cl_number ) ) ] ;  
			
		
	
		
			
				
						return  * ( const  type  * )  & x ;  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Conversions  to  subtypes  without  checking :  
			
		
	
		
			
				
					/ /  The ( cl_I ) ( x )  converts  x  to  a  cl_I ,  without  change  of  representation !  
			
		
	
		
			
				
					/ /  Conversions  to  subtypes  without  checking ,  macro  version :  
			
		
	
		
			
				
					/ /  The ( cl_I ) ( x )  converts  x  to  a  cl_I ,  without  change  of  representation .  
			
		
	
		
			
				
					  # define The(type)  *(const type *) & cl_identity  
			
		
	
		
			
				
					/ /  This  inline  function  is  for  type  checking  purposes  only .  
			
		
	
		
			
				
					  inline  const  cl_number &  cl_identity  ( const  cl_number &  x )  {  return  x ;  }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					}   / /  namespace  cln  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Conversions  to  subtypes :  
			
		
	
		
			
				
					/ /  As ( cl_I ) ( x )  returns  x  as  a  cl_I .  It  first  checks  that  x  is  a  cl_I  
			
		
	
		
			
				
					/ /  and  then  returns  it  without  change  of  representation .  
			
		
	
		
			
				
					#if 0   / /   n o   d e b u g   i n f o r m a t i o n      
			
		
	
		
			
				
					  # define As(type)  as_##type  
			
		
	
		
			
				
					  # define CL_DEFINE_AS_CONVERSION(_class_)				\  
			
		
	
		
			
				
					    extern  const  _class_ &  as_ # # _class_  ( const  cl_number &  x ) ; 		\  
			
		
	
		
			
				
					    inline  const  _class_ &  as_ # # _class_  ( const  _class_ &  x )  {  return  x ;  }  
			
		
	
		
			
				
					# else  / /  Line number information for ease of debugging.  
			
		
	
		
			
				
					  # define As(type)  as_##type cl_as_aux  
			
		
	
		
			
				
					  # define cl_as_aux(expr)  (expr,__FILE__,__LINE__)  
			
		
	
		
			
				
					  # define CL_DEFINE_AS_CONVERSION(_class_)				\  
			
		
	
		
			
				
					    extern  const  _class_ &  as_ # # _class_  ( const  cl_number &  x ,  const  char  *  filename ,  int  line ) ;  \  
			
		
	
		
			
				
					    inline  const  _class_ &  as_ # # _class_  ( const  _class_ &  x ,  const  char  *  filename ,  int  line )  {  ( void ) filename ;  ( void ) line ;  return  x ;  }  
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					/ /  Mutable ( type , x ) ;  
			
		
	
		
			
				
					/ /  x  should  be  a  variable  ` const  type  x '  or  ` const  type &  x ' .  
			
		
	
		
			
				
					/ /  This  macro  introduces  a  new  variable  ` type &  x '  whose  value  can  be  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -252,6 +256,4 @@ inline const type& the(const cl_number& x) 
			
		
	
		
			
				
					    const  type &  __tmp_ # # x  =  * ( const  type * )  & x ; 				\  
			
		
	
		
			
				
					    const  type &  x  =  __tmp_ # # x ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					}   / /  namespace  cln  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# endif  /* _CL_NUMBER_H */