/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.pdfbox.pdmodel.common.function.type4; import java.util.Map; /** * This class provides all the supported operators. * @version $Revision$ */ public class Operators { //Arithmetic operators private static final Operator ABS = new ArithmeticOperators.Abs(); private static final Operator ADD = new ArithmeticOperators.Add(); private static final Operator ATAN = new ArithmeticOperators.Atan(); private static final Operator CEILING = new ArithmeticOperators.Ceiling(); private static final Operator COS = new ArithmeticOperators.Cos(); private static final Operator CVI = new ArithmeticOperators.Cvi(); private static final Operator CVR = new ArithmeticOperators.Cvr(); private static final Operator DIV = new ArithmeticOperators.Div(); private static final Operator EXP = new ArithmeticOperators.Exp(); private static final Operator FLOOR = new ArithmeticOperators.Floor(); private static final Operator IDIV = new ArithmeticOperators.IDiv(); private static final Operator LN = new ArithmeticOperators.Ln(); private static final Operator LOG = new ArithmeticOperators.Log(); private static final Operator MOD = new ArithmeticOperators.Mod(); private static final Operator MUL = new ArithmeticOperators.Mul(); private static final Operator NEG = new ArithmeticOperators.Neg(); private static final Operator ROUND = new ArithmeticOperators.Round(); private static final Operator SIN = new ArithmeticOperators.Sin(); private static final Operator SQRT = new ArithmeticOperators.Sqrt(); private static final Operator SUB = new ArithmeticOperators.Sub(); private static final Operator TRUNCATE = new ArithmeticOperators.Truncate(); //Relational, boolean and bitwise operators private static final Operator AND = new BitwiseOperators.And(); private static final Operator BITSHIFT = new BitwiseOperators.Bitshift(); private static final Operator EQ = new RelationalOperators.Eq(); private static final Operator FALSE = new BitwiseOperators.False(); private static final Operator GE = new RelationalOperators.Ge(); private static final Operator GT = new RelationalOperators.Gt(); private static final Operator LE = new RelationalOperators.Le(); private static final Operator LT = new RelationalOperators.Lt(); private static final Operator NE = new RelationalOperators.Ne(); private static final Operator NOT = new BitwiseOperators.Not(); private static final Operator OR = new BitwiseOperators.Or(); private static final Operator TRUE = new BitwiseOperators.True(); private static final Operator XOR = new BitwiseOperators.Xor(); //Conditional operators private static final Operator IF = new ConditionalOperators.If(); private static final Operator IFELSE = new ConditionalOperators.IfElse(); //Stack operators private static final Operator COPY = new StackOperators.Copy(); private static final Operator DUP = new StackOperators.Dup(); private static final Operator EXCH = new StackOperators.Exch(); private static final Operator INDEX = new StackOperators.Index(); private static final Operator POP = new StackOperators.Pop(); private static final Operator ROLL = new StackOperators.Roll(); private Map<String, Operator> operators = new java.util.HashMap<String, Operator>(); /** * Creates a new Operators object with the default set of operators. */ public Operators() { operators.put("add", ADD); operators.put("abs", ABS); operators.put("atan", ATAN); operators.put("ceiling", CEILING); operators.put("cos", COS); operators.put("cvi", CVI); operators.put("cvr", CVR); operators.put("div", DIV); operators.put("exp", EXP); operators.put("floor", FLOOR); operators.put("idiv", IDIV); operators.put("ln", LN); operators.put("log", LOG); operators.put("mod", MOD); operators.put("mul", MUL); operators.put("neg", NEG); operators.put("round", ROUND); operators.put("sin", SIN); operators.put("sqrt", SQRT); operators.put("sub", SUB); operators.put("truncate", TRUNCATE); operators.put("and", AND); operators.put("bitshift", BITSHIFT); operators.put("eq", EQ); operators.put("false", FALSE); operators.put("ge", GE); operators.put("gt", GT); operators.put("le", LE); operators.put("lt", LT); operators.put("ne", NE); operators.put("not", NOT); operators.put("or", OR); operators.put("true", TRUE); operators.put("xor", XOR); operators.put("if", IF); operators.put("ifelse", IFELSE); operators.put("copy", COPY); operators.put("dup", DUP); operators.put("exch", EXCH); operators.put("index", INDEX); operators.put("pop", POP); operators.put("roll", ROLL); } /** * Returns the operator for the given operator name. * @param operatorName the operator name * @return the operator (or null if there's no such operator */ public Operator getOperator(String operatorName) { return this.operators.get(operatorName); } }