/* Copyright (C) 2011  Jan Källman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
 * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
 *
 * All code and executables are provided "as is" with no warranty either express or implied.
 * The author accepts no liability for any damage or loss of business that this product may cause.
 *
 * Code change notes:
 *
 * Author							Change						Date
 *******************************************************************************
 * Mats Alm   		                Added		                2013-12-03
 *******************************************************************************/


namespace AppsheetEpplus;

public class BuiltInFunctions : FunctionsModule {
  public BuiltInFunctions() {
    // Text
    Functions["len"] = new Len();
    Functions["lower"] = new Lower();
    Functions["upper"] = new Upper();
    Functions["left"] = new Left();
    Functions["right"] = new Right();
    Functions["mid"] = new Mid();
    Functions["replace"] = new Replace();
    Functions["rept"] = new Rept();
    Functions["substitute"] = new Substitute();
    Functions["concatenate"] = new Concatenate();
    Functions["char"] = new CharFunction();
    Functions["exact"] = new Exact();
    Functions["find"] = new Find();
    Functions["fixed"] = new Fixed();
    Functions["proper"] = new Proper();
    Functions["text"] = new Text();
    Functions["t"] = new T();
    Functions["hyperlink"] = new Hyperlink();
    // Numbers
    Functions["int"] = new CInt();
    // Math
    Functions["abs"] = new Abs();
    Functions["asin"] = new Asin();
    Functions["asinh"] = new Asinh();
    Functions["cos"] = new Cos();
    Functions["cosh"] = new Cosh();
    Functions["power"] = new Power();
    Functions["sign"] = new Sign();
    Functions["sqrt"] = new Sqrt();
    Functions["sqrtpi"] = new SqrtPi();
    Functions["pi"] = new Pi();
    Functions["product"] = new Product();
    Functions["ceiling"] = new Ceiling();
    Functions["count"] = new Count();
    Functions["counta"] = new CountA();
    Functions["countblank"] = new CountBlank();
    Functions["countif"] = new CountIf();
    Functions["countifs"] = new CountIfs();
    Functions["fact"] = new Fact();
    Functions["floor"] = new Floor();
    Functions["sin"] = new Sin();
    Functions["sinh"] = new Sinh();
    Functions["sum"] = new Sum();
    Functions["sumif"] = new SumIf();
    Functions["sumifs"] = new SumIfs();
    Functions["sumproduct"] = new SumProduct();
    Functions["sumsq"] = new Sumsq();
    Functions["stdev"] = new Stdev();
    Functions["stdevp"] = new StdevP();
    Functions["stdev.s"] = new Stdev();
    Functions["stdev.p"] = new StdevP();
    Functions["subtotal"] = new Subtotal();
    Functions["exp"] = new Exp();
    Functions["log"] = new Log();
    Functions["log10"] = new Log10();
    Functions["ln"] = new Ln();
    Functions["max"] = new Max();
    Functions["maxa"] = new Maxa();
    Functions["median"] = new Median();
    Functions["min"] = new Min();
    Functions["mina"] = new Mina();
    Functions["mod"] = new Mod();
    Functions["average"] = new Average();
    Functions["averagea"] = new AverageA();
    Functions["averageif"] = new AverageIf();
    Functions["averageifs"] = new AverageIfs();
    Functions["round"] = new Round();
    Functions["rounddown"] = new Rounddown();
    Functions["roundup"] = new Roundup();
    Functions["rand"] = new Rand();
    Functions["randbetween"] = new RandBetween();
    Functions["quotient"] = new Quotient();
    Functions["trunc"] = new Trunc();
    Functions["tan"] = new Tan();
    Functions["tanh"] = new Tanh();
    Functions["atan"] = new Atan();
    Functions["atan2"] = new Atan2();
    Functions["atanh"] = new Atanh();
    Functions["acos"] = new Acos();
    Functions["acosh"] = new Acosh();
    Functions["var"] = new Var();
    Functions["varp"] = new VarP();
    Functions["large"] = new Large();
    Functions["small"] = new Small();
    Functions["degrees"] = new Degrees();
    // Information
    Functions["isblank"] = new IsBlank();
    Functions["isnumber"] = new IsNumber();
    Functions["istext"] = new IsText();
    Functions["isnontext"] = new IsNonText();
    Functions["iserror"] = new IsError();
    Functions["iserr"] = new IsErr();
    Functions["error.type"] = new ErrorType();
    Functions["iseven"] = new IsEven();
    Functions["isodd"] = new IsOdd();
    Functions["islogical"] = new IsLogical();
    Functions["isna"] = new IsNa();
    Functions["na"] = new Na();
    Functions["n"] = new N();
    // Logical
    Functions["if"] = new If();
    Functions["iferror"] = new IfError();
    Functions["ifna"] = new IfNa();
    Functions["not"] = new Not();
    Functions["and"] = new And();
    Functions["or"] = new Or();
    Functions["true"] = new True();
    Functions["false"] = new False();
    // Reference and lookup
    Functions["address"] = new Address();
    Functions["hlookup"] = new HLookup();
    Functions["vlookup"] = new VLookup();
    Functions["lookup"] = new Lookup();
    Functions["match"] = new ExcelMatch();
    Functions["row"] = new Row {
      SkipArgumentEvaluation = true,
    };
    Functions["rows"] = new Rows {
      SkipArgumentEvaluation = true,
    };
    Functions["column"] = new Column {
      SkipArgumentEvaluation = true,
    };
    Functions["columns"] = new Columns {
      SkipArgumentEvaluation = true,
    };
    Functions["choose"] = new Choose();
    Functions["index"] = new Index();
    Functions["indirect"] = new Indirect();
    Functions["offset"] = new Offset {
      SkipArgumentEvaluation = true,
    };
    // Date
    Functions["date"] = new Date();
    Functions["today"] = new Today();
    Functions["now"] = new Now();
    Functions["day"] = new Day();
    Functions["month"] = new Month();
    Functions["year"] = new Year();
    Functions["time"] = new Time();
    Functions["hour"] = new Hour();
    Functions["minute"] = new Minute();
    Functions["second"] = new Second();
    Functions["weeknum"] = new Weeknum();
    Functions["weekday"] = new Weekday();
    Functions["days360"] = new Days360();
    Functions["yearfrac"] = new Yearfrac();
    Functions["edate"] = new Edate();
    Functions["eomonth"] = new Eomonth();
    Functions["isoweeknum"] = new IsoWeekNum();
    Functions["workday"] = new Workday();
    // Database
    Functions["dget"] = new Dget();
    Functions["dcount"] = new Dcount();
    Functions["dcounta"] = new DcountA();
    Functions["dmax"] = new Dmax();
    Functions["dmin"] = new Dmin();
    Functions["dsum"] = new Dsum();
    Functions["daverage"] = new Daverage();
    Functions["dvar"] = new Dvar();
    Functions["dvarp"] = new Dvarp();
  }
}
