blob: d2f1e2bc4ded873b7c7b23b2960acb72929a86c7 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2009, 2020 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.rj.data;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.rj.data.impl.RNullImpl;
/**
* Basic interface of all R object.
* <p>
* To detect the type of an RObject instance, the method {@link #getRObjectType()}
* should be used, not the java class type (e.g. instanceof) of the object.</p>
*/
@NonNullByDefault
public interface RObject {
/**
* Constant indicating the RNullImpl object respectively the R NULL value.
* <p>
* The object is an instance of {@link RNullImpl}.</p>
*/
byte TYPE_NULL= 0x01;
/**
* Constant indicating an {@link RVector} object. An R object is of this type
* if it is a R data object of an "atomic" mode without a dimension attribute
* (<code>dim</dim>).
* <p>
* The object is an instance of {@link RVector}.</p>
*/
byte TYPE_VECTOR= 0x02;
/**
* Constant indicating an {@link RArray} object. An R object is of this type
* if it is a R data object of an "atomic" mode with a dimension attribute
* (<code>dim</dim>).
* <p>
* The object is an instance of {@link RArray}.</p>
*/
byte TYPE_ARRAY= 0x03;
/**
* Constant indicating an RDataFrame object. An R object is of this type
* if it is an R list object inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame}
* and compiling with the R rules for a data frame, especially its children
* are {@link RVector}s of the same length.
* <p>
* The object is an instance of {@link RDataFrame}.</p>
*/
byte TYPE_DATAFRAME= 0x06;
/**
* Constant indicating an RList object. An R object is of this type if it is
* a list but not a data frame (see {@link #TYPE_DATAFRAME}).
* <p>
* The object is an instance of {@link RList}.</p>
*/
byte TYPE_LIST= 0x07;
/**
* Constant indicating an R environment object.
* <p>
* The object is an instance of {@link REnvironment}.</p>
*/
byte TYPE_ENVIRONMENT= 0x08;
/**
* Constant indicating an S4 object. An R object is of this type if the R
* command <code>isS4</code> returns true. This is criterion has priority
* above the criteria for the other data types. If an S4 object represents
* also a simple data type, this data is accessible by its data slot.
* <p>
* The object is an instance of {@link RS4Object}.</p>
*/
byte TYPE_S4OBJECT= 0x0a;
/**
* Constant indicating an R language object.
* <p>
* The object is an instance of {@link RLanguage}.</p>
*/
byte TYPE_LANGUAGE= 0x0c;
/**
* Constant indicating an R function object.
* <p>
* The object is an instance of {@link RFunction}.</p>
*/
byte TYPE_FUNCTION= 0x0d;
/**
* Constant indicating a reference to a R object.
* <p>
* The object is an instance of {@link RReference}.</p>
*/
byte TYPE_REFERENCE= 0x0e;
/**
* Constant indicating an R object not matching one of the other types.
*/
byte TYPE_OTHER= 0x0f;
/**
* Constant indicating an R object is missing (e.g. missing argument, missing slot value).
*
* @since de.walware.rj.data 0.5
*/
byte TYPE_MISSING= 0x11;
/**
* Constant indicating an R object is not yet evaluated.
*
* @since de.walware.rj.data 0.6
*/
byte TYPE_PROMISE= 0x12;
//-- Common class names --//
String CLASSNAME_LOGICAL= "logical";
String CLASSNAME_INTEGER= "integer";
String CLASSNAME_NUMERIC= "numeric";
String CLASSNAME_CHARACTER= "character";
String CLASSNAME_COMPLEX= "complex";
String CLASSNAME_RAW= "raw";
String CLASSNAME_FACTOR= "factor";
String CLASSNAME_ORDERED= "ordered";
String CLASSNAME_ARRAY= "array";
String CLASSNAME_MATRIX= "matrix";
String CLASSNAME_DATAFRAME= "data.frame";
String CLASSNAME_LIST= "list";
String CLASSNAME_PAIRLIST= "pairlist";
String CLASSNAME_ENVIRONMENT= "environment";
String CLASSNAME_NAME= "name";
String CLASSNAME_EXPRESSION= "expression";
String CLASSNAME_CALL= "call";
String CLASSNAME_NULL= "NULL";
//-- Common attribute names --//
String ATTR_ROW_NAMES= "row.names";
String ATTR_NAMES= "names";
/**
* Returns the object type constant of this object
* <p>
* See the object type constants <code>TYPE_</code> defined in {@link RObject}.</p>
*
* @return the object type constant
*/
byte getRObjectType();
/**
* Returns the class name of this object in R.
* <p>
* If the object has multiple S3 class names in R, it returns the first one.
* The analog R command is <code>class(x)[1]</code>.</p>
*
* @return the R class name
*/
String getRClassName();
/**
* Returns the length of the object.
* <p>
* Its meaning depends on the R object type and is undefined for unknown types.</p>
*
* @return the length
*/
long getLength();
/**
* Returns the data store containing object data in a one-dimensional structure.
* <p>
* This is supported by objects of {@link #TYPE_VECTOR}, {@link #TYPE_ARRAY} and
* of {@link #TYPE_S4OBJECT} with a data slot of a one of these types providing a data
* store.</p>
*
* @return the data store or <code>null</code>, if not supported by the object
*/
@Nullable RStore<?> getData();
/**
* Returns the attribute list of the object
* <p>
* Note that by default the attributes are not loaded.</p>
*
* @return the attribute list or <code>null</code>, if not available
*/
@Nullable RList getAttributes();
}