<?php 
namespace eMacros\Package; 
 
use eMacros\Runtime\PHPFunction; 
use eMacros\Runtime\Type\IsType; 
 
class MathPackage extends Package { 
    public function __construct() { 
        parent::__construct('Math'); 
         
        //general functions 
        $this['abs'] = new PHPFunction('abs'); 
        $this['pow'] = new PHPFunction('pow'); 
        $this['sqrt'] = new PHPFunction('sqrt'); 
        $this['exp'] = new PHPFunction('exp'); 
        $this['log'] = new PHPFunction('log'); 
        $this['log10'] = new PHPFunction('log10'); 
        $this['round'] = new PHPFunction('round'); 
        $this['floor'] = new PHPFunction('floor'); 
        $this['ceil'] = new PHPFunction('ceil'); 
        $this['min'] = new PHPFunction('min'); 
        $this['max'] = new PHPFunction('max'); 
        $this['rand'] = new PHPFunction('rand'); 
        $this['srand'] = new PHPFunction('srand'); 
        $this['mt-rand'] = new PHPFunction('mt_rand'); 
        $this['mt-srand'] = new PHPFunction('mt_srand'); 
        $this['pi'] = new PHPFunction('pi'); 
        $this['fmod'] = new PHPFunction('fmod'); 
         
        //representation functions 
        $this['decbin'] = new PHPFunction('decbin'); 
        $this['bindec'] = new PHPFunction('bindec'); 
        $this['decoct'] = new PHPFunction('decoct'); 
        $this['octdec'] = new PHPFunction('octdec'); 
        $this['dechex'] = new PHPFunction('dechex'); 
        $this['hexdec'] = new PHPFunction('hexdec'); 
         
        //trigonometric functions 
        $this['sin'] = new PHPFunction('sin'); 
        $this['cos'] = new PHPFunction('cos'); 
        $this['tan'] = new PHPFunction('tan'); 
        $this['asin'] = new PHPFunction('asin'); 
        $this['acos'] = new PHPFunction('acos'); 
        $this['atan'] = new PHPFunction('atan'); 
         
        //constants 
        $this['PI']              = M_PI; 
        $this['PI_2']            = M_PI_2; 
        $this['PI_4']            = M_PI_4; 
        $this['E']               = M_E; 
        $this['EULER']           = M_EULER; 
        $this['ROUND_HALF_UP']   = PHP_ROUND_HALF_UP; 
        $this['ROUND_HALF_DOWN'] = PHP_ROUND_HALF_DOWN; 
        $this['ROUND_HALF_EVEN'] = PHP_ROUND_HALF_EVEN; 
        $this['ROUND_HALF_ODD']  = PHP_ROUND_HALF_ODD; 
         
        /** 
         * MACROS 
         */ 
        $this->macro('/^(finite|infinite|nan)\?$/', function ($matches) { 
            return new IsType('is_' . $matches[1]); 
        }); 
    } 
} 
?>
 
 |