/**
   * @param c
   * @param vars
   * @return
   * @throws DMLRuntimeException
   */
  private static LiteralOp replaceLiteralValueTypeCastLiteral(Hop c, LocalVariableMap vars)
      throws DMLRuntimeException {
    LiteralOp ret = null;

    // as.double/as.integer/as.boolean over scalar literal (potentially created by other replacement
    // rewrite in same dag) - literal replacement
    if (c instanceof UnaryOp
        && (((UnaryOp) c).getOp() == OpOp1.CAST_AS_DOUBLE
            || ((UnaryOp) c).getOp() == OpOp1.CAST_AS_INT
            || ((UnaryOp) c).getOp() == OpOp1.CAST_AS_BOOLEAN)
        && c.getInput().get(0) instanceof LiteralOp) {
      LiteralOp sdat = (LiteralOp) c.getInput().get(0);
      UnaryOp cast = (UnaryOp) c;
      try {
        switch (cast.getOp()) {
          case CAST_AS_INT:
            long ival = HopRewriteUtils.getIntValue(sdat);
            ret = new LiteralOp(ival);
            break;
          case CAST_AS_DOUBLE:
            double dval = HopRewriteUtils.getDoubleValue(sdat);
            ret = new LiteralOp(dval);
            break;
          case CAST_AS_BOOLEAN:
            boolean bval = HopRewriteUtils.getBooleanValue(sdat);
            ret = new LiteralOp(bval);
            break;
          default:
            // otherwise: do nothing
        }
      } catch (HopsException ex) {
        throw new DMLRuntimeException(ex);
      }
    }

    return ret;
  }