R/variable-class.R

Defines functions RMPK_constraint RMPK_variable

#' A variable reference
#'
#' @export
#' @rdname variables
#' @keywords internal
setClass("RMPK_variable",
  slots = c(
    model_ref = "ANY"
  ), contains = "MOI_variable_index"
)

RMPK_variable <- function(index, model_ref = NULL) {
  stopifnot(is.numeric(index), length(index) == 1)
  stopifnot(is.null(model_ref) || inherits(model_ref, "RMPKMipModel"))
  new("RMPK_variable", value = index, model_ref = model_ref)
}

#' A variable reference
#'
#' @export
#' @rdname variables
#' @keywords internal
setClass("RMPK_constraint_ref",
  slots = c(
    model_ref = "ANY"
  ), contains = "MOI_constraint_index"
)

RMPK_constraint <- function(index, model_ref = NULL) {
  stopifnot(is.numeric(index), length(index) == 1)
  stopifnot(is.null(model_ref) || inherits(model_ref, "RMPKMipModel"))
  new("RMPK_constraint_ref", value = index, model_ref = model_ref)
}

setMethod(
  "format",
  "RMPK_variable",
  function(x, ...) {
    format(paste0("Variable (internal solver ref = ", x@value, ")"))
  }
)

setMethod(
  "print",
  "RMPK_variable",
  function(x, ...) {
    cat(format(x))
    invisible(x)
  }
)

setMethod(
  "show",
  "RMPK_variable",
  function(object) {
    print(object)
  }
)

# TODO: turn the map into a fixed length list
# This might be faster, as we know the dimensions
#' @rdname variables
#' @keywords internal
#' @export
setClass("RMPK_variable_list", slots = c(
  variables_map = "ANY",
  arity = "integer",
  index_types = "character"
))

setMethod(
  "format",
  "RMPK_variable_list",
  function(x, ...) {
    format(paste0("Variable container: size = ", x@variables_map$size()))
  }
)

setMethod(
  "print",
  "RMPK_variable_list",
  function(x, ...) {
    cat(format(x))
    invisible(x)
  }
)

setMethod(
  "show",
  "RMPK_variable_list",
  function(object) {
    print(object)
  }
)
dirkschumacher/rmpk documentation built on Dec. 14, 2021, 5:13 p.m.