Home | History | Annotate | Download | only in ir
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SKSL_FLOATLITERAL
      9 #define SKSL_FLOATLITERAL
     10 
     11 #include "SkSLContext.h"
     12 #include "SkSLExpression.h"
     13 
     14 namespace SkSL {
     15 
     16 /**
     17  * A literal floating point number.
     18  */
     19 struct FloatLiteral : public Expression {
     20     FloatLiteral(const Context& context, int offset, double value)
     21     : INHERITED(offset, kFloatLiteral_Kind, *context.fFloat_Type)
     22     , fValue(value) {}
     23 
     24     FloatLiteral(int offset, double value, const Type* type)
     25     : INHERITED(offset, kFloatLiteral_Kind, *type)
     26     , fValue(value) {}
     27 
     28     String description() const override {
     29         return to_string(fValue);
     30     }
     31 
     32     bool hasSideEffects() const override {
     33         return false;
     34     }
     35 
     36     bool isConstant() const override {
     37         return true;
     38     }
     39 
     40     bool compareConstant(const Context& context, const Expression& other) const override {
     41         FloatLiteral& f = (FloatLiteral&) other;
     42         return fValue == f.fValue;
     43     }
     44 
     45     double getConstantFloat() const override {
     46         return fValue;
     47     }
     48 
     49     std::unique_ptr<Expression> clone() const override {
     50         return std::unique_ptr<Expression>(new FloatLiteral(fOffset, fValue, &fType));
     51     }
     52 
     53     const double fValue;
     54 
     55     typedef Expression INHERITED;
     56 };
     57 
     58 } // namespace
     59 
     60 #endif
     61