Package org.renjin.invoke.codegen.scalars

Source Code of org.renjin.invoke.codegen.scalars.StringType

package org.renjin.invoke.codegen.scalars;

import org.renjin.invoke.annotations.CoerceLanguageToString;
import org.renjin.invoke.model.JvmMethod;
import org.renjin.sexp.FunctionCall;
import org.renjin.sexp.StringArrayVector;
import org.renjin.sexp.StringVector;
import org.renjin.sexp.Symbol;

import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JExpression;
import com.sun.codemodel.JVar;

public class StringType extends ScalarType {

  @Override
  public Class getScalarType() {
    return String.class;
  }

  @Override
  public String getConversionMethod() {
    return "convertToString";
  }

  @Override
  public String getAccessorMethod() {
    return "getElementAsString";
  }

  @Override
  public Class getVectorType() {
    return StringVector.class;
  }
 
  @Override
  public JExpression testExpr(JCodeModel codeModel, JVar sexpVariable,
      JvmMethod.Argument formal) {
    JExpression vectorTest = super.testExpr(codeModel, sexpVariable, formal);
    if(formal.isAnnotatedWith(CoerceLanguageToString.class)) {
      return vectorTest
          .cor(sexpVariable._instanceof(codeModel.ref(FunctionCall.class)))
          .cor(sexpVariable._instanceof(codeModel.ref(Symbol.class)));
    } else {
      return vectorTest;
    }
  }
 
  @Override
  public Class<StringArrayVector.Builder> getBuilderClass() {
    return StringArrayVector.Builder.class;
  }
}
TOP

Related Classes of org.renjin.invoke.codegen.scalars.StringType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.