// Originally written by Saptarshi Guha for RHIPE (http://www.rhipe.org)
// Released under Apache License 2.0, and reused with permission here
// Extended in November 2014 with new types to support encoding
// language, environment, and function types from R.

package rexp;

option java_package = "org.godhuli.rhipe";
option java_outer_classname = "REXPProtos";

// TODO(mstokely): Refine this using the new protobuf 2.6 oneof field
// for unions.
message REXP {
    enum RClass {
        STRING = 0;
        RAW = 1;
        REAL = 2;
        COMPLEX = 3;
        INTEGER = 4;
        LIST = 5;
        LOGICAL = 6;
        NULLTYPE = 7;
        NATIVE = 8;
    }
    enum RBOOLEAN {
        F=0;
        T=1;
        NA=2;
    }


    required RClass rclass = 1;
    repeated double realValue = 2 [packed=true];
    repeated sint32 intValue = 3 [packed=true];
    repeated RBOOLEAN booleanValue = 4;
    repeated STRING stringValue = 5;

    optional bytes rawValue = 6;
    repeated CMPLX complexValue = 7;
    repeated REXP rexpValue = 8;

    repeated string attrName = 11;
    repeated REXP attrValue = 12;
    optional bytes nativeValue = 13;
}
message STRING {
    optional string strval = 1;
    optional bool isNA = 2 [default=false];
}
message CMPLX {
    optional double real = 1 [default=0];
    required double imag = 2;
}