R/vcd2r.R

Defines functions print.VCDFile VCDFile

Documented in VCDFile

# ====================
# The VCDFile Object and Related Objects (the interface stuff)
# ====================

#' VCD2R -- Loading Value Change Dumps into R.
#'
#' TODO: Package doc.
#'
#' @section Foo: Blurb, section
#'
#' @docType package
#' @name VCD2R
NULL
#>NULL

#' Create an VCDFileObject
#'
#' @param filename The file to open.
#' @param parseHeader A flag whether the header should be parsed on opening the file. Default is TRUE.
#' @return An VCDFileObject containing information on \code{file}.
#' @examples
#' \dontrun{
#' VCDFile()
#' VCDFile("inter.vcd")
#' VCDFile("inter.vcd",F)
#' }
#' @export

VCDFile <- function(filename = NA_character_,parseHeader = T){
  vcd <- list(
    filename  = filename,
    date      = NA,
    version = NA_character_,
    timescale = NA_integer_,
    dumpstart = c(0,0), # keep track of where $enddefinitons was, so we can fast-forward to it at later parsing
    hierarchy = NA
  )

  if (!is.na(filename)) {
    if (!file.exists(filename)) {
      warning("File does not exist: ", filename)
      vcd$filename <- NA_character_
    } else {
      if (parseHeader) {
        parseResult <- parseVCDHeader(vcd)
        vcd$date <- parseResult$date
        vcd$version <- parseResult$version
        vcd$timescale <- parseResult$timescale
        vcd$dumpstart <- parseResult$dumpstart
        vcd$hierarchy <- parseResult$hierarchy
      }
    }
  }

  ## Set the name for the class
  class(vcd) <- append(class(vcd),"VCDFile")
  return(vcd)
}


# =========================
# pretty printing function for VCDFile
# =========================

print.VCDFile <- function(x, printVars = F) {
  writeLines(paste0("file: ",x$filename))
  if (length(x$version) > 1) x$version <- c("",x$version)
  if (length(x$date) > 1) x$date <- c("",x$date)
  writeLines(paste0("generated by: ",paste0(x$version,collapse="\n  ")))
  writeLines(paste0("dump time: ",paste0(x$date,collapse="\n  ")))
  writeLines(paste0("timescale: ",paste0(x$timescale,collapse=" ")))
  if (any(class(x$hierarchy)=="Node"))
    nSignals <- x$hierarchy$leafCount
  else
    nSignals <- 0
  writeLines(paste0("number of signals: ",nSignals))
  if (printVars)
    print(x$hierarchy,"humanReadableName")
  invisible(x)
}
wamserma/VCD2R documentation built on May 20, 2023, 11:17 p.m.