| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- class UCrtC99MathApis : protected DelayLoadLibrary
- {
- private:
- typedef double (__cdecl FNMathFn)(double);
- typedef FNMathFn* PFNMathFn;
- PFNMathFn m_pfnlog2;
- PFNMathFn m_pfnlog1p;
- PFNMathFn m_pfnexpm1;
- PFNMathFn m_pfnacosh;
- PFNMathFn m_pfnasinh;
- PFNMathFn m_pfnatanh;
- PFNMathFn m_pfntrunc;
- PFNMathFn m_pfncbrt;
- public:
- static const LPCWSTR LibraryName;
- UCrtC99MathApis() : m_pfnlog2(nullptr), m_pfnlog1p(nullptr), m_pfnexpm1(nullptr), m_pfnacosh(nullptr), m_pfnasinh(nullptr), m_pfnatanh(nullptr), m_pfntrunc(nullptr), m_pfncbrt(nullptr) { }
- virtual ~UCrtC99MathApis() { }
- virtual LPCWSTR GetLibraryName() const override { return LibraryName; }
- bool IsAvailable() { Ensure(); return DelayLoadLibrary::IsAvailable(); }
- void Ensure();
- HMODULE GetHandle() const { return m_hModule; }
- double log2 (_In_ double x) { Assert(IsAvailable()); return m_pfnlog2 (x); }
- double log1p(_In_ double x) { Assert(IsAvailable()); return m_pfnlog1p(x); }
- double expm1(_In_ double x) { Assert(IsAvailable()); return m_pfnexpm1(x); }
- double acosh(_In_ double x) { Assert(IsAvailable()); return m_pfnacosh(x); }
- double asinh(_In_ double x) { Assert(IsAvailable()); return m_pfnasinh(x); }
- double atanh(_In_ double x) { Assert(IsAvailable()); return m_pfnatanh(x); }
- double trunc(_In_ double x) { Assert(IsAvailable()); return m_pfntrunc(x); }
- double cbrt (_In_ double x) { Assert(IsAvailable()); return m_pfncbrt (x); }
- };
- namespace Js {
- class Math /* TODO: Determine actual object */
- {
- public:
- class EntryInfo
- {
- public:
- static FunctionInfo Abs;
- static FunctionInfo Acos;
- static FunctionInfo Asin;
- static FunctionInfo Atan;
- static FunctionInfo Atan2;
- static FunctionInfo Ceil;
- static FunctionInfo Cos;
- static FunctionInfo Exp;
- static FunctionInfo Floor;
- static FunctionInfo Log;
- static FunctionInfo Max;
- static FunctionInfo Min;
- static FunctionInfo Pow;
- static FunctionInfo Random;
- static FunctionInfo Round;
- static FunctionInfo Sin;
- static FunctionInfo Sqrt;
- static FunctionInfo Tan;
- // ES6 additions
- static FunctionInfo Log10;
- static FunctionInfo Log2;
- static FunctionInfo Log1p;
- static FunctionInfo Expm1;
- static FunctionInfo Cosh;
- static FunctionInfo Sinh;
- static FunctionInfo Tanh;
- static FunctionInfo Acosh;
- static FunctionInfo Asinh;
- static FunctionInfo Atanh;
- static FunctionInfo Hypot;
- static FunctionInfo Trunc;
- static FunctionInfo Sign;
- static FunctionInfo Cbrt;
- static FunctionInfo Imul;
- static FunctionInfo Clz32;
- static FunctionInfo Fround;
- };
- static Var Abs(RecyclableObject* function, CallInfo callInfo, ...);
- static double Abs(double x);
- static Var Acos(RecyclableObject* function, CallInfo callInfo, ...);
- static double Acos(double x);
- static Var Asin(RecyclableObject* function, CallInfo callInfo, ...);
- static double Asin(double x);
- static Var Atan(RecyclableObject* function, CallInfo callInfo, ...);
- static double Atan(double x);
- static Var Atan2( RecyclableObject* function, CallInfo callInfo, ... );
- static double Atan2( double x, double y );
- static Var Ceil(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Cos(RecyclableObject* function, CallInfo callInfo, ...);
- static double Cos(double x);
- static Var Exp(RecyclableObject* function, CallInfo callInfo, ...);
- static double Exp(double x);
- static Var Floor(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Log(RecyclableObject* function, CallInfo callInfo, ...);
- static double Log(double x);
- static Var Max(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Min(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Pow( RecyclableObject* function, CallInfo callInfo, ... );
- static double Pow( double x, double y);
- static Var Random(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Round(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Sin(RecyclableObject* function, CallInfo callInfo, ...);
- static double Sin(double x);
- static Var Sqrt(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Tan( RecyclableObject* function, CallInfo callInfo, ... );
- static double Tan( double x );
- // ES6 Additions
- static Var Log10(RecyclableObject* function, CallInfo callInfo, ...);
- static double Log10(double x);
- static Var Log2(RecyclableObject* function, CallInfo callInfo, ...);
- static double Log2(double x, ScriptContext* scriptContext);
- static Var Log1p( RecyclableObject* function, CallInfo callInfo, ... );
- static Var Expm1(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Cosh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Sinh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Tanh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Acosh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Asinh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Atanh(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Hypot(RecyclableObject* function, CallInfo callInfo, ...);
- static double HypotHelper(Arguments args, ScriptContext* scriptContext);
- static Var Trunc(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Sign(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Cbrt(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Imul(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Clz32(RecyclableObject* function, CallInfo callInfo, ...);
- static Var Fround(RecyclableObject* function, CallInfo callInfo, ...);
- static double NonZeroMin(double x1, double x2, double x3);
- static const double PI;
- static const double E;
- static const double LN10;
- static const double LN2;
- static const double LOG2E;
- static const double LOG10E;
- static const double SQRT1_2;
- static const double SQRT2;
- static const double EPSILON;
- static const double MAX_SAFE_INTEGER;
- static const double MIN_SAFE_INTEGER;
- private:
- static Var FloorDouble(double d, ScriptContext *scriptContext);
- };
- } // namespace Js
|