R.oo/0000755000176200001440000000000013721504716011075 5ustar liggesusersR.oo/NAMESPACE0000644000176200001440000002114613563564136012326 0ustar liggesusers# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # IMPORTS # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - importFrom("R.methodsS3", "setMethodS3") importFrom("R.methodsS3", "setGenericS3") importFrom("R.methodsS3", "isGenericS3") importFrom("R.methodsS3", "pkgStartupMessage") importFrom("R.methodsS3", "appendVarArgs") importFrom("methods", "getClasses") importFrom("methods", "getMethods") importFrom("methods", "getClass") importFrom("methods", "isClass") importFrom("utils", "as.person") importFrom("utils", "capture.output") importFrom("utils", "citation") importFrom("utils", "compareVersion") importFrom("utils", "file_test") importFrom("utils", "install.packages") importFrom("utils", "installed.packages") importFrom("utils", "object.size") importFrom("utils", "old.packages") importFrom("utils", "packageDescription") importFrom("utils", "sessionInfo") importFrom("utils", "str") importFrom("utils", "update.packages") importFrom("utils", ".DollarNames") if (getRversion() >= "2.14.0") { importFrom("stats", "getCall") } if (getRversion() >= "3.3.0" && "getSource" %in% getNamespaceExports("utils")) { importFrom("utils", "getSource") } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # EXPORTS # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Export all public methods, that is, those without a preceeding dot # in their names. exportPattern("^[^\\.]") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # DECLARATIONS # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # BasicObject S3method(".subset2Internal", "BasicObject") S3method("$", "BasicObject") S3method("$<-", "BasicObject") S3method("[[", "BasicObject") S3method("[[<-", "BasicObject") S3method("as.character", "BasicObject") S3method("attach", "BasicObject") S3method("detach", "BasicObject") S3method("equals", "BasicObject") S3method("extend", "BasicObject") S3method("getFields", "BasicObject") S3method("getInstantiationTime", "BasicObject") S3method("hasField", "BasicObject") S3method("hashCode", "BasicObject") S3method("isReferable", "BasicObject") S3method("newInstance", "BasicObject") S3method("objectSize", "BasicObject") S3method("print", "BasicObject") S3method(".DollarNames", "BasicObject") # character S3method("uses", "character") # Class S3method(".subset2Internal", "Class") S3method("$", "Class") S3method("$<-", "Class") S3method("[[", "Class") S3method("[[<-", "Class") S3method("argsToString", "Class") S3method("as.character", "Class") S3method("forName", "Class") S3method("getDetails", "Class") S3method("getFields", "Class") S3method("getKnownSubclasses", "Class") S3method("getMethods", "Class") S3method("getName", "Class") S3method("getPackage", "Class") S3method("getRdDeclaration", "Class") S3method("getRdHierarchy", "Class") S3method("getRdMethods", "Class") S3method("getStaticInstance", "Class") S3method("getSuperclasses", "Class") S3method("isAbstract", "Class") S3method("isBeingCreated", "Class") S3method("isDeprecated", "Class") S3method("isPrivate", "Class") S3method("isProtected", "Class") S3method("isPublic", "Class") S3method("isStatic", "Class") S3method("newInstance", "Class") S3method("print", "Class") S3method(".DollarNames", "Class") # classRepresentation S3method("getKnownSubclasses", "classRepresentation") S3method("getRdDeclaration", "classRepresentation") S3method("getRdHierarchy", "classRepresentation") S3method("getRdMethods", "classRepresentation") S3method("getSuperclasses", "classRepresentation") # condition S3method("abort", "condition") # default S3method("abort", "default") S3method("attach", "default") S3method("callSuperMethodS3", "default") S3method("charToInt", "default") S3method("detach", "default") S3method("dimension", "default") S3method("equals", "default") S3method("extend", "default") S3method("getConstructorS3", "default") S3method("hashCode", "default") S3method("intToChar", "default") S3method("ll", "default") S3method("load", "default") S3method("objectSize", "default") S3method("save", "default") S3method("setConstructorS3", "default") S3method("throw", "default") S3method("trim", "default") S3method("typeOfClass", "default") # environment S3method("getName", "environment") S3method("objectSize", "environment") # error S3method("throw", "error") # Exception S3method("as.character", "Exception") if (getRversion() >= "2.14.0") { S3method("getCall", "Exception") } S3method("getCalls", "Exception") S3method("getLastException", "Exception") S3method("getMessage", "Exception") S3method("getStackTrace", "Exception") S3method("getStackTraceString", "Exception") S3method("getWhen", "Exception") S3method("print", "Exception") S3method("printStackTrace", "Exception") S3method("throw", "Exception") # Interface S3method("as.character", "Interface") S3method("extend", "Interface") S3method("getFields", "Interface") S3method("print", "Interface") S3method("uses", "Interface") # InternalErrorException S3method("getMessage", "InternalErrorException") S3method("getPackage", "InternalErrorException") # Object S3method(".subset2Internal", "Object") S3method("$", "Object") S3method("$<-", "Object") S3method("[[", "Object") S3method("[[<-", "Object") S3method("as.character", "Object") S3method("attach", "Object") S3method("attachLocally", "Object") S3method("clearCache", "Object") S3method("clearLookupCache", "Object") S3method("clone", "Object") S3method("detach", "Object") S3method("equals", "Object") S3method("extend", "Object") S3method("finalize", "Object") S3method("getEnvironment", "Object") S3method("getFieldModifier", "Object") S3method("getFieldModifiers", "Object") S3method("getFields", "Object") S3method("getInstantiationTime", "Object") S3method("getInternalAddress", "Object") S3method("getStaticInstance", "Object") S3method("hasField", "Object") S3method("hashCode", "Object") S3method("isReferable", "Object") S3method("ll", "Object") S3method("load", "Object") S3method("names", "Object") S3method("newInstance", "Object") S3method("novirtual", "Object") S3method("objectSize", "Object") S3method("print", "Object") S3method("save", "Object") S3method("staticCode", "Object") S3method(".DollarNames", "Object") # Package S3method("as.character", "Package") S3method("getAuthor", "Package") S3method("getBundle", "Package") S3method("getBundlePackages", "Package") S3method("getChangeLog", "Package") S3method("getClasses", "Package") S3method("getContents", "Package") S3method("getContribUrl", "Package") S3method("getDataPath", "Package") S3method("getDate", "Package") S3method("getDescription", "Package") S3method("getDescriptionFile", "Package") S3method("getDevelUrl", "Package") S3method("getDocPath", "Package") S3method("getEnvironment", "Package") S3method("getExamplePath", "Package") S3method("getHistory", "Package") S3method("getHowToCite", "Package") S3method("getLicense", "Package") S3method("getMaintainer", "Package") S3method("getName", "Package") S3method("getNews", "Package") S3method("getPath", "Package") S3method("getPosition", "Package") S3method("getTitle", "Package") S3method("getUrl", "Package") S3method("getVersion", "Package") S3method("isLoaded", "Package") S3method("isOlderThan", "Package") S3method("ll", "Package") S3method("load", "Package") S3method("showChangeLog", "Package") S3method("showContents", "Package") S3method("showDescriptionFile", "Package") S3method("showHistory", "Package") S3method("showHowToCite", "Package") S3method("showNews", "Package") S3method("startupMessage", "Package") S3method("unload", "Package") # RccViolationException S3method("as.character", "RccViolationException") S3method("getRccUrl", "RccViolationException") # Rdoc S3method("argsToString", "Rdoc") S3method("check", "Rdoc") S3method("compile", "Rdoc") S3method("createManPath", "Rdoc") S3method("createName", "Rdoc") S3method("declaration", "Rdoc") S3method("escapeRdFilename", "Rdoc") S3method("getClassS4Usage", "Rdoc") S3method("getKeywords", "Rdoc") S3method("getManPath", "Rdoc") S3method("getNameFormat", "Rdoc") S3method("getObject", "Rdoc") S3method("getPackageNameOf", "Rdoc") S3method("getRdTitle", "Rdoc") S3method("getUsage", "Rdoc") S3method("hierarchy", "Rdoc") S3method("isKeyword", "Rdoc") S3method("isVisible", "Rdoc") S3method("methodsInheritedFrom", "Rdoc") S3method("setManPath", "Rdoc") S3method("setNameFormat", "Rdoc") # RdocException S3method("as.character", "RdocException") S3method("getSource", "RdocException") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Should be renamed/removed from API # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # default S3method("getClasses", "default") S3method("getMethods", "default") R.oo/man/0000755000176200001440000000000013563564136011656 5ustar liggesusersR.oo/man/isPrivate.Class.Rd0000644000176200001440000000204213621423127015142 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isPrivate.Class} \alias{isPrivate.Class} \alias{Class.isPrivate} \alias{isPrivate,Class-method} \title{Checks if a class is defined private or not} \description{ Checks if a class is defined private or not. } \usage{ \method{isPrivate}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is private, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ if (isPrivate(RccViolationException)) throw("The class RccViolationException should NOT be private.") } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/isOlderThan.Package.Rd0000644000176200001440000000201713621423131015673 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isOlderThan.Package} \alias{isOlderThan.Package} \alias{Package.isOlderThan} \alias{isOlderThan,Package-method} \title{Checks if the package is older than a given version} \description{ Checks if the package is older than a given version. } \usage{ \method{isOlderThan}{Package}(this, version, ...) } \arguments{ \item{version}{A \code{\link[base]{character}} string specifying a version to compare with.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the version of the package is less than the specified version. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. \code{\link[R.oo:getVersion.Package]{*getVersion}()}. } \keyword{internal} \keyword{methods} R.oo/man/getCalls.Exception.Rd0000644000176200001440000000212713621423130015621 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getCalls.Exception} \alias{getCalls.Exception} \alias{Exception.getCalls} \alias{getCalls,Exception-method} \alias{Exception.getCall} \alias{getCall.Exception} \alias{getCall,Exception-method} \title{Gets the active calls saved when the exception was created} \description{ . } \usage{ \method{getCalls}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an unnamed \code{\link[base]{list}} with @language elements. } \examples{\dontrun{For a complete example see help(Exception).}} \seealso{ \code{\link[R.oo:getStackTrace.Exception]{*getStackTrace}()}. \code{\link[utils:debugger]{sys.calls}()}. For more information see \code{\link{Exception}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/methodsInheritedFrom.Rdoc.Rd0000644000176200001440000000233013621423131017134 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$methodsInheritedFrom} \alias{Rdoc$methodsInheritedFrom} \alias{methodsInheritedFrom.Rdoc} \alias{Rdoc.methodsInheritedFrom} \alias{methodsInheritedFrom,Rdoc-method} \title{Gets all methods inherited from a class in Rd format} \description{ Gets all methods inherited from a class in Rd format. } \usage{ ## Static method (use this): ## Rdoc$methodsInheritedFrom(class, visibility=c("public", "protected", "private"), ## showDeprecated=FALSE, inheritedFrom=NULL, sort=TRUE, trial=FALSE, ...) ## Don't use the below: \method{methodsInheritedFrom}{Rdoc}(this, class, visibility=c("public", "protected", "private"), showDeprecated=FALSE, inheritedFrom=NULL, sort=TRUE, trial=FALSE, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/Interface.Rd0000644000176200001440000000224013621423130014022 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Interface} \docType{class} \alias{Interface} \title{The Interface class} \description{ Package: R.oo \cr \bold{Class Interface}\cr \code{+--}\code{Interface}\cr \bold{Directly known subclasses:}\cr \cr public class \bold{Interface}\cr This class represents a special set of classes whose purpose is to provide methods (but not fields) shared by multiple different classes. } \usage{ Interface(core=NA, ...) } \arguments{ \item{core}{The core value.} \item{...}{Not used.} } \section{Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:extend.Interface]{extend}} \tab Extends another Interface class.\cr \tab \code{\link[R.oo:print.Interface]{print}} \tab Prints an Interface.\cr \tab \code{\link[R.oo:uses.Interface]{uses}} \tab Specifies that an object uses this Interface.\cr } } \author{Henrik Bengtsson} \keyword{classes} \keyword{internal} R.oo/man/escapeRdFilename.Rdoc.Rd0000644000176200001440000000202513621423131016201 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$escapeRdFilename} \alias{Rdoc$escapeRdFilename} \alias{escapeRdFilename.Rdoc} \alias{Rdoc.escapeRdFilename} \alias{escapeRdFilename,Rdoc-method} \title{Escape non-valid characters in a filename} \description{ Escape non-valid characters in a filename. } \usage{ ## Static method (use this): ## Rdoc$escapeRdFilename(filename, ...) ## Don't use the below: \method{escapeRdFilename}{Rdoc}(static, filename, ...) } \arguments{ \item{filename}{A filename (\code{\link[base]{character}} string) to be escaped.} \item{...}{Not used.} } \value{ Returns \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/as.character.Object.Rd0000644000176200001440000000213713621423127015700 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.Object} \alias{as.character.Object} \alias{Object.as.character} \alias{as.character,Object-method} \title{Gets a character string representing the object} \description{ Gets a character string representing the object. In the class Object, this method simply returns the class name and the hashCode() value of the object. } \usage{ \method{as.character}{Object}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string representation of the Object. By default it is "\{class name\}: \{hash code\}". } \examples{ obj <- Object() as.character(obj) # "Object: 0x000000000ab6a7a8" } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getVersion.Package.Rd0000644000176200001440000000150113621423131015601 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getVersion.Package} \alias{getVersion.Package} \alias{Package.getVersion} \alias{getVersion,Package-method} \title{Gets the version of this package} \description{ Gets the version of this package. } \usage{ \method{getVersion}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. \code{\link[R.oo:isOlderThan.Package]{*isOlderThan}()}. } \keyword{internal} \keyword{methods} R.oo/man/setManPath.Rdoc.Rd0000644000176200001440000000217013621423131015057 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$setManPath} \alias{Rdoc$setManPath} \alias{setManPath.Rdoc} \alias{Rdoc.setManPath} \alias{setManPath,Rdoc-method} \title{Sets the path to the directory where the Rd files should be saved} \description{ Sets the path to the directory where the Rd files should be saved. By default the path is \code{../man/} assuming that the current directory is \code{../R/}, which is where source files commonly are placed. } \usage{ ## Static method (use this): ## Rdoc$setManPath(path="../man/", ...) ## Don't use the below: \method{setManPath}{Rdoc}(this, path="../man/", ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getManPath.Rdoc]{*getManPath}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/isKeyword.Rdoc.Rd0000644000176200001440000000164313621423131014777 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$isKeyword} \alias{Rdoc$isKeyword} \alias{isKeyword.Rdoc} \alias{Rdoc.isKeyword} \alias{isKeyword,Rdoc-method} \title{Checks if a word is a Rd keyword} \description{ Checks if a word is a Rd keyword. } \usage{ ## Static method (use this): ## Rdoc$isKeyword(word, ...) ## Don't use the below: \method{isKeyword}{Rdoc}(this, word, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{logical}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getKeywords.Rdoc]{*getKeywords}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getPackage.InternalErrorException.Rd0000644000176200001440000000171313621423130020625 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % InternalErrorException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getPackage.InternalErrorException} \alias{getPackage.InternalErrorException} \alias{InternalErrorException.getPackage} \alias{getPackage,InternalErrorException-method} \title{Gets the suspicious package likely to contain an error} \description{ Gets the suspicious package likely to contain an error. } \usage{ \method{getPackage}{InternalErrorException}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link{Package}} object. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{InternalErrorException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/intToChar.Rd0000644000176200001440000000241413621423127014026 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % ASCII.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{intToChar} \alias{intToChar.default} \alias{intToChar} \title{Converts a vector of integers into a vector of ASCII characters} \description{ Converts a vector of ASCII integers to a equal length vector of ASCII characters. To make sure that all values in the input vector are in the range [0,255], the input vector is taken modulo 256. } \usage{ \method{intToChar}{default}(i, ...) } \arguments{ \item{i}{An \code{\link[base]{integer}} \code{\link[base]{vector}}.} \item{...}{Not used.} } \value{ Returns an ASCII \code{\link[base]{character}} \code{\link[base]{vector}}. } \author{Henrik Bengtsson} \examples{ i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" } \seealso{ \code{\link[base]{utf8Conversion}}. \code{\link{charToInt}}() } \keyword{character} \keyword{internal} R.oo/man/getFields.BasicObject.Rd0000644000176200001440000000216313621423130016203 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getFields.BasicObject} \alias{getFields.BasicObject} \alias{BasicObject.getFields} \alias{getFields,BasicObject-method} \title{Returns the field names of an BasicObject} \description{ Returns the field names of an BasicObject. } \usage{ \method{getFields}{BasicObject}(this, private=FALSE, ...) } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields will also be returned, otherwise only public fields are returned.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of field names. } \author{Henrik Bengtsson} \seealso{ To check if a field exists or not, see \code{\link[R.oo:hasField.BasicObject]{*hasField}()}. For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/argsToString.Class.Rd0000644000176200001440000000211013621423127015616 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Class$argsToString} \alias{Class$argsToString} \alias{argsToString.Class} \alias{Class.argsToString} \alias{argsToString,Class-method} \title{Gets the arguments of a function as a character string} \description{ Gets the arguments (with default values) of a function as a character string, which can be used for debugging purposes etc. Used by: classinfo(). } \usage{ ## Static method (use this): ## Class$argsToString(fcn, ...) ## Don't use the below: \method{argsToString}{Class}(this, fcn, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ Class$argsToString(plot) } \seealso{ For more information see \code{\link{Class}}. } \author{Henrik Bengtsson} \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/compileRdoc.Rd0000644000176200001440000000274113621423132014372 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % compileRdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{compileRdoc} \alias{compileRdoc} \title{Compiles the Rdoc help comments in a package} \description{ Compiles the Rdoc help comments in a package by parsing the source code files and writes Rd help files. } \usage{ compileRdoc(pkgname=NULL, path=pkgname, ..., verbose=TRUE) } \arguments{ \item{pkgname}{A \code{\link[base]{character}} string specifying the package name. If \code{\link[base]{NULL}}, the package name is inferred from the DESCRIPTION file that is automatically search for in the subdirectories.} \item{path}{A \code{\link[base]{character}} string specifying the path of the package source directory.} \item{...}{Additional arguments passed to \code{Rdoc\$compile()}.} \item{verbose}{If \code{\link[base:logical]{TRUE}}, verbose output is printed, otherwise not.} } \value{ Returns nothing. } \details{ To compile all Rdoc comments in a package 'PkgA' that is located under the current working directory (e.g. \code{PkgA/R/*.R}) from the system command line, do: \preformatted{ Rscript -e R.oo::compileRdoc() } } \author{Henrik Bengtsson} \seealso{ See the \code{\link{Rdoc}} class. } \keyword{documentation} \keyword{IO} \keyword{internal} R.oo/man/load.Package.Rd0000644000176200001440000000200613621423131014374 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{load.Package} \alias{load.Package} \alias{Package.load} \alias{load,Package-method} \title{Loads a package} \description{ Loads a package. This is an alternative way to use \code{library()} to load a package. } \usage{ \method{load}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ \code{\link[base:logical]{TRUE}} if the packages is loaded, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ pkg <- Package("base") print(load(pkg)) } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:unload.Package]{*unload}()}. \code{\link[R.oo:isLoaded.Package]{*isLoaded}()}. \code{\link[base]{search}}(). For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/print.Interface.Rd0000644000176200001440000000146113621423130015161 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{print.Interface} \alias{print.Interface} \alias{Interface.print} \alias{print,Interface-method} \title{Prints an Interface} \description{ For all objects of class \code{\link{Interface}}, this method will print the value of \code{as.character()} of the object. } \usage{ \method{print}{Interface}(x, ...) } \arguments{ \item{...}{Not used.} } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Interface}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/print.BasicObject.Rd0000644000176200001440000000172513621423130015434 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{print.BasicObject} \alias{print.BasicObject} \alias{BasicObject.print} \alias{print,BasicObject-method} \title{Prints an BasicObject} \description{ For all objects of class \code{\link{BasicObject}}, this method will print the value of \code{as.character()} of the object. Note that this function is not called if the argument is not an object of class \code{\link{BasicObject}}. } \usage{ \method{print}{BasicObject}(x, ...) } \arguments{ \item{...}{Not used.} } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{print.default}}() For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getRdTitle.Rdoc.Rd0000644000176200001440000000207013621423131015061 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getRdTitle} \alias{Rdoc$getRdTitle} \alias{getRdTitle.Rdoc} \alias{Rdoc.getRdTitle} \alias{getRdTitle,Rdoc-method} \title{Extracts the title string of a Rd file} \description{ Extracts the title string of a Rd file corresponding the the specified method of the specified class. } \usage{ ## Static method (use this): ## Rdoc$getRdTitle(class, method, ...) ## Don't use the below: \method{getRdTitle}{Rdoc}(this, class, method, ...) } \arguments{ \item{method}{The method to be search for.} \item{class}{The class the method belongs to.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/as.character.Class.Rd0000644000176200001440000000163613621423127015542 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.Class} \alias{as.character.Class} \alias{Class.as.character} \alias{as.character,Class-method} \title{Returns a short string describing the class} \description{ Returns a short string describing the class. } \usage{ \method{as.character}{Class}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ print(as.character(Object)) # gives: "Class Object: no fields, 8 methods (no inherited)" } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getPackageNameOf.Rdoc.Rd0000644000176200001440000000242113621423131016133 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getPackageNameOf} \alias{Rdoc$getPackageNameOf} \alias{getPackageNameOf.Rdoc} \alias{Rdoc.getPackageNameOf} \alias{getPackageNameOf,Rdoc-method} \title{Gets the package of a method or an object} \description{ Gets the package of a method or an object. } \usage{ ## Static method (use this): ## Rdoc$getPackageNameOf(objectName, mode="any", unique=TRUE, ...) ## Don't use the below: \method{getPackageNameOf}{Rdoc}(static, objectName, mode="any", unique=TRUE, ...) } \arguments{ \item{objectName}{An method or object name (\code{\link[base]{character}} string).} \item{mode}{Mode of object (\code{\link[base]{character}} string).} \item{unique}{If \code{\link[base:logical]{TRUE}}, only the first matching package is returned if more than one is found.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/attachLocally.Object.Rd0000644000176200001440000000425713621423127016133 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{attachLocally.Object} \alias{attachLocally.Object} \alias{Object.attachLocally} \alias{attachLocally,Object-method} \title{Attaches an Object locally to an environment} \usage{ \method{attachLocally}{Object}(this, private=FALSE, fields=NULL, excludeFields=NULL, overwrite=TRUE, envir=parent.frame(), ...) } \description{ Attaches an Object locally to an environment. By default, the fields of the Object are attached to the parent frame, that is, the calling environment. } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields are included, otherwise not. This is only effective if \code{fields==NULL}.} \item{fields}{A \code{\link[base]{character}} \code{\link[base]{vector}} specifying elements to be copied. If \code{\link[base]{NULL}}, all elements are considered.} \item{excludeFields}{A \code{\link[base]{character}} \code{\link[base]{vector}} specifying elements not to be copied. This has higher priority than \code{fields}.} \item{overwrite}{If \code{\link[base:logical]{FALSE}}, fields that already exists will not be copied.} \item{envir}{The \code{\link[base]{environment}} where fields are copied to.} \item{...}{Not used.} } \value{ Returns (invisibly) a \code{\link[base]{character}} \code{\link[base]{vector}} of the fields copied. } \examples{ foo <- function(object, arg1="some value", ...) { cat("Local objects in foo():\n") print(ls()) attachLocally(object) cat("\nLocal objects in foo():\n") print(ls()) for (name in ls()) { cat("\nObject '", name, "':\n", sep="") print(get(name, inherits=FALSE)) } } a <- "A string" obj <- Object() obj$a <- "Another string" obj$b <- NA foo(obj) print(a) } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:attach.Object]{*attach}()} For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{utilities} \keyword{programming} R.oo/man/getConstructorS3.Rd0000644000176200001440000000145113621423132015362 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % getConstructorS3.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getConstructorS3} \alias{getConstructorS3.default} \alias{getConstructorS3} \title{Get a constructor method} \description{ Get a constructor method. } \usage{ \method{getConstructorS3}{default}(name, ...) } \arguments{ \item{name}{The name of the constructor function.} \item{...}{Not used.} } \seealso{ \code{\link{setConstructorS3}}(). \code{\link[R.methodsS3]{getMethodS3}}. \code{\link[R.methodsS3]{isGenericS3}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} R.oo/man/uses.Interface.Rd0000644000176200001440000000154513621423130015007 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{uses.Interface} \alias{uses.Interface} \alias{Interface.uses} \alias{uses,Interface-method} \alias{uses} \alias{uses.character} \title{Specifies that an object uses this Interface} \description{ Specifies that an object uses this Interface. } \usage{ \method{uses}{Interface}(this, ...) } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of class names of Interface:s. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Interface}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/DOLLARLT_-.Class.Rd0000644000176200001440000000445413621423127014636 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR< -.Class} \alias{$<-.Class} \alias{Class.$<-} \alias{$<-,Class-method} \alias{Class.[[<-} \alias{[[<-.Class} \alias{[[<-,Class-method} \title{Makes the fields and methods of an Class assignable via the \$<- and the [[<- operator} \usage{ \method{$}{Class}(this, name) <- value \method{[[}{Class}(this, name) <- value } \description{ Makes the fields and methods of an Class assignable via the \code{$<-} operator. This method is never called explicitly, but through an indirect usage of the \code{$<-} operator, e.g. \code{obj$name <- "foo"}. \enumerate{ \item This method will first search for a \preformatted{set()} method, e.g. if name has the value \code{"age"}, a \code{setAge()} will be looked for. If such a method exists it will be called with the Class as the first argument and \code{value} as the second, e.g. \code{setAge(this, value)}. A \code{get()} is only looked for if \code{} is not a private field. A private field is a name \emph{beginning} with a \code{.} (period). The rational for this naming convention is to be consistent with how \code{\link[base]{ls}()} works, which will not list such members by default. \item If no such method exists it will assign the \code{value} to a (existing or a non-existing) field named \code{name}. } Because any \preformatted{set()} is called first, it is possible to \emph{encapsulate} (hide away) fields with certain names or to put restrictions to what values can be assigned to them. } \arguments{ \item{name}{The name of the \preformatted{set()} method or the name of the field to be assigned the new value.} \item{value}{The value to be assigned.} \item{...}{Not used.} } \value{ Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. } \examples{\dontrun{For a complete example see help(Class).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getStackTrace.Exception.Rd0000644000176200001440000000221713621423130016607 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getStackTrace.Exception} \alias{getStackTrace.Exception} \alias{Exception.getStackTrace} \alias{getStackTrace,Exception-method} \title{Gets the stack trace saved when the exception was created} \description{ . } \usage{ \method{getStackTrace}{Exception}(this, cleanup=getOption("R.oo::Exception/getStackTrace/args/cleanup", TRUE), ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{list}} containing the stack trace. } \examples{\dontrun{For a complete example see help(Exception).}} \seealso{ \code{\link[R.oo:printStackTrace.Exception]{*printStackTrace}()}. \code{\link[utils:debugger]{dump.frames}()}. \code{\link[base:conditions]{tryCatch}()}. For more information see \code{\link{Exception}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/getKnownSubclasses.classRepresentation.Rd0000644000176200001440000000134613621423132022005 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % classRepresentation.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getKnownSubclasses.classRepresentation} \alias{getKnownSubclasses.classRepresentation} \title{Gets the known subclasses} \description{ Gets the known subclasses. } \usage{ \method{getKnownSubclasses}{classRepresentation}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \keyword{methods} \keyword{internal} \keyword{documentation} R.oo/man/extend.BasicObject.Rd0000644000176200001440000000246713621423130015573 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{extend.BasicObject} \alias{extend.BasicObject} \alias{BasicObject.extend} \alias{extend,BasicObject-method} \title{Extends another class} \description{ via a mechanism known as "parasitic inheritance". Simply speaking this method "extends another class". What is actually happening is that it creates an instance of class name \code{...className}, by taking another BasicObject instance and add \code{...className} to the class list and also add all the named values in \code{...} as fields to the new instance. The method should be used by the constructor of a class and nowhere else. } \usage{ \method{extend}{BasicObject}(this, ...className, ...) } \arguments{ \item{...className}{The name of new class.} \item{...}{Named values representing the fields of the new instance.} } \value{ Returns an BasicObject of class \code{className}. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getUsage.Rdoc.Rd0000644000176200001440000000232213621423131014556 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getUsage} \alias{Rdoc$getUsage} \alias{getUsage.Rdoc} \alias{Rdoc.getUsage} \alias{getUsage,Rdoc-method} \title{Gets the usage of a method} \description{ Gets the usage of a method. } \usage{ ## Static method (use this): ## Rdoc$getUsage(method, class=NULL, wrap=90L, indent=2L, ...) ## Don't use the below: \method{getUsage}{Rdoc}(static, method, class=NULL, wrap=90L, indent=2L, ...) } \arguments{ \item{method}{A method name (\code{\link[base]{character}} string).} \item{class}{An optional class name (\code{\link[base]{character}} string).} \item{wrap}{An \code{\link[base]{integer}} specifying the maximum number of characters per line. Longer lines will be wrapped with newlines.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/isReferable.Object.Rd0000644000176200001440000000163013621423127015562 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isReferable.Object} \alias{isReferable.Object} \alias{Object.isReferable} \alias{isReferable,Object-method} \title{Checks if the object is referable or not} \description{ Checks if the object is referable or not. } \usage{ \method{isReferable}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{logical}} value, which by default is \code{\link[base:logical]{TRUE}} for all \code{\link[R.oo]{Object}}'s. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/clone.Object.Rd0000644000176200001440000000177113621423127014445 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{clone.Object} \alias{clone.Object} \alias{Object.clone} \alias{clone,Object-method} \title{Clones an Object} \description{ Creates an identical copy of the object and returns a reference to the new object. } \usage{ \method{clone}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ A reference to the new object. } \examples{ o1 <- Object() o2 <- clone(o1) print(equals(o1, o2)) } \details{ Please note that no constructors are called during the creation of the clone and neither is any static class code called. } \seealso{ For more information see \code{\link{Object}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/as.character.Interface.Rd0000644000176200001440000000150013621423130016355 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.Interface} \alias{as.character.Interface} \alias{Interface.as.character} \alias{as.character,Interface-method} \title{Gets a character string representing the Interface} \description{ Gets a character string representing the Interface. } \usage{ \method{as.character}{Interface}(x, ...) } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Interface}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/RccViolationException.Rd0000644000176200001440000000664413621423131016412 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RccViolationException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{RccViolationException} \docType{class} \alias{RccViolationException} \title{An RccViolationException indicates a violation of the R Coding Conventions (RCC)} \description{ Package: R.oo \cr \bold{Class RccViolationException}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{try-error}\cr \code{~~~~~~~|}\cr \code{~~~~~~~+--}\code{condition}\cr \code{~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~+--}\code{error}\cr \code{~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~+--}\code{simpleError}\cr \code{~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~+--}\code{\link[R.oo]{Exception}}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~+--}\code{RccViolationException}\cr \bold{Directly known subclasses:}\cr \cr public static class \bold{RccViolationException}\cr extends \link[R.oo]{Exception}\cr An RccViolationException indicates a violation of the R Coding Conventions (RCC). It is generated by \code{setConstructorS3()} and \code{setMethodS3()}. It is \emph{not} meant to be caught, but instead the source code that violates the RCC should be fixed. For more information about RCC, see references below. } \usage{ RccViolationException(...) } \arguments{ \item{...}{Any arguments accepted by the constructor of Exception, i.e. one or several \code{\link[base]{character}} strings, which will be concatenated and contain informative message about why the RCC was violated.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:as.character.RccViolationException]{as.character}} \tab Gets a string representing of the RCC violation.\cr \tab \code{\link[R.oo:getRccUrl.RccViolationException]{getRccUrl}} \tab Static method to get a URL where the RCC can be found.\cr } \bold{Methods inherited from Exception}:\cr as.character, getCall, getCalls, getLastException, getMessage, getStackTrace, getWhen, print, printStackTrace, throw \bold{Methods inherited from error}:\cr as.character, throw \bold{Methods inherited from condition}:\cr abort, as.character, conditionCall, conditionMessage, print \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \details{ Since it is not possible to assert that the RCC is followed during the parsing of the source code, but first only when the source code is actually executed. } \examples{ \dontrun{ setConstructorS3("myClass", function() { extends(Object(), .value=0) }) setMethodS3("MyMethod", "myClass", function(this) { "Hullo!" }) } } \author{Henrik Bengtsson} \seealso{ See also \code{\link[base]{try}}() and \code{\link[base:conditions]{tryCatch}()}. For detailed information about exceptions see \code{\link{Exception}}. The R Coding Conventions (RCC) can be found at \url{https://aroma-project.org/developers/RCC/}. } \keyword{classes} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} R.oo/man/InternalErrorException.Rd0000644000176200001440000000563513621423130016602 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % InternalErrorException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{InternalErrorException} \docType{class} \alias{InternalErrorException} \title{InternalErrorException represents internal errors} \description{ Package: R.oo \cr \bold{Class InternalErrorException}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{try-error}\cr \code{~~~~~~~|}\cr \code{~~~~~~~+--}\code{condition}\cr \code{~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~+--}\code{error}\cr \code{~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~+--}\code{simpleError}\cr \code{~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~+--}\code{\link[R.oo]{Exception}}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~+--}\code{InternalErrorException}\cr \bold{Directly known subclasses:}\cr \cr public static class \bold{InternalErrorException}\cr extends \link[R.oo]{Exception}\cr InternalErrorException represents internal errors that are likely to be due to implementation errors done by the author of a specific package and not because the user made an error. Errors that are due to unexpected input to functions etc falls under this error type. } \usage{ InternalErrorException(..., package=NULL) } \arguments{ \item{...}{Any arguments accepted by \code{\link{Exception}}}. \item{package}{The name (\code{\link[base]{character}} string) of the package where the error exists. Can also be a \code{\link{Package}} object. If \code{\link[base]{NULL}}, the source of the error is assumed to be unknown.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:getMessage.InternalErrorException]{getMessage}} \tab Gets the message of the exception.\cr \tab \code{\link[R.oo:getPackage.InternalErrorException]{getPackage}} \tab Gets the suspicious package likely to contain an error.\cr } \bold{Methods inherited from Exception}:\cr as.character, getCall, getCalls, getLastException, getMessage, getStackTrace, getWhen, print, printStackTrace, throw \bold{Methods inherited from error}:\cr as.character, throw \bold{Methods inherited from condition}:\cr abort, as.character, conditionCall, conditionMessage, print \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \author{Henrik Bengtsson} \seealso{ For detailed information about exceptions see \code{\link{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{classes} R.oo/man/getPosition.Package.Rd0000644000176200001440000000166513621423131015773 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getPosition.Package} \alias{getPosition.Package} \alias{Package.getPosition} \alias{getPosition,Package-method} \title{Gets the search path position of the package} \description{ Gets the search path position of the package. } \usage{ \method{getPosition}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ An \code{\link[base]{integer}}. } \examples{ pkg <- Package("base") print(getPosition(pkg)) } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getEnvironment.Package]{*getEnvironment}()}. \code{\link[base]{search}}(). For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/equals.BasicObject.Rd0000644000176200001440000000365013621423130015571 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{equals.BasicObject} \alias{equals.BasicObject} \alias{BasicObject.equals} \alias{equals,BasicObject-method} \title{Compares an object with another} \description{ Compares an object with another and returns \code{\link[base:logical]{TRUE}} if they are equal. The equal property must be 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be \code{\link[base:logical]{TRUE}}. 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} if and only if \code{equals(o2,o1)} is \code{\link[base:logical]{TRUE}}. 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} and \code{equals(o2,o3)} is \code{\link[base:logical]{TRUE}}, then \code{equals(o1,o3)} should be \code{\link[base:logical]{TRUE}}. 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same result on multiple invocations as long as noting has changed. 6) \code{equals(o1,NULL)} should return \code{\link[base:logical]{FALSE}}. By default, the method returns \code{\link[base:logical]{TRUE}} if and only if the two references compared refer to the same \code{\link{BasicObject}}, i.e. \code{( !is.null(obj) && (hashCode(this) == hashCode(obj)) )}. } \usage{ \method{equals}{BasicObject}(this, other, ...) } \arguments{ \item{other}{The other object this object should be compared to.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the objects are equal, otherwise \code{\link[base:logical]{FALSE}}. } \seealso{ For more information see \code{\link{BasicObject}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/000.makeObjectFinalizer.Rd0000644000176200001440000000307513621423126016344 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 020.makeObjectFinalizer,private.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{.makeObjectFinalizer} \alias{.makeObjectFinalizer} \title{Creates a standalone finalizer function for Object} \description{ Creates a standalone finalizer function for Object, which assumes only that the \pkg{base} package is available. } \usage{ .makeObjectFinalizer(this, reloadRoo=TRUE) } \arguments{ \item{this}{The \code{\link[R.oo]{Object}} to be finalized.} \item{reloadRoo}{If \code{\link[base:logical]{TRUE}}, the finalizer will try to temporary reload the \pkg{R.oo} package if not loaded.} } \value{ Returns a \code{\link[base]{function}} that can be passed to \code{\link[base]{reg.finalizer}}(). } \details{ The created finalizer is reentrant. This is always the case when the \pkg{R.oo} package is already loaded when the finalizer is called. It is also always the case on R v2.15.2 Patched r61487 and beyond. In other cases, the finalizer inspects the call stack (via \code{\link{sys.calls}}()) to check whether \code{\link[base]{parse}}() has been called or not. If it is on the call stack, it indicates that \code{\link[base]{parse}}() triggered the garbage collection, and the \pkg{R.oo} package will \emph{not} be reloaded in order to avoid risking \code{\link[base]{parse}}() being called again. } \keyword{internal} R.oo/man/getBundlePackages.Package.Rd0000644000176200001440000000243313621423131017031 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getBundlePackages.Package} \alias{getBundlePackages.Package} \alias{Package.getBundlePackages} \alias{getBundlePackages,Package-method} \title{Gets the names of the other packages that is in the same bundle as this package} \description{ Gets the names of the other packages that is in the same bundle as this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getBundlePackages}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of package names or \code{\link[base]{NULL}}. } \details{ The first call to this method is normally slow because all installed packages are scanned. The result of this first call is cached and used as the return value for all subsequent calls, which are then much faster. } \examples{ pkg <- Package("R.oo") print(getBundle(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getContribUrl.Package.Rd0000644000176200001440000000212513621423131016242 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getContribUrl.Package} \alias{getContribUrl.Package} \alias{Package.getContribUrl} \alias{getContribUrl,Package-method} \title{Gets the URL(s) from where this package can be installed} \description{ Gets the URL(s) from where this package can be installed by first looking for comma or semicolon separated URLs at the optional \code{ContribURL} line in the \code{DESCRIPTION} file of the package. If no such line exists, \code{getUrl()} is used. } \usage{ \method{getContribUrl}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a vector of \code{\link[base]{character}} strings. } \examples{ pkg <- Package("R.oo") print(getContribUrl(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getInstantiationTime.BasicObject.Rd0000644000176200001440000000230213621423130020433 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getInstantiationTime.BasicObject} \alias{getInstantiationTime.BasicObject} \alias{BasicObject.getInstantiationTime} \alias{getInstantiationTime,BasicObject-method} \title{Gets the time when the object was instantiated} \description{ Gets the time when the object was instantiated (created) as a POSIXt object. } \usage{ \method{getInstantiationTime}{BasicObject}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a POSIXt object, which extends class POSIXct. } \details{ The instantiation timestamp is set when the object is created, and only of option \code{"R.oo::BasicObject/instantiationTime"} is \code{\link[base:logical]{TRUE}}. } \seealso{ For more about time formats and POSIX see \code{\link[base]{DateTimeClasses}}. For more information see \code{\link{BasicObject}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/Rdoc.Rd0000644000176200001440000000764313621423131013026 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc} \docType{class} \alias{Rdoc} \title{Class for converting Rdoc comments to Rd files} \description{ Package: R.oo \cr \bold{Class Rdoc}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{Rdoc}\cr \bold{Directly known subclasses:}\cr \cr public static class \bold{Rdoc}\cr extends \link[R.oo]{Object}\cr Class for converting Rdoc comments to Rd files. } \usage{ Rdoc() } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:argsToString.Rdoc]{argsToString}} \tab Gets the arguments signature of a function.\cr \tab \code{\link[R.oo:check.Rdoc]{check}} \tab Checks the compiled Rd files.\cr \tab \code{\link[R.oo:compile.Rdoc]{compile}} \tab Compile source code files containing Rdoc comments into Rd files.\cr \tab \code{\link[R.oo:createManPath.Rdoc]{createManPath}} \tab Creates the directory where the Rd files should be saved.\cr \tab \code{\link[R.oo:createName.Rdoc]{createName}} \tab Creates a class-method name.\cr \tab \code{\link[R.oo:declaration.Rdoc]{declaration}} \tab Gets the class declaration.\cr \tab \code{\link[R.oo:escapeRdFilename.Rdoc]{escapeRdFilename}} \tab Escape non-valid characters in a filename.\cr \tab \code{\link[R.oo:getClassS4Usage.Rdoc]{getClassS4Usage}} \tab Gets the usage of a S4 class.\cr \tab \code{\link[R.oo:getKeywords.Rdoc]{getKeywords}} \tab Gets the keywords defined in R with descriptions.\cr \tab \code{\link[R.oo:getManPath.Rdoc]{getManPath}} \tab Gets the path to the directory where the Rd files will be saved.\cr \tab \code{\link[R.oo:getNameFormat.Rdoc]{getNameFormat}} \tab Gets the current name format.\cr \tab \code{getObject} \tab -\cr \tab \code{\link[R.oo:getPackageNameOf.Rdoc]{getPackageNameOf}} \tab Gets the package of a method or an object.\cr \tab \code{\link[R.oo:getRdTitle.Rdoc]{getRdTitle}} \tab Extracts the title string of a Rd file.\cr \tab \code{\link[R.oo:getUsage.Rdoc]{getUsage}} \tab Gets the usage of a method.\cr \tab \code{\link[R.oo:hierarchy.Rdoc]{hierarchy}} \tab Gets the class hierarchy.\cr \tab \code{\link[R.oo:isKeyword.Rdoc]{isKeyword}} \tab Checks if a word is a Rd keyword.\cr \tab \code{\link[R.oo:isVisible.Rdoc]{isVisible}} \tab Checks if a member is visible given its modifiers.\cr \tab \code{\link[R.oo:methodsInheritedFrom.Rdoc]{methodsInheritedFrom}} \tab Gets all methods inherited from a class in Rd format.\cr \tab \code{\link[R.oo:setManPath.Rdoc]{setManPath}} \tab Sets the path to the directory where the Rd files should be saved.\cr \tab \code{\link[R.oo:setNameFormat.Rdoc]{setNameFormat}} \tab Sets the current name format.\cr } \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \author{Henrik Bengtsson} \examples{\dontrun{# Set default author author <- "Henrik Bengtsson, \\url{https://github.com/HenrikBengtsson/R.oo}" # Show the file containing the Rdoc comments rdocFile <- system.file("misc", "ASCII.R", package="R.oo") file.show(rdocFile) # Compile the Rdoc:s into Rd files (saved in the destPath directory) destPath <- tempdir() Rdoc$compile(rdocFile, destPath=destPath) # List the generated Rd files rdFiles <- list.files(destPath, full.names=TRUE) print(rdFiles) # Show one of the files file.show(rdFiles[1]) # Clean up file.remove(rdFiles) }} \references{ R developers, \emph{Guidelines for Rd files}, \url{https://developer.r-project.org/Rds.html}, 2003 } \keyword{classes} \keyword{documentation} R.oo/man/getName.Class.Rd0000644000176200001440000000152313621423127014557 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getName.Class} \alias{getName.Class} \alias{Class.getName} \alias{getName,Class-method} \title{Gets the name of the class} \description{ Gets the name of the class. } \usage{ \method{getName}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ print(getName(Object)) # "Object" print(getName(Class)) # "Class" } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/Class.Rd0000644000176200001440000001066713621423127013211 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Class} \docType{class} \alias{Class} \title{The Class class describes an Object class} \description{ Package: R.oo \cr \bold{Class Class}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{Class}\cr \bold{Directly known subclasses:}\cr \cr public static class \bold{Class}\cr extends \link[R.oo]{Object}\cr The Class class describes an Object class. First of all, this class is most commonly used \emph{internally} and neither the end user nor the programmer need to no about the class Class. } \usage{ Class(name=NULL, constructor=NULL) } \arguments{ \item{name}{Name of the class.} \item{constructor}{Constructor (\code{\link[base]{function}}) of any Object class.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{$} \tab -\cr \tab \code{$<-} \tab -\cr \tab \code{.DollarNames} \tab -\cr \tab \code{.subset2Internal} \tab -\cr \tab \code{[[} \tab -\cr \tab \code{[[<-} \tab -\cr \tab \code{\link[R.oo:argsToString.Class]{argsToString}} \tab Gets the arguments of a function as a character string.\cr \tab \code{\link[R.oo:as.character.Class]{as.character}} \tab Returns a short string describing the class.\cr \tab \code{\link[R.oo:forName.Class]{forName}} \tab Gets a Class object by a name of a class.\cr \tab \code{\link[R.oo:getDetails.Class]{getDetails}} \tab Lists the fields and methods of a class.\cr \tab \code{\link[R.oo:getFields.Class]{getFields}} \tab Returns the field names of a class.\cr \tab \code{\link[R.oo:getKnownSubclasses.Class]{getKnownSubclasses}} \tab Gets all subclasses that are currently loaded.\cr \tab \code{\link[R.oo:getMethods.Class]{getMethods}} \tab Returns the method names of class and its super classes.\cr \tab \code{\link[R.oo:getName.Class]{getName}} \tab Gets the name of the class.\cr \tab \code{\link[R.oo:getPackage.Class]{getPackage}} \tab Gets the package to which the class belongs.\cr \tab \code{\link[R.oo:getRdDeclaration.Class]{getRdDeclaration}} \tab Gets the class declaration in Rd format.\cr \tab \code{\link[R.oo:getRdHierarchy.Class]{getRdHierarchy}} \tab Gets the class hierarchy in Rd format.\cr \tab \code{\link[R.oo:getRdMethods.Class]{getRdMethods}} \tab Gets the methods of a class in Rd format.\cr \tab \code{\link[R.oo:getStaticInstance.Class]{getStaticInstance}} \tab Gets the static instance of this class.\cr \tab \code{\link[R.oo:getSuperclasses.Class]{getSuperclasses}} \tab Gets the super classes of this class.\cr \tab \code{\link[R.oo:isAbstract.Class]{isAbstract}} \tab Checks if a class is abstract or not.\cr \tab \code{\link[R.oo:isBeingCreated.Class]{isBeingCreated}} \tab Checks if a class is currently being initiated initiated.\cr \tab \code{\link[R.oo:isDeprecated.Class]{isDeprecated}} \tab Checks if a class is deprecated or not.\cr \tab \code{\link[R.oo:isPrivate.Class]{isPrivate}} \tab Checks if a class is defined private or not.\cr \tab \code{\link[R.oo:isProtected.Class]{isProtected}} \tab Checks if a class is defined protected or not.\cr \tab \code{\link[R.oo:isPublic.Class]{isPublic}} \tab Checks if a class is defined public or not.\cr \tab \code{\link[R.oo:isStatic.Class]{isStatic}} \tab Checks if a class is static or not.\cr \tab \code{\link[R.oo:newInstance.Class]{newInstance}} \tab Creates a new instance of this class.\cr \tab \code{\link[R.oo:print.Class]{print}} \tab Prints detailed information about the class and its fields and methods.\cr } \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \details{ The class Class describes the Object class or one of its subclasses. All classes and constructors created by \code{setConstructorS3()} will be of class Class. Its methods provide ways of accessing static fields and static methods. Its \emph{print()} method will print detailed information about the class and its fields and methods. } \author{Henrik Bengtsson} \keyword{classes} \keyword{programming} \keyword{methods} R.oo/man/showHowToCite.Package.Rd0000644000176200001440000000161713621423131016232 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{showHowToCite.Package} \alias{showHowToCite.Package} \alias{Package.showHowToCite} \alias{showHowToCite,Package-method} \title{Show the HOWTOCITE file of this package} \description{ Show the HOWTOCITE file of this package. See also \code{\link[R.oo:getHowToCite.Package]{*getHowToCite}()}. If the \code{HOWTOCITE} file does not exist, an exception is thrown. } \usage{ \method{showHowToCite}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getAuthor.Package.Rd0000644000176200001440000000241013621423131015416 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getAuthor.Package} \alias{getAuthor.Package} \alias{Package.getAuthor} \alias{getAuthor,Package-method} \title{Gets the Author of this package} \description{ Gets the Author of this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getAuthor}{Package}(this, as=c("character", "person"), include=c("given", "family"), ...) } \arguments{ \item{as}{A \code{\link[base]{character}} string specifying the return format.} \item{include}{A \code{\link[base]{character}} \code{\link[base]{vector}} specifying which person fields to include if returning a \code{\link[base]{character}} string.} \item{...}{Optional arguments passed to \code{\link[utils]{format.person}}.} } \value{ Returns a \code{\link[base]{character}} string or a \code{\link[utils]{person}} object. } \examples{ pkg <- Package("R.oo") print(getAuthor(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/novirtual.Object.Rd0000644000176200001440000000155013621423127015363 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{novirtual.Object} \alias{novirtual.Object} \alias{Object.novirtual} \alias{novirtual,Object-method} \title{Returns a reference to the same Object with virtual fields turned off} \description{ Returns a reference to the same Object with virtual fields turned off. } \usage{ \method{novirtual}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link[R.oo]{Object}}. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/load.Object.Rd0000644000176200001440000000424013621423127014256 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Object$load} \alias{Object$load} \alias{load.Object} \alias{Object.load} \alias{load,Object-method} \title{Static method to load an Object from a file or a connection} \description{ Static method to load an Object from a file or a connection, which previously have been saved using \code{save()} of class Object. } \usage{ ## Static method (use this): ## Object$load(file, path=NULL, ...) ## Don't use the below: \method{load}{Object}(static, file, path=NULL, ...) } \arguments{ \item{file}{Filename or \code{\link[base:connections]{connection}} from where to read the Object.} \item{path}{The path where the file exists.} \item{...}{Not used.} } \value{ Returns a reference to the loaded Object. } \details{ Please note that no constructors are called when an Object is loaded and neither is any static class code called. } \section{Type control}{ Typically this static method is called as \code{$load(...)} where \code{} is any Object class. When an Object has been loaded, it is verified that it inherits from \code{}. If it does not, an exception is thrown. Thus, \code{Object$load(...)} will load any Object, but \code{MyClass$load(...)} will only load an Object that inherits from MyClass. If loaded object is not of correct class, an exception is thrown. } \section{Troubleshooting}{ Due to a bug, likely in \R itself, one can not specify the \code{file} argument by its name, i.e. \code{Object$load(file="foo.RData")} will not work, but \code{Object$load("foo.RData")} work just fine. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:save.Object]{*save}()} and \code{\link[base]{save}}(), \code{\link[base]{load}}(). For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{IO} \keyword{internal} \keyword{methods} R.oo/man/as.character.RdocException.Rd0000644000176200001440000000155013621423131017231 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RdocException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.RdocException} \alias{as.character.RdocException} \alias{RdocException.as.character} \alias{as.character,RdocException-method} \title{Gets a character string representing of the RdocException} \description{ . } \usage{ \method{as.character}{RdocException}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{RdocException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/getChangeLog.Package.Rd0000644000176200001440000000304713621423131016012 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getChangeLog.Package} \alias{getChangeLog.Package} \alias{Package.getChangeLog} \alias{getChangeLog,Package-method} \alias{Package.getNews} \alias{getNews.Package} \alias{getNews,Package-method} \alias{Package.getHistory} \alias{getHistory.Package} \alias{getHistory,Package-method} \title{Gets the change log of this package} \description{ Gets the change log of this package, that is, (by default) the \code{NEWS} (then the \code{HISTORY} and \code{ChangeLog}) file, which should is expected to be located in the root directory of the package, i.e. \code{\link[R.oo:getPath.Package]{*getPath}()}. } \usage{ \method{getChangeLog}{Package}(this, filenames=c("NEWS", "HISTORY", "ChangeLog"), newline="\n", ...) } \arguments{ \item{filenames}{A \code{\link[base]{character}} \code{\link[base]{vector}} of (non-case sensitive) filenames to be searched for.} \item{newline}{The \code{\link[base]{character}} string to collapse lines in the file.} \item{...}{Not used.} } \value{ Returns the complete contents of the change log file as a \code{\link[base]{character}} string. If not found, \code{\link[base]{NULL}} is returned. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/throw.Rd0000644000176200001440000000305713621423132013276 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % throw.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{throw} \alias{throw.default} \alias{throw} \title{Throws an Exception} \description{ Throws an exception similar to \code{stop()}, but with support for \code{\link{Exception}} classes. The first argument (\code{object}) is by default pasted together with other arguments (\code{...}) and with separator \code{sep=""}. For instance, to throw an exception, write \code{throw("Value out of range: ", value, ".")}. which is short for \code{throw(Exception("Value out of range: ", value, "."))}. Note that \code{throw()} can be defined for classes inheriting \code{\link{Exception}}, which can then be caught (or not) using \code{\link[base:conditions]{tryCatch}()}. } \usage{ \method{throw}{default}(...) } \arguments{ \item{...}{One or several strings that are concatenated and collapsed into on message string.} } \value{ Returns nothing. } \examples{ rbern <- function(n=1, prob=1/2) { if (prob < 0 || prob > 1) throw("Argument 'prob' is out of range: ", prob) rbinom(n=n, size=1, prob=prob) } rbern(10, 0.4) # [1] 0 1 0 0 0 1 0 0 1 0 tryCatch(rbern(10, 10*0.4), error=function(ex) {} ) } \author{Henrik Bengtsson} \seealso{ See the \code{\link{Exception}} class for more detailed information. } \keyword{error} R.oo/man/Object.Rd0000644000176200001440000002610713621423127013346 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Object} \docType{class} \alias{Object} \title{The root class that every class must inherit from} \description{ R.oo\cr \bold{Class Object}\cr public class \bold{Object}\cr \code{Object} is the root class of all other classes. All classes \emph{must} extends this class, directly or indirectly, which means that they all will inherit the methods in this class. } \usage{ Object(core=NA, finalize=TRUE) } \arguments{ \item{core}{The core value of each \emph{reference} referring to the Object. By default, this is just the smallest possible \R object, but there are situations where it is useful to have another kind of core, which is the case with the Class class. \emph{Note that this value belongs to the reference variable and not to the Object, which means it can not be referenced.}} \item{finalize}{If \code{\link[base:logical]{TRUE}}, method \code{\link[R.oo:finalize.Object]{*finalize}()} will be called on this Object when it is garbage collected.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{$} \tab -\cr \tab \code{$<-} \tab -\cr \tab \code{.DollarNames} \tab -\cr \tab \code{.subset2Internal} \tab -\cr \tab \code{[[} \tab -\cr \tab \code{[[<-} \tab -\cr \tab \code{\link[R.oo:as.character.Object]{as.character}} \tab Gets a character string representing the object.\cr \tab \code{\link[R.oo:attach.Object]{attach}} \tab Attaches an Object to the R search path.\cr \tab \code{\link[R.oo:attachLocally.Object]{attachLocally}} \tab Attaches an Object locally to an environment.\cr \tab \code{\link[R.oo:clearCache.Object]{clearCache}} \tab Clear fields that are defined to have cached values.\cr \tab \code{\link[R.oo:clearLookupCache.Object]{clearLookupCache}} \tab Clear internal fields used for faster lookup.\cr \tab \code{\link[R.oo:clone.Object]{clone}} \tab Clones an Object.\cr \tab \code{\link[R.oo:detach.Object]{detach}} \tab Detach an Object from the R search path.\cr \tab \code{\link[R.oo:equals.Object]{equals}} \tab Compares an object with another.\cr \tab \code{\link[R.oo:extend.Object]{extend}} \tab Extends another class.\cr \tab \code{\link[R.oo:finalize.Object]{finalize}} \tab Finalizer methods called when object is clean out.\cr \tab \code{\link[R.oo:getEnvironment.Object]{getEnvironment}} \tab Gets the environment of this object.\cr \tab \code{getFieldModifier} \tab -\cr \tab \code{\link[R.oo:getFieldModifiers.Object]{getFieldModifiers}} \tab Gets all types of field modifiers.\cr \tab \code{\link[R.oo:getFields.Object]{getFields}} \tab Returns the field names of an Object.\cr \tab \code{\link[R.oo:getInstantiationTime.Object]{getInstantiationTime}} \tab Gets the time when the object was instantiated.\cr \tab \code{\link[R.oo:getInternalAddress.Object]{getInternalAddress}} \tab Gets the memory location where the Object resides.\cr \tab \code{\link[R.oo:getStaticInstance.Object]{getStaticInstance}} \tab Gets the static instance of this objects class.\cr \tab \code{\link[R.oo:hasField.Object]{hasField}} \tab Checks if a field exists or not.\cr \tab \code{\link[R.oo:hashCode.Object]{hashCode}} \tab Gets a hash code for the Object.\cr \tab \code{\link[R.oo:isReferable.Object]{isReferable}} \tab Checks if the object is referable or not.\cr \tab \code{\link[R.oo:ll.Object]{ll}} \tab Generates a list of informative properties of all members of an Object.\cr \tab \code{\link[R.oo:load.Object]{load}} \tab Static method to load an Object from a file or a connection.\cr \tab \code{names} \tab -\cr \tab \code{\link[R.oo:newInstance.Object]{newInstance}} \tab Creates a new instance of the same class as this object.\cr \tab \code{\link[R.oo:novirtual.Object]{novirtual}} \tab Returns a reference to the same Object with virtual fields turned off.\cr \tab \code{\link[R.oo:objectSize.Object]{objectSize}} \tab Gets the size of the Object in bytes.\cr \tab \code{\link[R.oo:print.Object]{print}} \tab Prints an Object.\cr \tab \code{\link[R.oo:save.Object]{save}} \tab Saves an Object to a file or a connection.\cr \tab \code{\link[R.oo:staticCode.Object]{staticCode}} \tab Method that will be call each time a new instance of a class is created.\cr } } \section{Defining static fields}{ To define a static field of an Object class, use a private field \code{<.field>} and then create a virtual field \code{} by defining methods \code{get()} and \code{set()}. These methods should retrieve and assign the value of the field \code{<.field>} of the \emph{static} instance of the class. The second example below shows how to do this. The example modifies also the static field already in the constructor, which is something that otherwise may be tricky. } \examples{ ######################################################################### # Defines the class Person with private fields .name and .age, and # with methods print(), getName(), setName(), getAge() and setAge(). ######################################################################### setConstructorS3("Person", function(name, age) { if (missing(name)) name <- NA if (missing(age)) age <- NA extend(Object(), "Person", .name=name, .age=age ) }) setMethodS3("as.character", "Person", function(this, ...) { paste(this$.name, "is", as.integer(this$.age), "years old.") }) setMethodS3("equals", "Person", function(this, obj, ...) { ( identical(data.class(this), data.class(obj)) && identical(this$getName(), obj$getName()) && identical(this$getAge() , obj$getAge() ) ) }) setMethodS3("hashCode", "Person", function(this, ...) { # Get the hashCode() of the '.name' and the '.age' fields # using hashCode.default(). hashCode(this$.name) * hashCode(this$.age) }) setMethodS3("getName", "Person", function(this, ...) { this$.name }) setMethodS3("setName", "Person", function(this, newName, ...) { throw("It is not possible to change the name of a Person.") }) setMethodS3("getAge", "Person", function(this, ...) { this$.age }) setMethodS3("setAge", "Person", function(this, newAge, ...) { if (!is.numeric(newAge)) throw("Age must be numeric: ", newAge) if (newAge < 0) throw("Trying to set a negative age: ", newAge) this$.age <- newAge }) ######################################################################### # Code demonstrating different properties of the Object class using # the example class Person. ######################################################################### # Create an object (instance of) the class Person. p1 <- Person("Dalai Lama", 67) # 'p1' is an Object of class Person. print(data.class(p1)) # "Person" # Prints information about the Person object. print(p1) # "Dalai Lama is 67 years old." # or equivalent (except that no generic method has to exist): p1$print() # "Dalai Lama is 67 years old." # Shows that no generic method is required if the \$ operator is used: print(p1$getName()) # "Dalai Lama" # The following will call p1$getName() since there exists a get-() # method for the 'name' property. print(p1$name) # "Dalai Lama" # and equivalent when using the [[ operator. print(p1[["name"]]) # "Dalai Lama" # The following shows that p1$setName(68) is called, simply because # there exists a set-() method for the 'name' property. p1$age <- 68 # Will call p1$setAge(68) # Shows that the age of the Person has been updated: print(p1) # "Dalai Lama is 68 years old." # If there would not exists such a set-() method or field a new # field would be created: p1$country <- "Tibet" # Lists all (non-private) members of the Person object: print(ll(p1)) # which gives # member class mode typeof length dim bytes # 1 country NULL character character 1 NULL 44 # The following will call p1$setName("Lalai Dama") which will # throw an exception saying one can not change the name of # a Person. tryCatch(p1$name <- "Lalai Dama", error=print) # The following will call p1$setAge(-4) which will throw an # exception saying that the age must be a non-negative number. tryCatch(p1$age <- -100, error=print) # Attaches Object 'p1' to the search path. attach(p1) # Accesses the newly created field 'country'. print(country) # "Tibet" # Detaches Object 'p1' from the search path. Note that all # modifications to 'country' are lost. country <- "Sweden" detach(p1) print(p1$country) # "Tibet" # Saves the Person object to a tempory file. filename <- tempfile("R.methodsS3.example") save(p1, filename) # Deletes the object rm(p1) # Loads an Object (of "unknown" class) from file using the # static method load() of class Object. obj <- Object$load(filename) # Prints information about the new Object. print(obj) # Lists all (non-private) members of the new Object. print(ll(obj)) ###################################################################### # Example illustrating how to "emulate" static fields using virtual # fields, i.e. get- and set-methods. Here we use a private static # field '.count' of the static class instance 'MyClass', i.e. # MyClass$.count. Then we define a virtual field 'count' via method # getCount() to access this static field. This will make all queries # for 'count' of any object to use the static field instead. In the # same way is assignment controlled via the setCount() method. A # side effect of this way of coding is that all MyClass instances will # also have the private field '.count' (set to zero except for the # static field that is). ###################################################################### setConstructorS3("MyClass", function(...) { # Create an instance (the static class instance included) this <- extend(Object(), "MyClass", .count = 0 ) # In order for a static field to be updated in the # constructor it has to be done after extend(). this$count <- this$count + 1 # Return the object this }) setMethodS3("as.character", "MyClass", function(this, ...) { paste(class(this)[1], ": Number of instances: ", this$count, sep="") }) # Get virtual field 'count', e.g. obj$count. setMethodS3("getCount", "MyClass", function(this, ...) { MyClass$.count }) # Set virtual field 'count', e.g. obj$count <- value. setMethodS3("setCount", "MyClass", function(this, value, ...) { MyClass$.count <- value }) # Create four instances of class 'MyClass' obj <- lapply(1:4, MyClass) print(obj) print(MyClass$count) print(obj[[1]]$count) stopifnot(obj[[1]]$count == length(obj)) stopifnot(MyClass$count == length(obj)) } \author{Henrik Bengtsson} \references{ [1] H. Bengtsson, \emph{The R.oo package - Object-Oriented Programming with References Using Standard R Code}, In Kurt Hornik, Friedrich Leisch and Achim Zeileis, editors, Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), March 20-22, Vienna, Austria. \url{https://www.r-project.org/conferences/DSC-2003/Proceedings/} \cr } \keyword{programming} \keyword{methods} \keyword{classes} R.oo/man/getRccUrl.RccViolationException.Rd0000644000176200001440000000240313621423131020270 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RccViolationException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{RccViolationException$getRccUrl} \alias{RccViolationException$getRccUrl} \alias{getRccUrl.RccViolationException} \alias{RccViolationException.getRccUrl} \alias{getRccUrl,RccViolationException-method} \title{Static method to get a URL where the RCC can be found} \description{ Static method to get a URL where one can find details about the R Code Convention (RCC). Currently the URL is \url{https://aroma-project.org/developers/RCC/}. } \usage{ ## Static method (use this): ## RccViolationException$getRccUrl(...) ## Don't use the below: \method{getRccUrl}{RccViolationException}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{\dontrun{For a complete example see help(RccViolationException).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{RccViolationException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/ASCII.Rd0000644000176200001440000000144213621423127012763 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % ASCII.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{ASCII} \alias{ASCII} \alias{ASCII.BEL} \alias{ASCII.BS} \alias{ASCII.HT} \alias{ASCII.LF} \alias{ASCII.FF} \alias{ASCII.CR} \alias{ASCII.SO} \alias{ASCII.SI} \alias{ASCII.DC1} \alias{ASCII.DC3} \alias{ASCII.ESC} \title{8-bit ASCII table} \description{ ASCII is the 8-bit ASCII table with ASCII characters from 0-255. } \examples{ ch <- ASCII[65+1]; # ch == "A" } \author{Henrik Bengtsson} \seealso{ \code{\link{charToInt}}() \code{\link{intToChar}}() } \keyword{character} \keyword{internal} R.oo/man/getMessage.Exception.Rd0000644000176200001440000000162013621423130016144 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getMessage.Exception} \alias{getMessage.Exception} \alias{Exception.getMessage} \alias{getMessage,Exception-method} \title{Gets the message of the Exception} \description{ Gets the message of the Exception. } \usage{ \method{getMessage}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/getPath.Package.Rd0000644000176200001440000000142413621423131015054 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getPath.Package} \alias{getPath.Package} \alias{Package.getPath} \alias{getPath,Package-method} \title{Gets the library (system) path to this package} \description{ Gets the library (system) path to this package. } \usage{ \method{getPath}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/attach.BasicObject.Rd0000644000176200001440000000265113621423130015543 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{attach.BasicObject} \alias{attach.BasicObject} \alias{BasicObject.attach} \alias{attach,BasicObject-method} \title{Attach an BasicObject to the R search path} \description{ Attach the members of an BasicObject to the \R search path. If trying to attach the same BasicObject twice without detaching it in between, a \code{\link[base]{warning}} will be generated and nothing will be done. } \usage{ \method{attach}{BasicObject}(this, private=FALSE, pos=2, ...) } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields will also be attached, otherwise not.} \item{pos}{The position at in search path where the BasicObject should be inserted.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the \code{\link{BasicObject}} was attached, otherwise \code{\link[base:logical]{FALSE}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:detach.BasicObject]{*detach}()} and \code{\link[base]{attach}}(), \code{\link[base]{detach}}(). For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/declaration.Rdoc.Rd0000644000176200001440000000157213621423131015305 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$declaration} \alias{Rdoc$declaration} \alias{declaration.Rdoc} \alias{Rdoc.declaration} \alias{declaration,Rdoc-method} \title{Gets the class declaration} \description{ Gets the class declaration. } \usage{ ## Static method (use this): ## Rdoc$declaration(class, ...) ## Don't use the below: \method{declaration}{Rdoc}(this, class, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getRdDeclaration.classRepresentation.Rd0000644000176200001440000000137213621423132021373 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % classRepresentation.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdDeclaration.classRepresentation} \alias{getRdDeclaration.classRepresentation} \title{Gets the class declaration in Rd format} \description{ Gets the class declaration in Rd format. } \usage{ \method{getRdDeclaration}{classRepresentation}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \keyword{methods} \keyword{internal} \keyword{documentation} R.oo/man/detach.BasicObject.Rd0000644000176200001440000000223613621423130015526 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{detach.BasicObject} \alias{detach.BasicObject} \alias{BasicObject.detach} \alias{detach,BasicObject-method} \title{Detach an BasicObject from the R search path} \description{ Detach, from the \R search path, an BasicObject that has previously been attached. If the BasicObject was not attached, a \code{\link[base]{warning}} will be generated and nothing will be done. } \usage{ \method{detach}{BasicObject}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the BasicObject was detached, otherwise \code{\link[base:logical]{FALSE}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:attach.BasicObject]{*attach}()} and \code{\link[base]{attach}}(), \code{\link[base]{detach}}(). For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/hasField.Object.Rd0000644000176200001440000000244413621423127015062 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{hasField.Object} \alias{hasField.Object} \alias{Object.hasField} \alias{hasField,Object-method} \title{Checks if a field exists or not} \description{ Checks if a field exists or not. } \usage{ \method{hasField}{Object}(this, field, ...) } \arguments{ \item{field}{\code{\link[base]{vector}} of fields to be checked if they exists or not.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{logical}} \code{\link[base]{vector}} indicating for each field if it exists or not. } \examples{ obj <- Object() obj$x <- 1:100 obj$y <- 100:1 hasField(obj, c("x", "a", "b", "y")) \dontrun{ gives: [1] TRUE FALSE FALSE TRUE } } \author{Henrik Bengtsson} \seealso{ To get the fields of an Object, see \code{\link[R.oo:getFields.Object]{*getFields}()}. For more extensive information about the fields in an Object see \code{\link[R.oo:ll.Object]{*ll}()}. For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/createName.Rdoc.Rd0000644000176200001440000000235713621423131015066 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$createName} \alias{Rdoc$createName} \alias{createName.Rdoc} \alias{Rdoc.createName} \alias{createName,Rdoc-method} \title{Creates a class-method name} \description{ Creates a class-method name. } \usage{ ## Static method (use this): ## Rdoc$createName(class, method, escape=TRUE, ...) ## Don't use the below: \method{createName}{Rdoc}(static, class, method, escape=TRUE, ...) } \arguments{ \item{class}{A class name (\code{\link[base]{character}} string).} \item{method}{A method name (\code{\link[base]{character}} string).} \item{escape}{If \code{\link[base:logical]{TRUE}}, non-valid filename characters are escaped into valid character strings.} \item{...}{Not used.} } \value{ Returns \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:escapeRdFilename.Rdoc]{*escapeRdFilename}()}. For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/isPublic.Class.Rd0000644000176200001440000000211713621423127014751 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isPublic.Class} \alias{isPublic.Class} \alias{Class.isPublic} \alias{isPublic,Class-method} \title{Checks if a class is defined public or not} \description{ Checks if a class is defined public or not. A class is public if it is neither private nor protected. } \usage{ \method{isPublic}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is public, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ if (!isPublic(RccViolationException)) throw("The class RccViolationException should be public.") } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/extend.Interface.Rd0000644000176200001440000000162613621423130015317 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{extend.Interface} \alias{extend.Interface} \alias{Interface.extend} \alias{extend,Interface-method} \title{Extends another Interface class} \description{ Extends another Interface class. } \usage{ \method{extend}{Interface}(this, ...className, ...) } \arguments{ \item{...className}{The name of new interface.} \item{...}{Named values representing the fields of the new instance.} } \value{ Returns an Interface of class \code{className}. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Interface}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getRdHierarchy.Class.Rd0000644000176200001440000000146513621423130016102 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Class.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdHierarchy.Class} \alias{getRdHierarchy.Class} \alias{Class.getRdHierarchy} \alias{getRdHierarchy,Class-method} \title{Gets the class hierarchy in Rd format} \description{ Gets the class hierarchy in Rd format. } \usage{ \method{getRdHierarchy}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getMaintainer.Package.Rd0000644000176200001440000000245013621423131016247 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getMaintainer.Package} \alias{getMaintainer.Package} \alias{Package.getMaintainer} \alias{getMaintainer,Package-method} \title{Gets the Maintainer of this package} \description{ Gets the Maintainer of this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getMaintainer}{Package}(this, as=c("character", "person"), include=c("given", "family"), ...) } \arguments{ \item{as}{A \code{\link[base]{character}} string specifying the return format.} \item{include}{A \code{\link[base]{character}} \code{\link[base]{vector}} specifying which person fields to include if returning a \code{\link[base]{character}} string.} \item{...}{Optional arguments passed to \code{\link[utils]{format.person}}.} } \value{ Returns a \code{\link[base]{character}} string or a \code{\link[utils]{person}} object. } \examples{ pkg <- Package("R.oo") print(getMaintainer(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getName.environment.Rd0000644000176200001440000000167613621423132016063 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % getName.environment.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getName.environment} \alias{getName.environment} \title{Gets the name of an environment} \description{ Gets the name of an environment, e.g. \code{"R_GlobalEnv"} or \code{"0x01ddd060"}. } \usage{ \method{getName}{environment}(env, ...) } \arguments{ \item{env}{An \code{\link[base]{environment}}.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ name <- getName(globalenv()) print(name) stopifnot(identical(name, "R_GlobalEnv")) getName(new.env()) } \author{Henrik Bengtsson} \seealso{ \code{\link[base:environment]{environmentName}()}. } \keyword{programming} \keyword{methods} R.oo/man/getPackage.Class.Rd0000644000176200001440000000164213621423127015234 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getPackage.Class} \alias{getPackage.Class} \alias{Class.getPackage} \alias{getPackage,Class-method} \title{Gets the package to which the class belongs} \description{ Gets the package to which the class belongs. } \usage{ \method{getPackage}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link{Package}}. } \examples{ print(getPackage(Object)) } \author{Henrik Bengtsson} \seealso{ \code{\link{Package}}. \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/compile.Rdoc.Rd0000644000176200001440000000461313621423131014447 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$compile} \alias{Rdoc$compile} \alias{compile.Rdoc} \alias{Rdoc.compile} \alias{compile,Rdoc-method} \title{Compile source code files containing Rdoc comments into Rd files} \description{ Compile source code files containing Rdoc comments into Rd files. \emph{Note, the class and methods to be compiled have to be loaded into \R by for instance \code{library()} or \code{source()} before calling this method.} } \usage{ ## Static method (use this): ## Rdoc$compile(filename=".*[.]R$", destPath=getManPath(this), showDeprecated=FALSE, ## addTimestamp=FALSE, locale="C", verbose=FALSE, source=FALSE, check=TRUE, ## debug=FALSE, ...) ## Don't use the below: \method{compile}{Rdoc}(this, filename=".*[.]R$", destPath=getManPath(this), showDeprecated=FALSE, addTimestamp=FALSE, locale="C", verbose=FALSE, source=FALSE, check=TRUE, debug=FALSE, ...) } \arguments{ \item{filename}{The pathname or filename pattern of the Rdoc files to be compiled.} \item{destPath}{The path where the generated Rd files should be saved.} \item{showDeprecated}{If \code{\link[base:logical]{TRUE}}, Rd files are generated for deprecated objects too, otherwise not.} \item{addTimestamp}{If \code{\link[base:logical]{TRUE}}, a date and time stamp is added to the Rd header comments. This timestamp might be confusing for version control systems, which is why it can be turned off with \code{\link[base:logical]{FALSE}}.} \item{locale}{The locale to be set/used when compiling Rdoc comments. This help assuring strings are sorted the same way across systems.} \item{source}{If \code{\link[base:logical]{TRUE}}, the Rdoc files will be \code{source()}:ed first. This work of course only for Rdoc files that are R source files.} \item{verbose}{If \code{\link[base:logical]{TRUE}}, detailed compilation information is printed.} \item{debug}{If \code{\link[base:logical]{TRUE}}, extra debug information is printed.} \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getClasses.Package.Rd0000644000176200001440000000154413621423131015560 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getClasses.Package} \alias{getClasses.Package} \alias{Package.getClasses} \alias{getClasses,Package-method} \title{Gets all classes of a package} \description{ Gets all classes of a package. } \usage{ \method{getClasses}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of class names. } \examples{ pkg <- Package("R.oo") print(getClasses(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/as.character.BasicObject.Rd0000644000176200001440000000154513621423130016636 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.BasicObject} \alias{as.character.BasicObject} \alias{BasicObject.as.character} \alias{as.character,BasicObject-method} \title{Gets a character string representing the object} \description{ Gets a character string representing the object. } \usage{ \method{as.character}{BasicObject}(x, ...) } \value{ Returns a \code{\link[base]{character}} string representation of the object. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/ll.Package.Rd0000644000176200001440000000271613621423131014074 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{ll.Package} \alias{ll.Package} \alias{Package.ll} \alias{ll,Package-method} \title{Generates a list of informative properties of all members of the package} \description{ Generates a list of informative properties of all members of the package. If the package is not loaded, it will be loaded, the members will be retrieved and then the package will be unloaded again. } \usage{ \method{ll}{Package}(this, envir=pos.to.env(getPosition(this)), ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{data.frame}}. } \details{ Note the difference from the default definition of \code{ll()} as inherited from the \code{\link[R.oo]{Object}} class. Here \code{ll()} has been redefined to list the members of the package, i.e. the members in the environment on search path that belongs to the package, whereas the original usage was to list the members of the Object. However, since the internal members of Package object is not of interest we decided on this definition instead. } \examples{ \dontrun{ll(R.oo)} } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/isProtected.Class.Rd0000644000176200001440000000206613621423127015467 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isProtected.Class} \alias{isProtected.Class} \alias{Class.isProtected} \alias{isProtected,Class-method} \title{Checks if a class is defined protected or not} \description{ Checks if a class is defined protected or not. } \usage{ \method{isProtected}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is protected, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ if (isProtected(RccViolationException)) throw("The class RccViolationException should NOT be protected.") } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getStaticInstance.Object.Rd0000644000176200001440000000167213621423127016761 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getStaticInstance.Object} \alias{getStaticInstance.Object} \alias{Object.getStaticInstance} \alias{getStaticInstance,Object-method} \title{Gets the static instance of this objects class} \description{ Gets the static instance of this objects class. } \usage{ \method{getStaticInstance}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a reference to an \code{\link[R.oo]{Object}}. } \examples{ ex <- Exception("Oops!") obj <- getStaticInstance(ex) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/RdocException.Rd0000644000176200001440000000507613621423131014703 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RdocException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{RdocException} \docType{class} \alias{RdocException} \title{RdocException are thrown by the Rdoc compiler} \description{ Package: R.oo \cr \bold{Class RdocException}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{try-error}\cr \code{~~~~~~~|}\cr \code{~~~~~~~+--}\code{condition}\cr \code{~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~+--}\code{error}\cr \code{~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~+--}\code{simpleError}\cr \code{~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~+--}\code{\link[R.oo]{Exception}}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~~~~~~+--}\code{RdocException}\cr \bold{Directly known subclasses:}\cr \cr public static class \bold{RdocException}\cr extends \link[R.oo]{Exception}\cr RdocException are thrown by the Rdoc compiler when it fails to generate a Rd file from an Rdoc comment. } \usage{ RdocException(..., source=NULL) } \arguments{ \item{...}{Any arguments accepted by \code{\link[R.oo]{Exception}}}. \item{source}{Object specifying the source where the Rdoc error occurred. This is commonly a filename \code{\link[base]{character}} string.}. } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:as.character.RdocException]{as.character}} \tab Gets a character string representing of the RdocException.\cr \tab \code{\link[R.oo:getSource.RdocException]{getSource}} \tab Gets the source of the exception.\cr } \bold{Methods inherited from Exception}:\cr as.character, getCall, getCalls, getLastException, getMessage, getStackTrace, getWhen, print, printStackTrace, throw \bold{Methods inherited from error}:\cr as.character, throw \bold{Methods inherited from condition}:\cr abort, as.character, conditionCall, conditionMessage, print \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \author{Henrik Bengtsson} \seealso{ For detailed information about exceptions see \code{\link[R.oo]{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{classes} R.oo/man/getLastException.Exception.Rd0000644000176200001440000000216713621423130017351 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Exception$getLastException} \alias{Exception$getLastException} \alias{getLastException.Exception} \alias{Exception.getLastException} \alias{getLastException,Exception-method} \title{Static method to get the last Exception thrown} \description{ Static method to get the last Exception created. } \usage{ ## Static method (use this): ## Exception$getLastException(...) ## Don't use the below: \method{getLastException}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link{Exception}} object. } \examples{\dontrun{For a complete example see help(Exception).}} \seealso{ For more information see \code{\link{Exception}}. See also \code{\link[base:conditions]{tryCatch}()}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/newInstance.Class.Rd0000644000176200001440000000217513621423127015461 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{newInstance.Class} \alias{newInstance.Class} \alias{Class.newInstance} \alias{newInstance,Class-method} \title{Creates a new instance of this class} \description{ Creates a new instance of this class. Important: It should always be possible to create a new Object by calling the constructor without arguments. This method is simply calling the constructor method of the class. } \usage{ \method{newInstance}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a reference to an \code{\link{Object}}. } \examples{ obj <- newInstance(Object, NA) # equivalent to obj <- Object(NA) } \author{Henrik Bengtsson} \seealso{ \code{\link{newInstance.Object}}(). \code{\link{newInstance.BasicObject}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getMethods.Class.Rd0000644000176200001440000000253613621423127015307 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getMethods.Class} \alias{getMethods.Class} \alias{Class.getMethods} \alias{getMethods,Class-method} \title{Returns the method names of class and its super classes} \description{ Returns the method names of class and its super classes as a list. } \usage{ \method{getMethods}{Class}(this, private=FALSE, deprecated=TRUE, unique=TRUE, ...) } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private methods are also returned, otherwise only public ones are returned.} \item{deprecated}{If \code{\link[base:logical]{TRUE}}, deprecated methods are also returned.} \item{unqiue}{If \code{\link[base:logical]{TRUE}}, only methods that are not implemented in one of the subclasses are returned for each class.} \item{...}{Not used.} } \value{ Returns a named \code{\link[base]{list}} of named \code{\link[base]{character}} strings. } \examples{ names <- getMethods(Exception) print(names) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/showChangeLog.Package.Rd0000644000176200001440000000233713621423131016214 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{showChangeLog.Package} \alias{showChangeLog.Package} \alias{Package.showChangeLog} \alias{showChangeLog,Package-method} \alias{Package.showHistory} \alias{showHistory.Package} \alias{showHistory,Package-method} \alias{Package.showNews} \alias{showNews.Package} \alias{showNews,Package-method} \title{Show the change log of this package} \description{ Show the change log of this package. If the change log file does not exist, an exception is thrown. } \usage{ \method{showChangeLog}{Package}(this, filenames=c("NEWS", "HISTORY", "ChangeLog"), ...) } \arguments{ \item{filenames}{A \code{\link[base]{character}} \code{\link[base]{vector}} of (non-case sensitive) filenames to be searched for.} \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getChangeLog.Package]{*getChangeLog}()}. For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getEnvironment.Object.Rd0000644000176200001440000000166013621423127016346 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getEnvironment.Object} \alias{getEnvironment.Object} \alias{Object.getEnvironment} \alias{getEnvironment,Object-method} \title{Gets the environment of this object} \description{ Gets the environment of this object. This is the environment where the members of the Object are stored. } \usage{ \method{getEnvironment}{Object}(fun, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link[base]{environment}}. } \examples{ ll(R.oo) ll(envir=getEnvironment(R.oo)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/as.character.RccViolationException.Rd0000644000176200001440000000216213621423131020736 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RccViolationException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.RccViolationException} \alias{as.character.RccViolationException} \alias{RccViolationException.as.character} \alias{as.character,RccViolationException-method} \title{Gets a string representing of the RCC violation} \description{ Gets a string representing of the RCC violation of format "[\{POSIX date string\}] \{class name\}: \{msg\}, cf. https://aroma-project.org/developers/RCC/". } \usage{ \method{as.character}{RccViolationException}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{RccViolationException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/DOLLAR.BasicObject.Rd0000644000176200001440000000224013621423130015246 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR.BasicObject} \alias{$.BasicObject} \alias{BasicObject.$} \alias{$,BasicObject-method} \alias{BasicObject.[[} \alias{[[.BasicObject} \alias{[[,BasicObject-method} \title{Makes the fields and methods of an BasicObject accessible via the \$ and the [[ operator} \description{ Makes the fields and methods of an BasicObject accessible via the \$ and the [[ operator. } \usage{ \method{$}{BasicObject}(this, name) \method{[[}{BasicObject}(this, name, exact=TRUE) } \arguments{ \item{name}{The name of the field or method to be accessed.} } \value{ Returns the value of a field or a method (\code{\link[base]{function}}). If no such field or method exists, \code{\link[base]{NULL}} is returned. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/DOLLAR.Object.Rd0000644000176200001440000000432713621423127014322 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR.Object} \alias{$.Object} \alias{Object.$} \alias{$,Object-method} \alias{Object.[[} \alias{[[.Object} \alias{[[,Object-method} \title{Makes the fields and methods of an Object accessible via the \$ and the [[ operator} \description{ Makes the fields and methods of an Object accessible via the \code{$} operator. This method is never called explicitly, but through an indirect usage of the \code{$} operator, e.g. \code{obj$name} or \code{obj$getValue()}. 1) This method will first search for a \code{get()} method, e.g. if name has the value \code{"age"}, a \code{getAge()} will be looked for. If such a method exists it will be called with the Object as the first and only argument, e.g. \code{getAge(this)}. A \code{get()} is only looked for if \code{} is not a private field. A private field is a name \emph{beginning} with a \code{.} (period). The rational for this naming convention is to be consistent with how \code{\link[base]{ls}}() works, which will not list such members by default. 2) If no such method exists, first then, this method will look a field in the Object can has the name \code{name}. 3) If such neither exists, a method with name \code{name} will be searched for and returned. 4) Otherwise, a static field will be looked for. 5) If no fields or methods are found at all, \code{\link[base]{NULL}} is returned. } \usage{ \method{$}{Object}(this, name) \method{[[}{Object}(this, name, exact=TRUE) } \arguments{ \item{name}{The name of the field or method to be accessed.} } \value{ Returns the value of a field or a method (\code{\link[base]{function}}). If no such field or method exists, \code{\link[base]{NULL}} is returned. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getFields.Interface.Rd0000644000176200001440000000140213621423130015726 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Interface.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getFields.Interface} \alias{getFields.Interface} \alias{Interface.getFields} \alias{getFields,Interface-method} \title{Returns NULL} \description{ Returns NULL. } \usage{ \method{getFields}{Interface}(...) } \arguments{ \item{...}{Ignored.} } \value{ Always returns \code{\link[base]{NULL}}. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Interface}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getLicense.Package.Rd0000644000176200001440000000156313621423131015546 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getLicense.Package} \alias{getLicense.Package} \alias{Package.getLicense} \alias{getLicense,Package-method} \title{Gets the License of this package} \description{ Gets the License of this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getLicense}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ pkg <- Package("R.oo") print(getLicense(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/newInstance.BasicObject.Rd0000644000176200001440000000206413621423130016553 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{newInstance.BasicObject} \alias{newInstance.BasicObject} \alias{BasicObject.newInstance} \alias{newInstance,BasicObject-method} \title{Creates a new instance of the same class as this object} \description{ Creates a new instance of the same class as this object. } \usage{ \method{newInstance}{BasicObject}(this, ...) } \arguments{ \item{...}{Arguments passed to the constructor of the corresponding \code{\link{BasicObject}} class.} } \value{ Returns a reference to an instance of \code{\link{BasicObject}} or a subclass thereof. } \author{Henrik Bengtsson} \seealso{ \code{\link{newInstance.Object}}(). \code{\link{newInstance.Class}}(). For more information see \code{\link{BasicObject}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/charToInt.Rd0000644000176200001440000000237213621423127014031 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % ASCII.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{charToInt} \alias{charToInt.default} \alias{charToInt} \title{Converts a vector of ASCII characters into a vector of integers} \description{ Converts a \code{\link[base]{vector}} of ASCII \code{\link[base]{character}}s to a equal length vector of ASCII \code{\link[base]{integer}}s. } \usage{ \method{charToInt}{default}(ch, ...) } \arguments{ \item{ch}{A \code{\link[base]{character}} \code{\link[base]{vector}}.} \item{...}{Not used.} } \value{ Returns an ASCII \code{\link[base]{integer}} \code{\link[base]{vector}}. } \author{Henrik Bengtsson} \examples{ i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" } \seealso{ \code{\link{intToChar}}() \code{\link[base]{utf8Conversion}}. \code{\link[base]{rawConversion}} } \keyword{character} \keyword{internal} R.oo/man/getNameFormat.Rdoc.Rd0000644000176200001440000000167213621423131015552 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getNameFormat} \alias{Rdoc$getNameFormat} \alias{getNameFormat.Rdoc} \alias{Rdoc.getNameFormat} \alias{getNameFormat,Rdoc-method} \title{Gets the current name format} \description{ Gets the current name format. } \usage{ ## Static method (use this): ## Rdoc$getNameFormat(...) ## Don't use the below: \method{getNameFormat}{Rdoc}(static, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:setNameFormat.Rdoc]{*setNameFormat}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getRdMethods.classRepresentation.Rd0000644000176200001440000000150113621423132020543 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % classRepresentation.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdMethods.classRepresentation} \alias{getRdMethods.classRepresentation} \title{Gets the methods in Rd format} \description{ Gets the methods in Rd format. } \usage{ \method{getRdMethods}{classRepresentation}(class, visibility=c("public", "protected", "private"), trial=FALSE, ...) } \arguments{ \item{visibility}{-} \item{trial}{-} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \keyword{methods} \keyword{internal} \keyword{documentation} R.oo/man/getFields.Object.Rd0000644000176200001440000000256213621423127015252 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getFields.Object} \alias{getFields.Object} \alias{Object.getFields} \alias{getFields,Object-method} \alias{Object.names} \alias{names.Object} \alias{names,Object-method} \title{Returns the field names of an Object} \description{ Returns the field names of an Object. } \usage{ \method{getFields}{Object}(this, private=FALSE, ...) } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields will also be returned, otherwise only public fields are returned.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of field names. } \examples{ obj <- Object() obj$x <- 1:100 obj$y <- 100:1 getFields(obj) \dontrun{ gives: [1] "x" "y" } } \author{Henrik Bengtsson} \seealso{ To check if a field exists or not, see \code{\link[R.oo:hasField.Object]{*hasField}()}. For more extensive information about the fields in an Object see \code{\link[R.oo:ll.Object]{*ll}()}. For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/equals.Rd0000644000176200001440000000333313621423132013422 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % equals.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{equals} \alias{equals.default} \alias{equals} \title{Compares an object with another} \description{ Compares an object with another and returns \code{\link[base:logical]{TRUE}} if they are equal. The equal property must be 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be \code{\link[base:logical]{TRUE}}. 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} if and only if \code{equals(o2,o1)} is \code{\link[base:logical]{TRUE}}. 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} and \code{equals(o2,o3)} is \code{\link[base:logical]{TRUE}}, then \code{equals(o1,o3)} should be \code{\link[base:logical]{TRUE}}. 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same result on multiple invocations as long as nothing has changed. 6) \code{equals(o1,}\code{\link[base]{NULL}}\code{)} should return \code{\link[base:logical]{FALSE}}, unless \code{o1} is also \code{\link[base]{NULL}}. By default \code{\link[base]{identical}}() is used. } \usage{ \method{equals}{default}(object, other, ...) } \arguments{ \item{object, other}{Objects to be compared.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the objects are equal, otherwise \code{\link[base:logical]{FALSE}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{identical}}(). } \keyword{attribute} \keyword{utilities} \keyword{internal} R.oo/man/DOLLARLT_-.BasicObject.Rd0000644000176200001440000000232513621423130015726 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR< -.BasicObject} \alias{$<-.BasicObject} \alias{BasicObject.$<-} \alias{$<-,BasicObject-method} \alias{BasicObject.[[<-} \alias{[[<-.BasicObject} \alias{[[<-,BasicObject-method} \title{Makes the fields and methods of an BasicObject assignable via the \$<- and the [[<- operator} \description{ Makes the fields and methods of an BasicObject assignable via the \$<- and the [[<- operator. } \usage{ \method{$}{BasicObject}(this, name) <- value \method{[[}{BasicObject}(this, name) <- value } \arguments{ \item{name}{The name of the \preformatted{set()} method or the name of the field to be assigned the new value.} \item{value}{The value to be assigned.} } \value{ Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/trim.Rd0000644000176200001440000000145013621423132013101 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % trim.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{trim} \alias{trim.default} \alias{trim} \title{Converts to a string and removes leading and trailing whitespace} \description{ Converts to a string and removes leading and trailing whitespace. } \usage{ \method{trim}{default}(object, ...) } \arguments{ \item{object}{A \code{\link[base]{vector}} of \R objects to be trimmed.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{vector}} of \code{\link[base]{character}} strings. } \author{Henrik Bengtsson} \keyword{character} \keyword{internal} R.oo/man/check.Rdoc.Rd0000644000176200001440000000201313621423131014064 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{check.Rdoc} \alias{check.Rdoc} \alias{Rdoc.check} \alias{check,Rdoc-method} \title{Checks the compiled Rd files} \description{ Checks the compiled Rd files. } \usage{ \method{check}{Rdoc}(this, manPath=getManPath(this), verbose=FALSE, ...) } \arguments{ \item{manPath}{The path to the Rd files (\code{\link[base]{character}} string).} \item{verbose}{If \code{\link[base:logical]{TRUE}}, extra information is outputted.} \item{...}{Not used.} } \value{ Returns a printable object, which, if non-empty will show the errors. } \details{ Internally the \code{tools} package is used. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getUrl.Package.Rd0000644000176200001440000000152313621423131014722 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getUrl.Package} \alias{getUrl.Package} \alias{Package.getUrl} \alias{getUrl,Package-method} \title{Gets the URL of this package} \description{ Gets the URL of this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getUrl}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ pkg <- Package("R.oo") print(getUrl(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/as.character.Package.Rd0000644000176200001440000000147613621423131016025 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.Package} \alias{as.character.Package} \alias{Package.as.character} \alias{as.character,Package-method} \title{Gets a string representation of this package} \description{ Gets a string representation of this package. } \usage{ \method{as.character}{Package}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{print(R.oo)} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/objectSize.BasicObject.Rd0000644000176200001440000000206413621423130016376 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{objectSize.BasicObject} \alias{objectSize.BasicObject} \alias{BasicObject.objectSize} \alias{objectSize,BasicObject-method} \title{Gets the size of the BasicObject in bytes} \description{ Gets the size of the BasicObject in bytes by summing the sizes of all its members. For this reason, the size of memory the BasicObject actually allocates might vary slightly. } \usage{ \method{objectSize}{BasicObject}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link[base]{integer}} specifying the size of the object in number of bytes. } \author{Henrik Bengtsson} \seealso{ \code{\link[utils]{object.size}}. For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/objectSize.Object.Rd0000644000176200001440000000232213621423127015437 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{objectSize.Object} \alias{objectSize.Object} \alias{Object.objectSize} \alias{objectSize,Object-method} \title{Gets the size of the Object in bytes} \description{ Gets the size of the Object in bytes by summing the sizes of all its members. For this reason, the size of memory the Object actually allocates might vary slightly. } \usage{ \method{objectSize}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link[base]{integer}} specifying the size of the object in number of bytes. } \examples{ obj <- Object() obj$x <- 1:100 obj$y <- 100:1 objectSize(obj) # 856 } \author{Henrik Bengtsson} \seealso{ To clear fields that are declared \code{cached}, see \code{\link[R.oo:clearCache.Object]{*clearCache}()}. \code{\link[utils]{object.size}}. For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getStackTraceString.Exception.Rd0000644000176200001440000000165013621423130017776 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getStackTraceString.Exception} \alias{getStackTraceString.Exception} \alias{Exception.getStackTraceString} \alias{getStackTraceString,Exception-method} \title{Gets the stack trace as a string} \description{ . } \usage{ \method{getStackTraceString}{Exception}(this, ..., details=TRUE) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \seealso{ \code{\link[R.oo:getStackTrace.Exception]{*getStackTrace}()}. For more information see \code{\link{Exception}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/throw.Exception.Rd0000644000176200001440000000204113621423130015221 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{throw.Exception} \alias{throw.Exception} \alias{Exception.throw} \alias{throw,Exception-method} \title{Throws an Exception that can be caught} \description{ Throws an Exception that can be caught by \code{tryCatch()}. } \usage{ \method{throw}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Exception}}. See also \code{\link[base:conditions]{tryCatch}()}. This method overrides (and is fully backward compatible with) the one defined in the \pkg{R.methodsS3} package. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/startupMessage.Package.Rd0000644000176200001440000000161613621423131016472 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{startupMessage.Package} \alias{startupMessage.Package} \alias{Package.startupMessage} \alias{startupMessage,Package-method} \title{Generates a 'package successfully loaded' package startup message} \description{ Generates a 'package successfully loaded' package startup message. } \usage{ \method{startupMessage}{Package}(this, ...) } \arguments{ \item{...}{Additional arguments passed to \code{\link[R.methodsS3]{pkgStartupMessage}}.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/equals.Object.Rd0000644000176200001440000000421213621423127014630 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{equals.Object} \alias{equals.Object} \alias{Object.equals} \alias{equals,Object-method} \title{Compares an object with another} \description{ Compares an object with another and returns \code{\link[base:logical]{TRUE}} if they are equal. The equal property must be 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be \code{\link[base:logical]{TRUE}}. 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} if and only if \code{equals(o2,o1)} is \code{\link[base:logical]{TRUE}}. 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}} and \code{equals(o2,o3)} is \code{\link[base:logical]{TRUE}}, then \code{equals(o1,o3)} should be \code{\link[base:logical]{TRUE}}. 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same result on multiple invocations as long as nothing has changed. 6) \code{equals(o1,}\code{\link[base]{NULL}}\code{)} should return \code{\link[base:logical]{FALSE}}, unless \code{o1} is also \code{\link[base]{NULL}}. By default, the method returns \code{\link[base:logical]{TRUE}} if and only if the two references compared refer to the same \code{\link[R.oo]{Object}}, i.e. \code{( !is.null(obj) && (hashCode(this) == hashCode(obj)) )}. } \usage{ \method{equals}{Object}(this, other, ...) } \arguments{ \item{other}{The other object this \code{\link[R.oo]{Object}} should be compared to.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the Object's are equal, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ o1 <- Object() o2 <- clone(o1) equals(o1, o1) # TRUE equals(o1, o2) # FALSE } \seealso{ \code{\link[R.oo:hashCode.Object]{*hashCode}()}. For more information see \code{\link{Object}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/objectSize.environment.Rd0000644000176200001440000000154313621423132016575 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % objectSize.environment.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{objectSize.environment} \alias{objectSize.environment} \title{Gets the size of an environment in bytes} \description{ Gets the size of an environment in bytes. } \usage{ \method{objectSize}{environment}(envir, ...) } \arguments{ \item{envir}{An \code{\link[base]{environment}}().} \item{...}{Arguments passed to \code{\link[base]{ls}}().} } \value{ Returns an \code{\link[base]{integer}}. } \author{Henrik Bengtsson} \seealso{ Internally \code{\link[utils]{object.size}} is used. } \keyword{attribute} \keyword{utilities} \keyword{methods} R.oo/man/showContents.Package.Rd0000644000176200001440000000150413621423131016155 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{showContents.Package} \alias{showContents.Package} \alias{Package.showContents} \alias{showContents,Package-method} \title{Show the CONTENTS file of this package} \description{ Show the CONTENTS file of this package. If the \code{CONTENTS} file does not exist, an exception is thrown. } \usage{ \method{showContents}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/hierarchy.Rdoc.Rd0000644000176200001440000000155013621423131014772 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$hierarchy} \alias{Rdoc$hierarchy} \alias{hierarchy.Rdoc} \alias{Rdoc.hierarchy} \alias{hierarchy,Rdoc-method} \title{Gets the class hierarchy} \description{ Gets the class hierarchy. } \usage{ ## Static method (use this): ## Rdoc$hierarchy(class, ...) ## Don't use the below: \method{hierarchy}{Rdoc}(this, class, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getManPath.Rdoc.Rd0000644000176200001440000000174313621423131015050 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getManPath} \alias{Rdoc$getManPath} \alias{getManPath.Rdoc} \alias{Rdoc.getManPath} \alias{getManPath,Rdoc-method} \title{Gets the path to the directory where the Rd files will be saved} \description{ Gets the path to the directory where the Rd files will be saved. } \usage{ ## Static method (use this): ## Rdoc$getManPath(...) ## Don't use the below: \method{getManPath}{Rdoc}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:setManPath.Rdoc]{*setManPath}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/isStatic.Class.Rd0000644000176200001440000000203513621423127014761 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isStatic.Class} \alias{isStatic.Class} \alias{Class.isStatic} \alias{isStatic,Class-method} \title{Checks if a class is static or not} \description{ Checks if a class is static or not. A class is static if it has static methods. } \usage{ \method{isStatic}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is static, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ if (!isStatic(RccViolationException)) throw("RccViolationException should be static because Exception is.") } \author{Henrik Bengtsson} \seealso{ \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getFieldModifiers.Object.Rd0000644000176200001440000000155513621423127016732 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getFieldModifiers.Object} \alias{getFieldModifiers.Object} \alias{Object.getFieldModifiers} \alias{getFieldModifiers,Object-method} \alias{Object.getFieldModifier} \alias{getFieldModifier.Object} \alias{getFieldModifier,Object-method} \title{Gets all types of field modifiers} \description{ Gets all types of field modifiers, if any. } \usage{ \method{getFieldModifiers}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a named \code{\link[base]{list}}. } \author{Henrik Bengtsson} \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/extend.Object.Rd0000644000176200001440000000546713621423127014642 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{extend.Object} \alias{extend.Object} \alias{Object.extend} \alias{extend,Object-method} \title{Extends another class} \description{ via a mechanism known as "parasitic inheritance". Simply speaking this method "extends another class". What is actually happening is that it creates an instance of class name \code{...className}, by taking another Object instance and add \code{...className} to the class list and also add all the named values in \code{...} as fields to the new instance. The method should be used by the constructor of a class and nowhere else. } \usage{ \method{extend}{Object}(this, ...className, ..., ...fields=NULL, ...envir=parent.frame(), ...finalize=NA) } \arguments{ \item{...className}{The name of new class.} \item{...}{Named values representing the fields of the new instance.} \item{...fields}{An optional named \code{\link[base]{list}} of fields. This makes it possible to specify a set of fields using a \code{\link[base]{list}} object.} \item{...envir}{An \code{\link[base]{environment}}.} \item{...finalize}{ A \code{\link[base]{logical}} controlling whether method \code{\link[R.oo:finalize.Object]{*finalize}()} should be called on the \code{\link{Object}} when it is garbage collected or not. If \code{\link[base:logical]{TRUE}}, it will be called. If \code{\link[base:logical]{FALSE}}, it will not be called. If \code{\link[base]{NA}}, it will be called according to argument \code{finalize} of the \code{\link{Object}} constructor. } } \value{ Returns an Object of class \code{className}. } \details{ The reason for the strange name of argument \code{"...className"} is that if one tries to set a field with a name that is a prefix of the name of this arguments and one at the same time does not specify the name of this argument one would run into strange errors. For instance, try \code{extend(Object(), "MyClass", ...c=0)}. } \section{Field modifiers}{ It is possible to specify modifiers to some of the fields. Currently it is only the \code{cached} modifier that is recognized. A field that is cached will be assigned \code{\link[base]{NULL}} when \code{\link[R.oo:clearCache.Object]{*clearCache}()} is called. To specify a modifier, append a comma separated list of modifiers followed by a colon, e.g. "cached:foo". } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getRdDeclaration.Class.Rd0000644000176200001440000000150513621423130016404 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Class.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdDeclaration.Class} \alias{getRdDeclaration.Class} \alias{Class.getRdDeclaration} \alias{getRdDeclaration,Class-method} \title{Gets the class declaration in Rd format} \description{ Gets the class declaration in Rd format. } \usage{ \method{getRdDeclaration}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/unload.Package.Rd0000644000176200001440000000204713621423131014744 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{unload.Package} \alias{unload.Package} \alias{Package.unload} \alias{unload,Package-method} \title{Unloads a package} \description{ Unloads a package. This is an alternative way to use \code{detach()} to unload a package. If the package is not loaded, it will quietly return. } \usage{ \method{unload}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \examples{\dontrun{ pkg <- Package("boot") load(pkg) print(isLoaded(pkg)) unload(pkg) print(isLoaded(pkg)) }} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:load.Package]{*load}()}. \code{\link[R.oo:isLoaded.Package]{*isLoaded}()}. \code{\link[base]{search}}(). For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/print.Class.Rd0000644000176200001440000000166713621423127014344 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{print.Class} \alias{print.Class} \alias{Class.print} \alias{print,Class-method} \title{Prints detailed information about the class and its fields and methods} \description{ Prints detailed information about the class and its fields and methods. } \usage{ \method{print}{Class}(x, ...) } \arguments{ \item{...}{Arguments passed to \code{\link[R.oo:getDetails.Class]{*getDetails}()}.} } \value{ Returns nothing. } \examples{ print(Object) } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getDetails.Class]{*getDetails}()} For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/printStackTrace.Exception.Rd0000644000176200001440000000176113621423130017167 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{printStackTrace.Exception} \alias{printStackTrace.Exception} \alias{Exception.printStackTrace} \alias{printStackTrace,Exception-method} \title{Prints the stack trace saved when the exception was created} \description{ . } \usage{ \method{printStackTrace}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \examples{\dontrun{For a complete example see help(Exception).}} \seealso{ \code{\link[R.oo:getStackTrace.Exception]{*getStackTrace}()}. \code{\link[base:conditions]{tryCatch}()}. For more information see \code{\link{Exception}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/R.oo-package.Rd0000644000176200001440000000726613621423127014353 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 999.package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{R.oo-package} \alias{R.oo-package} \alias{R.oo} \docType{package} \title{Package R.oo} \description{ Methods and classes for object-oriented programming in R with or without references. Large effort has been made on making definition of methods as simple as possible with a minimum of maintenance for package developers. The package has been developed since 2001 and is now considered very stable. This is a cross-platform package implemented in pure R that defines standard S3 classes without any tricks. Please note that the Rdoc syntax/grammar used to convert Rdoc comments in code into Rd files is not strictly defined and is modified by the need of the author. Ideally, there will be a well defined Rdoc language one day. } \section{Installation and updates}{ To install this package do\cr \code{install.packages("R.oo")} } \section{Dependencies and other requirements}{ This package requires a standard \R installation and the \pkg{R.methodsS3} package. } \section{To get started}{ To get started,It is very useful to understand that: \enumerate{ \item The \code{\link[R.methodsS3]{setMethodS3}}() function, which is defined in the \pkg{R.methodsS3} package (used to be part of \pkg{R.oo}), is nothing but a conveniency wrapper for setting up S3 methods, and automatically create an S3 generic function, if missing. For more information, see the help of \pkg{R.methodsS3}. \item The \code{\link{Object}} class is a top-level "root" class that provides support for \emph{reference variables}. Any class inheriting from this class supports reference variables. \item The \code{\link{Object}} class is basically a wrapper around an \code{\link[base]{environment}}, which some additional accessors etc. It is the environment data type that provides the "emulation" of reference variables - the Object class structure makes it easier to extends this class and adds some level of coding protection. The Object class features is not intended for referencing individual elements of basic \R data types, but rather for the whole variable of such. For instance, you can reassign a whole matrix \code{X} part of the object this way, but you cannot reassign \code{X[1,1]} without creating a completely new copy. } } \section{Further readings}{ For a detailed introduction to the package see [1] (part of the package distribution). } \section{How to cite this package}{ Whenever using this package, please cite [1] as\cr \preformatted{ Bengtsson, H. The R.oo package - Object-Oriented Programming with References Using Standard R Code, Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), ISSN 1609-395X, Hornik, K.; Leisch, F. & Zeileis, A. (ed.), 2003 } \emph{} } \author{Henrik Bengtsson} \section{License}{ The releases of this package is licensed under LGPL version 2.1 or newer. } \references{ [1] H. Bengtsson, \emph{The R.oo package - Object-Oriented Programming with References Using Standard R Code}, In Kurt Hornik, Friedrich Leisch and Achim Zeileis, editors, Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), March 20-22, Vienna, Austria. \url{https://www.r-project.org/conferences/DSC-2003/Proceedings/} \cr } \seealso{ People interested in \pkg{R.oo} may also be interested in packages \pkg{proto} and \pkg{mutatr}. } \keyword{package} R.oo/man/getSuperclasses.classRepresentation.Rd0000644000176200001440000000132313621423132021330 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % classRepresentation.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getSuperclasses.classRepresentation} \alias{getSuperclasses.classRepresentation} \title{Gets the superclasses} \description{ Gets the superclasses. } \usage{ \method{getSuperclasses}{classRepresentation}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \keyword{methods} \keyword{internal} \keyword{documentation} R.oo/man/detach.Object.Rd0000644000176200001440000000224513621423127014572 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{detach.Object} \alias{detach.Object} \alias{Object.detach} \alias{detach,Object-method} \title{Detach an Object from the R search path} \description{ Detach, from the \R search path, an Object that has previously been attached. If the Object was not attached, a \code{\link[base]{warning}} will be generated and nothing will be done. } \usage{ \method{detach}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the Object was detached, otherwise \code{\link[base:logical]{FALSE}}. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:attach.Object]{*attach}()} and \code{\link[base]{attach}}(), \code{\link[base]{detach}}(). For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getKeywords.Rdoc.Rd0000644000176200001440000000175413621423131015331 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getKeywords} \alias{Rdoc$getKeywords} \alias{getKeywords.Rdoc} \alias{Rdoc.getKeywords} \alias{getKeywords,Rdoc-method} \title{Gets the keywords defined in R with descriptions} \description{ Gets the keywords defined in R with descriptions. } \usage{ ## Static method (use this): ## Rdoc$getKeywords(fullInfo=FALSE, ...) ## Don't use the below: \method{getKeywords}{Rdoc}(this, fullInfo=FALSE, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:setManPath.Rdoc]{*setManPath}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/print.Exception.Rd0000644000176200001440000000207413621423130015220 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{print.Exception} \alias{print.Exception} \alias{Exception.print} \alias{print,Exception-method} \title{Prints the Exception} \description{ . By default the \code{as.character()} representation plus the stack trace is printed. } \usage{ \method{print}{Exception}(x, ...) } \arguments{ \item{...}{Not used.} } \value{Returns nothing.} \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:as.character.Exception]{*as.character}()}. \code{\link[R.oo:getStackTrace.Exception]{*getStackTrace}()}. \code{\link[R.oo:printStackTrace.Exception]{*printStackTrace}()}. For more information see \code{\link{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/finalize.Object.Rd0000644000176200001440000000355713621423127015152 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{finalize.Object} \alias{finalize.Object} \alias{Object.finalize} \alias{finalize,Object-method} \title{Finalizer methods called when object is clean out} \description{ Finalizer methods are called just the moment before the object is about to be deleted by the garbage collector. \bold{If creating a custom \code{finalize()} method for a subclass in a package, then it needs to be exported in the NAMESPACE of that package. If not, it will not be found nor called and there will be no error message.} \bold{A finalizer method should never be called explicitly!} } \usage{ \method{finalize}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \examples{ setConstructorS3("MyClass", function() { extend(Object(), "MyClass") }) setMethodS3("finalize", "MyClass", function(this, ...) { cat(as.character(this), "is about to be removed from the memory!\n") }) o <- MyClass() o <- MyClass() o <- MyClass() o <- MyClass() gc() ## MyClass: 0x01BE602C is about to be removed from the memory! ## MyClass: 0x01BFF634 is about to be removed from the memory! ## MyClass: 0x01C13584 is about to be removed from the memory! ## used (Mb) gc trigger (Mb) ## Ncells 229903 6.2 467875 12.5 ## Vcells 53725 0.5 786432 6.0 rm(o) ## MyClass: 0x01C578B0 is about to be removed from the memory! ## used (Mb) gc trigger (Mb) ## Ncells 229903 6.1 467875 12.3 ## Vcells 53725 0.5 786432 6.0 } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/clearLookupCache.Object.Rd0000644000176200001440000000170513621423127016546 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{clearLookupCache.Object} \alias{clearLookupCache.Object} \alias{Object.clearLookupCache} \alias{clearLookupCache,Object-method} \title{Clear internal fields used for faster lookup} \description{ Clear internal fields used for faster lookup by removing these fields. This method is called whenever \code{\link[R.oo:clearCache.Object]{*clearCache}()} is called on the object. } \usage{ \method{clearLookupCache}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns itself (invisible). } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getDescriptionFile.Package.Rd0000644000176200001440000000211713621423131017243 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDescriptionFile.Package} \alias{getDescriptionFile.Package} \alias{Package.getDescriptionFile} \alias{getDescriptionFile,Package-method} \title{Gets the description file of this package} \description{ Gets the description file of this package, i.e. the parsed \code{DESCRIPTION} file. } \usage{ \method{getDescriptionFile}{Package}(this, fields=NULL, ...) } \arguments{ \item{fields}{A \code{\link[base]{vector}} of \code{\link[base]{character}} strings of fields to be returned. If \code{\link[base]{NULL}}, all available fields are returned.} \item{...}{Not used.} } \value{ Returns named \code{\link[base]{vector}} of \code{\link[base]{character}} strings. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/BasicObject.Rd0000644000176200001440000000477013621423130014304 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{BasicObject} \docType{class} \alias{BasicObject} \title{A root class like Object but without references} \description{ R.oo\cr \bold{Class BasicObject}\cr public class \bold{BasicObject}\cr } \usage{ BasicObject(core=NULL) } \arguments{ \item{core}{The core value of the object.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{$} \tab -\cr \tab \code{$<-} \tab -\cr \tab \code{.DollarNames} \tab -\cr \tab \code{.subset2Internal} \tab -\cr \tab \code{[[} \tab -\cr \tab \code{[[<-} \tab -\cr \tab \code{\link[R.oo:as.character.BasicObject]{as.character}} \tab Gets a character string representing the object.\cr \tab \code{\link[R.oo:attach.BasicObject]{attach}} \tab Attach an BasicObject to the R search path.\cr \tab \code{\link[R.oo:detach.BasicObject]{detach}} \tab Detach an BasicObject from the R search path.\cr \tab \code{\link[R.oo:equals.BasicObject]{equals}} \tab Compares an object with another.\cr \tab \code{\link[R.oo:extend.BasicObject]{extend}} \tab Extends another class.\cr \tab \code{\link[R.oo:getFields.BasicObject]{getFields}} \tab Returns the field names of an BasicObject.\cr \tab \code{\link[R.oo:getInstantiationTime.BasicObject]{getInstantiationTime}} \tab Gets the time when the object was instantiated.\cr \tab \code{\link[R.oo:hasField.BasicObject]{hasField}} \tab Checks if a field exists or not.\cr \tab \code{\link[R.oo:hashCode.BasicObject]{hashCode}} \tab Gets a hash code for the object.\cr \tab \code{\link[R.oo:isReferable.BasicObject]{isReferable}} \tab Checks if the object is referable or not.\cr \tab \code{\link[R.oo:newInstance.BasicObject]{newInstance}} \tab Creates a new instance of the same class as this object.\cr \tab \code{\link[R.oo:objectSize.BasicObject]{objectSize}} \tab Gets the size of the BasicObject in bytes.\cr \tab \code{\link[R.oo:print.BasicObject]{print}} \tab Prints an BasicObject.\cr } \bold{Methods inherited from logical}:\cr Ops,nonStructure,vector-method, Ops,structure,vector-method, Ops,vector,nonStructure-method, Ops,vector,structure-method, as.data.frame, as.raster, coerce,ANY,logical-method } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{classes} R.oo/man/getDescription.Package.Rd0000644000176200001440000000213613621423131016444 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDescription.Package} \alias{getDescription.Package} \alias{Package.getDescription} \alias{getDescription,Package-method} \title{Gets the description of the package} \description{ Gets the description of the package. Not to be mixed up with \code{\link[R.oo:getDescriptionFile.Package]{*getDescriptionFile}()}. } \usage{ \method{getDescription}{Package}(this, replaceNewlines=" ", ...) } \arguments{ \item{replaceNewlines}{If a \code{\link[base]{character}} string, all newline characters are replaced with this string. Otherwise not.} \item{...}{Not used.} } \value{ A \code{\link[base]{character}} string. } \examples{ pkg <- Package("base") print(getDescription(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getExamplePath.Package.Rd0000644000176200001440000000152713621423131016374 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getExamplePath.Package} \alias{getExamplePath.Package} \alias{Package.getExamplePath} \alias{getExamplePath,Package-method} \title{Gets the path to the example (R-ex/) directory of this package} \description{ Gets the path to the example (R-ex/) directory of this package. } \usage{ \method{getExamplePath}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/typeOfClass.Rd0000644000176200001440000000142313621423132014362 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % typeOfClass.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{typeOfClass} \alias{typeOfClass.default} \alias{typeOfClass} \title{Gets the type of a class (S3 or S4)} \description{ Gets the type of a class (S3 or S4). } \usage{ \method{typeOfClass}{default}(object, ...) } \arguments{ \item{object}{The object to be checks.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string \code{"S3"}, \code{"S3-Object"} or \code{"S4"}, or \code{\link[base]{NA}} if neither. } \author{Henrik Bengtsson} \keyword{character} R.oo/man/save.Object.Rd0000644000176200001440000000322213621423127014274 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{save.Object} \alias{save.Object} \alias{Object.save} \alias{save,Object-method} \title{Saves an Object to a file or a connection} \description{ Saves an Object to a file or a connection. } \usage{ \method{save}{Object}(this, file=NULL, path=NULL, compress=TRUE, ..., safe=TRUE) } \arguments{ \item{file}{Filename or \code{\link[base:connections]{connection}} to which the Object should be saved. If \code{\link[base]{NULL}}, the Object will be save to a file named "\{class name\}.\{memory location\}.RData", e.g. "Object.26979608.RData".} \item{path}{The path where the file should be saved.} \item{compress}{If \code{\link[base:logical]{TRUE}}, the file is compressed to, otherwise not.} \item{...}{Other arguments accepted by \code{save()} in the base package.} \item{safe}{If \code{\link[base:logical]{TRUE}} and \code{file} is a file, then, in order to lower the risk for incomplete files, the object is first written to a temporary file, which is then renamed to the final name.} } \value{ Returns nothing. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:load.Object]{*load}()} and \code{\link[base]{save}}(), \code{\link[base]{load}}(). For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{IO} \keyword{internal} \keyword{methods} R.oo/man/isBeingCreated.Class.Rd0000644000176200001440000000342113621423127016046 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isBeingCreated.Class} \alias{isBeingCreated.Class} \alias{Class.isBeingCreated} \alias{isBeingCreated,Class-method} \title{Checks if a class is currently being initiated initiated} \description{ Checks if a class is currently being initiated initiated. When extending a class for the first time, which is typically done in a constructor, a static instance of the class is created by calling the constructor without parameters. This method provides a way to detect that second call inside the constructor. } \usage{ \method{isBeingCreated}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if a static instance exists, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ setConstructorS3("Car", function(brand=NULL, nbrOfWheels=0) { if(!isBeingCreated(Car)) { if (is.null(brand)) throw("A car must have a brand") if (nbrOfWheels <= 0) throw("A car must have one or more wheels: ", nbrOfWheels) } extend(Object(), "Car", .brand = brand, .nbrOfWheels = nbrOfWheels ) }) setMethodS3("as.character", "Car", function(this, ...) { cat(class(this)[1], ":", this$.brand, " with ", this$.nbrOfWheels, " wheels.", sep="") }) print(Car("Volvo", 4)) print(Car("BMW", 4)) print(Car("Tyrrell P34", 6)) print(Car("T-Rex", 3)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getBundle.Package.Rd0000644000176200001440000000231413621423131015370 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getBundle.Package} \alias{getBundle.Package} \alias{Package.getBundle} \alias{getBundle,Package-method} \title{Gets the Bundle that this package might belong to} \description{ Gets the Bundle that this package might belong to as specified by the \code{DESCRIPTION} file. } \usage{ \method{getBundle}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ If the package is part of a bundle, the name of the bundle is returned. Otherwise, \code{\link[base]{NULL}} is returned. } \details{ The first call to this method is normally slow because all installed packages are scanned. The result of this first call is cached and used as the return value for all subsequent calls, which are then much faster. } \examples{\donttest{ pkg <- Package("R.oo") print(getBundle(pkg)) }} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/isAbstract.Class.Rd0000644000176200001440000000211413621423127015273 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isAbstract.Class} \alias{isAbstract.Class} \alias{Class.isAbstract} \alias{isAbstract,Class-method} \title{Checks if a class is abstract or not} \description{ Checks if a class is abstract or not. A class is abstract if it has abstract methods. } \usage{ \method{isAbstract}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is abstract, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ if (isAbstract(RccViolationException)) throw("The class RccViolationException should NOT be abstract.") } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/extend.Rd0000644000176200001440000000413513621423132013420 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % extend.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{extend} \alias{extend.default} \alias{extend} \title{Extends a object} \description{ via a mechanism known as "parasitic inheritance". Simply speaking this method "extends" the class of an object. What is actually happening is that it creates an instance of class name \code{...className}, by taking another object and add \code{...className} to the class list and also add all the named values in \code{...} as attributes. The method should be used by the constructor of a class and nowhere else. } \usage{ \method{extend}{default}(this, ...className, ...) } \arguments{ \item{this}{Object to be extended.} \item{...className}{The name of new class.} \item{...}{Attribute fields of the new class.} } \value{ Returns an object of class \code{...className}. } \author{Henrik Bengtsson} \examples{ setConstructorS3("MyDouble", function(value=0, ...) { extend(as.double(value), "MyDouble", ...) }) setMethodS3("as.character", "MyDouble", function(object, ...) { fmtstr <- attr(object, "fmtstr") if (is.null(fmtstr)) fmtstr <- "\%.6f" sprintf(fmtstr, object) }) setMethodS3("print", "MyDouble", function(object, ...) { print(as.character(object), ...) }) x <- MyDouble(3.1415926) print(x) x <- MyDouble(3.1415926, fmtstr="\%3.2f") print(x) attr(x, "fmtstr") <- "\%e" print(x) setConstructorS3("MyList", function(value=0, ...) { extend(list(value=value, ...), "MyList") }) setMethodS3("as.character", "MyList", function(object, ...) { fmtstr <- object$fmtstr if (is.null(fmtstr)) fmtstr <- "\%.6f" sprintf(fmtstr, object$value) }) setMethodS3("print", "MyList", function(object, ...) { print(as.character(object), ...) }) x <- MyList(3.1415926) print(x) x <- MyList(3.1415926, fmtstr="\%3.2f") print(x) x$fmtstr <- "\%e" print(x) } \keyword{programming} \keyword{methods} R.oo/man/getDate.Package.Rd0000644000176200001440000000164113621423131015036 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDate.Package} \alias{getDate.Package} \alias{Package.getDate} \alias{getDate,Package-method} \title{Gets the date when package was build} \description{ Checks if the package is loaded onto the search path or not. } \usage{ \method{getDate}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ \code{\link[base:logical]{TRUE}} if the packages has been loaded, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ pkg <- Package("base") print(isLoaded(pkg)) # TRUE } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getSource.RdocException.Rd0000644000176200001440000000144413621423131016635 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % RdocException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getSource.RdocException} \alias{getSource.RdocException} \alias{RdocException.getSource} \alias{getSource,RdocException-method} \title{Gets the source of the exception} \description{ . } \usage{ \method{getSource}{RdocException}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns the source. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{RdocException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/isLoaded.Package.Rd0000644000176200001440000000201313621423131015177 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isLoaded.Package} \alias{isLoaded.Package} \alias{Package.isLoaded} \alias{isLoaded,Package-method} \title{Checks if the package is installed on the search path or not} \description{ Checks if the package is installed on the search path or not. } \usage{ \method{isLoaded}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ \code{\link[base:logical]{TRUE}} if the packages has been loaded, otherwise \code{\link[base:logical]{FALSE}}. } \examples{ pkg <- Package("base") print(isLoaded(pkg)) # TRUE } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:load.Package]{*load}()}. \code{\link[base]{search}}(). For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/showDescriptionFile.Package.Rd0000644000176200001440000000156013621423131017445 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{showDescriptionFile.Package} \alias{showDescriptionFile.Package} \alias{Package.showDescriptionFile} \alias{showDescriptionFile,Package-method} \title{Show the DESCRIPTION file of this package} \description{ Show the DESCRIPTION file of this package. If the \code{DESCRIPTION} file does not exist, an exception is thrown. } \usage{ \method{showDescriptionFile}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/clearCache.Object.Rd0000644000176200001440000000503213621423127015351 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{clearCache.Object} \alias{clearCache.Object} \alias{Object.clearCache} \alias{clearCache,Object-method} \title{Clear fields that are defined to have cached values} \description{ Clear fields that are defined to have cached values by assigning \code{\link[base]{NULL}} to these fields. } \usage{ \method{clearCache}{Object}(this, recursive=TRUE, gc=FALSE, ...) } \arguments{ \item{recursive}{If \code{\link[base:logical]{TRUE}}, the same method is called also on all fields that are \code{\link{Object}}:s. Circular dependencies can exists.} \item{gc}{If \code{\link[base:logical]{TRUE}}, the garbage collector is called, otherwise not.} \item{...}{Not used.} } \value{ Returns itself (invisible). } \examples{ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Defining a class with a 'cached' fields # - - - - - - - - - - - - - - - - - - - - - - - - - - - - setConstructorS3("CachedObject", function(...) { extend(Object(), "CachedObject", ... ) }) setMethodS3("as.character", "CachedObject", function(this, ...) { s <- NextMethod("as.character", this, ...) s <- sprintf("\%s RAM: \%.2fkb.", s, objectSize(this)/1024) s }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Example of clearing a cache fields, reassigning it, # and then clearing it again # - - - - - - - - - - - - - - - - - - - - - - - - - - - - obj <- CachedObject(a=1, b=1:10^5, "cached:c"=1:10^6) print(obj) print(ll(obj)) clearCache(obj, gc=TRUE) print(obj) print(ll(obj)) obj$c <- 1:10^6 print(obj) print(ll(obj)) clearCache(obj, gc=TRUE) print(obj) print(ll(obj)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Clearing cached fields recursively and make sure it # avoids race conditions due to circular dependences # - - - - - - - - - - - - - - - - - - - - - - - - - - - - objA <- CachedObject(a=2, "cached:c"=1:10^6, prev=NULL) print(ll(objA)) objB <- CachedObject(a=2, "cached:c"=1:10^6, prev=objA) print(ll(objB)) objC <- CachedObject(a=3, "cached:c"=1:10^6, prev=objB) print(ll(objC)) objA$prev <- objC clearCache(objA, gc=TRUE) print(ll(objA)) print(ll(objB)) print(ll(objC)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getDataPath.Package.Rd0000644000176200001440000000150213621423131015643 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDataPath.Package} \alias{getDataPath.Package} \alias{Package.getDataPath} \alias{getDataPath,Package-method} \title{Gets the path to the data (data/) directory of this package} \description{ Gets the path to the data (data/) directory of this package. } \usage{ \method{getDataPath}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/isDeprecated.Class.Rd0000644000176200001440000000166013621423127015575 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isDeprecated.Class} \alias{isDeprecated.Class} \alias{Class.isDeprecated} \alias{isDeprecated,Class-method} \title{Checks if a class is deprecated or not} \description{ Checks if a class is deprecated or not. } \usage{ \method{isDeprecated}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the class is deprecated, otherwise \code{\link[base:logical]{FALSE}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getKnownSubclasses.Class.Rd0000644000176200001440000000260713621423127017027 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getKnownSubclasses.Class} \alias{getKnownSubclasses.Class} \alias{Class.getKnownSubclasses} \alias{getKnownSubclasses,Class-method} \title{Gets all subclasses that are currently loaded} \description{ Gets all subclasses that are currently loaded. } \usage{ \method{getKnownSubclasses}{Class}(this, sort=TRUE, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{vector}} of \code{\link[base]{character}} strings. } \examples{ \dontrun{ # Due to a bug in R CMD check (R v1.7.1) the MicroarrayData$read() call # below will call getKnownSubclasses(), which will generate # "Error in exists(objectName, mode = "function") : # [2003-07-07 23:32:41] Exception: F used instead of FALSE" # Note that the example still work, just not in R CMD check print(getKnownSubclasses(Exception)) } \dontrun{ returns [1] "Exception" "try-error" "Object" } } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getSuperclasses.Class]{*getSuperclasses}()}. For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/ll.Object.Rd0000644000176200001440000000226213621423127013750 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{ll.Object} \alias{ll.Object} \alias{Object.ll} \alias{ll,Object-method} \title{Generates a list of informative properties of all members of an Object} \description{ Generates a list of informative properties of all members of an Object. } \usage{ \method{ll}{Object}(this, ...) } \arguments{ \item{...}{Any arguments accepted by the underlying function \code{ll()}.} } \value{ Returns a \code{\link[base]{data.frame}} containing information about all the members. } \examples{ obj <- Object() obj$x <- 1:100 obj$y <- 100:1 ll(obj) \dontrun{ gives: member data.class dimension objectSize 1 x numeric 100 424 2 y numeric 100 424 } } \author{Henrik Bengtsson} \seealso{ \code{\link{ll.default}}(). For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getContents.Package.Rd0000644000176200001440000000152613621423131015760 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getContents.Package} \alias{getContents.Package} \alias{Package.getContents} \alias{getContents,Package-method} \title{Gets the contents of this package} \description{ Gets the contents of this package, i.e. the parsed \code{CONTENTS} file. } \usage{ \method{getContents}{Package}(this, fields=NULL, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{data.frame}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{dcf}}. For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getRdMethods.Class.Rd0000644000176200001440000000172013621423130015561 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Class.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdMethods.Class} \alias{getRdMethods.Class} \alias{Class.getRdMethods} \alias{getRdMethods,Class-method} \title{Gets the methods of a class in Rd format} \description{ Gets the methods of a class in Rd format. } \usage{ \method{getRdMethods}{Class}(class, visibilities=c("private", "protected", "public"), ...) } \arguments{ \item{visibilities}{A \code{\link[base]{character}} string specifying what types of methods to return.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/hashCode.BasicObject.Rd0000644000176200001440000000155213621423130016014 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{hashCode.BasicObject} \alias{hashCode.BasicObject} \alias{BasicObject.hashCode} \alias{hashCode,BasicObject-method} \title{Gets a hash code for the object} \description{ Gets a hash code for the object. } \usage{ \method{hashCode}{BasicObject}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an \code{\link[base]{integer}}. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:equals.BasicObject]{*equals}()} For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getDocPath.Package.Rd0000644000176200001440000000175613621423131015512 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDocPath.Package} \alias{getDocPath.Package} \alias{Package.getDocPath} \alias{getDocPath,Package-method} \title{Gets the path to the accompanying documentation (doc/) directory of this package} \description{ Gets the path to the accompanying documentation (doc/) directory of this package. } \usage{ \method{getDocPath}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ print(list.files(getDocPath(R.oo))) # explicit call, or print(list.files(R.oo$docPath)) # as a virtual field } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/DOLLARLT_-.Object.Rd0000644000176200001440000000476713621423127015006 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR< -.Object} \alias{$<-.Object} \alias{Object.$<-} \alias{$<-,Object-method} \alias{Object.[[<-} \alias{[[<-.Object} \alias{[[<-,Object-method} \title{Makes the fields and methods of an Object assignable via the \$<- and the [[<- operator} \description{ Makes the fields and methods of an Object assignable via the \code{$<-} operator. This method is never called explicitly, but through an indirect usage of the \code{$<-} operator, e.g. \code{obj$name <- "foo"}. 1) This method will first search for a \code{set()} method, e.g. if name has the value \code{"age"}, a \code{setAge()} will be looked for. If such a method exists it will be called with the Object as the first argument and \code{value} as the second, e.g. \code{setAge(this, value)}. A \code{set()} is only looked for if \code{} is a non-private field. A private field is a name \emph{beginning} with a \code{.} (period). The rational for this naming convention is to be consistent with how \code{\link[base]{ls}}() works, which will not list such members by default. Moreover, excluding private fields for the search of a \code{set()} will decrease the overhead for such field. 2) If no such method exists the \code{value} will be assigned to an existing field named \code{name}, if such exists. 3) Otherwise, the value will be assigned to a static field, if such exists. 4) In all other case, the value is assigned to a new field. Because any \code{set()} is called first, it is possible to \emph{encapsulate} (hide away) fields with certain names or to put restrictions to what values can be assigned to them. } \usage{ \method{$}{Object}(this, name) <- value \method{[[}{Object}(this, name) <- value } \arguments{ \item{name}{The name of the \code{set()} method or the name of the field to be assigned the new value.} \item{value}{The value to be assigned.} } \value{ Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getInternalAddress.Object.Rd0000644000176200001440000000250713621423127017125 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getInternalAddress.Object} \alias{getInternalAddress.Object} \alias{Object.getInternalAddress} \alias{getInternalAddress,Object-method} \title{Gets the memory location where the Object resides} \description{ Gets the memory location where the Object resides. } \usage{ \method{getInternalAddress}{Object}(this, format=c("numeric", "hexstring"), ...) } \arguments{ \item{format}{A \code{\link[base]{character}} string specifying what format to return.} \item{...}{Not used.} } \value{ The address is returned as a \code{\link[base]{numeric}} integer if \code{format == "numeric"}, and as a \code{\link[base]{character}} string if \code{format == "hexstring"}. } \examples{ obj <- Object() getInternalAddress(obj, format="numeric") # 179742632 getInternalAddress(obj, format="hexstring") # "0x000000000ab6a7a8" } \author{Henrik Bengtsson} \seealso{ \code{\link[=getName.environment]{getName()}}. For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/objectSize.Rd0000644000176200001440000000151513621423132014231 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % objectSize.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{objectSize} \alias{objectSize.default} \alias{objectSize} \title{Gets the size of the object in bytes} \description{ Gets the size of the object in bytes. This method is just a wrapper for \code{\link[utils]{object.size}}. } \usage{ \method{objectSize}{default}(...) } \arguments{ \item{...}{Arguments passed to \code{\link[utils]{object.size}}.} } \value{ Returns an \code{\link[base]{integer}}. } \author{Henrik Bengtsson} \seealso{ Internally \code{\link[utils]{object.size}}. } \keyword{attribute} \keyword{utilities} R.oo/man/abort.Rd0000644000176200001440000000423513621423131013240 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % abort.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{abort} \alias{abort.default} \alias{abort} \alias{abort.condition} \title{Aborts the current expression call} \description{ Aborts the current expression call and returns to the top level prompt/browser \emph{without signaling a condition}. } \usage{ \method{abort}{default}(..., call.=TRUE, domain=NULL) } \arguments{ \item{...}{(optional) Objects coerced to \code{\link[base]{character}} and pasted together without a separator, or a @condition object. If no object are given, no message is printed.} \item{call.}{If \code{\link[base:logical]{TRUE}}, the call is added to the message, otherwise not.} \item{domain}{Used to translate the message (see \code{\link[base]{gettext}}()). If \code{\link[base]{NA}}, messages will not be translated.} } \value{ Returns nothing. } \details{ There are still cases where one can "catch" the abort and undo it, cf. [1]. } \examples{\dontrun{ foo <- function() { cat("foo()...\n") on.exit(cat("foo()...done\n")) tryCatch({ stop("Woops!") }, error = function(ex) { cat("An error was caught: ", ex$message, "\n", sep="") }) cat("Continuing...\n") } bar <- function() { cat("bar()...\n") on.exit(cat("bar()...done\n")) tryCatch({ abort("Woops!") }, error = function(ex) { cat("An error was caught: ", ex$message, "\n", sep="") }) cat("This message will never be displayed...\n") } # An error generated by stop() can be caught foo() # ...which is not possible when using abort() bar() # This expression is never reached cat("This line will never be outputted.\n") }} \author{Henrik Bengtsson} \seealso{ \code{\link{throw}}(). \code{\link[base]{stop}}(). Internally, \code{\link[base]{invokeRestart}}()\code{("abort")} is utilized. } \references{ [1] R-devel thread '', Sept 11, 2012, \url{https://stat.ethz.ch/pipermail/r-devel/2012-September/064838.html}.\cr } \keyword{error} \keyword{internal} R.oo/man/forName.Class.Rd0000644000176200001440000000211013621423127014557 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Class$forName} \alias{Class$forName} \alias{forName.Class} \alias{Class.forName} \alias{forName,Class-method} \title{Gets a Class object by a name of a class} \description{ Gets a Class object by a name of a class. If no such class exists and exception is thrown. } \usage{ ## Static method (use this): ## Class$forName(name, ...) ## Don't use the below: \method{forName}{Class}(static, name, ...) } \arguments{ \item{...}{Optional arguments passed to internal lookup function.} } \value{ Returns a \code{\link{Class}}. } \examples{ print(Class$forName("Exception")) } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link{setConstructorS3}}(). For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/print.Object.Rd0000644000176200001440000000170513621423127014476 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{print.Object} \alias{print.Object} \alias{Object.print} \alias{print,Object-method} \title{Prints an Object} \description{ For all objects of class \code{\link{Object}}, this method will print the value of \code{as.character()} of the object. Note that this function is not called if the argument is not an object of class \code{\link[R.oo]{Object}}. } \usage{ \method{print}{Object}(x, ...) } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ \code{\link[base]{print.default}}() For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getDevelUrl.Package.Rd0000644000176200001440000000210413621423131015676 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDevelUrl.Package} \alias{getDevelUrl.Package} \alias{Package.getDevelUrl} \alias{getDevelUrl,Package-method} \title{Gets the URL(s) from where the developers version of this package can be installed} \description{ Gets the URL(s) from where the developers version of this package can be installed by looking for comma or semicolon separated URLs at the optional \code{DevelURL} line in the \code{DESCRIPTION} file of the package. } \usage{ \method{getDevelUrl}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a vector of \code{\link[base]{character}} strings. } \examples{ pkg <- Package("R.oo") print(getDevelUrl(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getHowToCite.Package.Rd0000644000176200001440000000204713621423131016027 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getHowToCite.Package} \alias{getHowToCite.Package} \alias{Package.getHowToCite} \alias{getHowToCite,Package-method} \title{Gets the citation of this package} \description{ Gets the citation of this package. If text file \code{HOWTOCITE} exists in package root directory, then its contents is retrieved, otherwise \code{\link[utils]{citation}} for the package is retrieved. } \usage{ \method{getHowToCite}{Package}(this, newline="\n", ...) } \arguments{ \item{newline}{The \code{\link[base]{character}} string to collapse lines in the file.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/hasField.BasicObject.Rd0000644000176200001440000000207613621423130016017 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{hasField.BasicObject} \alias{hasField.BasicObject} \alias{BasicObject.hasField} \alias{hasField,BasicObject-method} \title{Checks if a field exists or not} \description{ Checks if a field exists or not. } \usage{ \method{hasField}{BasicObject}(this, field, ...) } \arguments{ \item{field}{\code{\link[base]{vector}} of fields to be checked if they exists or not.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{logical}} \code{\link[base]{vector}} indicating for each field if it exists or not. } \author{Henrik Bengtsson} \seealso{ To get the fields of an Object, see \code{\link[R.oo:getFields.BasicObject]{*getFields}()}. For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getFields.Class.Rd0000644000176200001440000000177413621423127015115 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getFields.Class} \alias{getFields.Class} \alias{Class.getFields} \alias{getFields,Class-method} \title{Returns the field names of a class} \description{ Returns the field names of a class. } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields will also be returned, otherwise only public fields are returned.} \item{...}{Not used.} } \usage{ \method{getFields}{Class}(this, private=FALSE, ...) } \value{ Returns a \code{\link[base]{character}} \code{\link[base]{vector}} of field names. } \examples{ print(getFields(Exception)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/isReferable.BasicObject.Rd0000644000176200001440000000166713621423130016530 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % BasicObject.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{isReferable.BasicObject} \alias{isReferable.BasicObject} \alias{BasicObject.isReferable} \alias{isReferable,BasicObject-method} \title{Checks if the object is referable or not} \description{ Checks if the object is referable or not. } \usage{ \method{isReferable}{BasicObject}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{logical}} value, which by default is \code{\link[base:logical]{TRUE}} for all \code{\link{BasicObject}}'s. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{BasicObject}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/ll.Rd0000644000176200001440000000753113621423132012543 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % ll.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{ll} \alias{ll.default} \alias{ll} \title{Generates a list of informative properties of all members of an environment} \description{ Generates a list of informative properties of all members of an environment. } \usage{ \method{ll}{default}(pattern=".*", ..., private=FALSE, properties=getOption("R.oo::ll/properties", c("data.class", "dimension", "objectSize")), sortBy=NULL, decreasing=FALSE, envir=parent.frame()) } \arguments{ \item{pattern}{Regular expression pattern specifying which members to return. If \code{".*"}, all names are matched.} \item{...}{A named \code{\link[base]{vector}} of format \code{functionName=value}, where \code{functionName()} will be called on each member found. If the result matches the \code{value}, the member is returned, otherwise not.} \item{private}{If \code{\link[base:logical]{TRUE}}, also private members, i.e. members with a name starting with a \code{.} (period), will be listed, otherwise not.} \item{properties}{Names of properties to be returned. There must exist a \code{\link[base]{function}} with the same name, because it will be called. This way one can extract any type of property by defining new methods.} \item{sortBy}{Name or index of column (property) to be sorted by. If \code{\link[base]{NULL}}, the objects are listed in the order they are found.} \item{decreasing}{A \code{\link[base]{logical}} indicating whether the sorting should be done in increasing or decreasing order.} \item{envir}{An \code{\link[base]{environment}}, a search path index or a name of a package to be scanned.} } \value{ Returns a \code{\link[base]{data.frame}} containing information about all the members. } \section{Default properties returned}{ It is possible to set the default value of argument \code{properties} by setting option \code{"R.oo::ll/properties"}, e.g. \code{options("R.oo::ll/properties"=c("data.class", "dimension"))}. If this option is not set when the package is loaded, it is set to \code{c("data.class", "dimension", "objectSize")}. } \examples{ \dontrun{ To list all objects in .GlobalEnv: > ll() member data.class dimension objectSize 1 *tmp* Person 1 428 2 as.character.Person function NULL 1208 3 country character 1 44 4 equals.Person function NULL 2324 5 filename character 1 84 6 getAge function NULL 372 7 getAge.Person function NULL 612 8 getName.Person function NULL 628 9 hashCode.Person function NULL 1196 10 last.warning list 1 192 11 obj Person 1 428 12 Person Class NULL 2292 13 setAge function NULL 372 14 setAge.Person function NULL 2088 15 setName function NULL 372 16 setName.Person function NULL 760 17 staticCode.Person function NULL 2372 To list all functions in the methods package: ll(mode="function", envir="methods") To list all numeric and character object in the base package: ll(mode=c("numeric", "character"), envir="base") To list all objects in the base package greater than 40kb: subset(ll(envir="base"), objectSize > 40000) } } \author{Henrik Bengtsson} \seealso{ \code{\link[utils]{ls.str}} and \code{\link{ll.Object}}(). } \keyword{utilities} R.oo/man/getEnvironment.Package.Rd0000644000176200001440000000163313621423131016466 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getEnvironment.Package} \alias{getEnvironment.Package} \alias{Package.getEnvironment} \alias{getEnvironment,Package-method} \title{Gets the environment of a loaded package} \description{ Gets the environment of a loaded package. } \usage{ \method{getEnvironment}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{environment}}, or \code{\link[base]{NULL}} if the package was not loaded. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getPosition.Package]{*getPosition}()}. For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/createManPath.Rdoc.Rd0000644000176200001440000000216013621423131015526 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$createManPath} \alias{Rdoc$createManPath} \alias{createManPath.Rdoc} \alias{Rdoc.createManPath} \alias{createManPath,Rdoc-method} \title{Creates the directory where the Rd files should be saved} \description{ Creates the directory where the Rd files should be saved. } \usage{ ## Static method (use this): ## Rdoc$createManPath(...) ## Don't use the below: \method{createManPath}{Rdoc}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the directory was creates, \code{\link[base:logical]{FALSE}} if it already exists and throws an \code{\link[R.oo]{Exception}} if failed. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getManPath.Rdoc]{*getManPath}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getInstantiationTime.Object.Rd0000644000176200001440000000246213621423127017506 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getInstantiationTime.Object} \alias{getInstantiationTime.Object} \alias{Object.getInstantiationTime} \alias{getInstantiationTime,Object-method} \title{Gets the time when the object was instantiated} \description{ Gets the time when the object was instantiated (created) as a POSIXt object. } \usage{ \method{getInstantiationTime}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a POSIXt object, which extends class POSIXct. } \details{ The instantiation time stamp is set when the object is created, and only of option \code{"R.oo::BasicObject/instantiationTime"} is \code{\link[base:logical]{TRUE}}. } \examples{ oopts <- options("R.oo::Object/instantiationTime"=TRUE) obj <- Object() print(getInstantiationTime(obj)) options(oopts) } \seealso{ For more about time formats and POSIX see \code{\link[base]{DateTimeClasses}}. For more information see \code{\link{Object}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/setNameFormat.Rdoc.Rd0000644000176200001440000000244613621423131015566 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$setNameFormat} \alias{Rdoc$setNameFormat} \alias{setNameFormat.Rdoc} \alias{Rdoc.setNameFormat} \alias{setNameFormat,Rdoc-method} \title{Sets the current name format} \description{ Sets the current name format. Throws a \code{\link{RccViolationException}} if an unknown format is requested. } \usage{ ## Static method (use this): ## Rdoc$setNameFormat(nameFormat, ...) ## Don't use the below: \method{setNameFormat}{Rdoc}(static, nameFormat, ...) } \arguments{ \item{nameFormat}{ If \code{"method.class"}, help files for methods belonging to classes are named .. If \code{"class.method"}, help files for methods belonging to classes are named .. These are currently the only name formats supported. } \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:getNameFormat.Rdoc]{*getNameFormat}()} For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getMessage.InternalErrorException.Rd0000644000176200001440000000261313621423130020656 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % InternalErrorException.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getMessage.InternalErrorException} \alias{getMessage.InternalErrorException} \alias{InternalErrorException.getMessage} \alias{getMessage,InternalErrorException-method} \title{Gets the message of the exception} \description{ Gets the message of the exception and adds a message that clarifies that the error is likely due to an internal error and not due to the user. It also gives information how to contact the maintainer or author of the suspicious package. This information is retrieved from the DESCRIPTION file of the package. To help the package developer, information about the current version of R, the current version of the package etc are also returned so the user can easily cut'n'paste that information into a bug report. } \usage{ \method{getMessage}{InternalErrorException}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{InternalErrorException}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/attach.Object.Rd0000644000176200001440000000266313621423127014612 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{attach.Object} \alias{attach.Object} \alias{Object.attach} \alias{attach,Object-method} \title{Attaches an Object to the R search path} \description{ Attach the members of an Object to the \R search path. If trying to attach the same Object twice without detaching it in between, a \code{\link[base]{warning}} will be generated and nothing will be done. } \usage{ \method{attach}{Object}(this, private=FALSE, pos=2, ...) } \arguments{ \item{private}{If \code{\link[base:logical]{TRUE}}, private fields will also be attached, otherwise not.} \item{pos}{The position at in search path where the Object should be inserted.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the \code{\link[R.oo]{Object}} was attached, otherwise \code{\link[base:logical]{FALSE}}. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:detach.Object]{*detach}()} and \code{\link[base]{attach}}(), \code{\link[base]{detach}}(). For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/setConstructorS3.Rd0000644000176200001440000001043013621423126015376 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 040.setConstructorS3.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{setConstructorS3} \alias{setConstructorS3.default} \alias{setConstructorS3} \title{Defines a class in S3/UseMethod style} \description{ Defines a class in R.oo/S3 style. What this function currently does is simply creating a constructor function for the class. } \usage{ \method{setConstructorS3}{default}(name, definition, private=FALSE, protected=FALSE, export=TRUE, static=FALSE, abstract=FALSE, trial=FALSE, deprecated=FALSE, envir=parent.frame(), enforceRCC=TRUE, ...) } \arguments{ \item{name}{The name of the class.} \item{definition}{The constructor definition. \emph{Note: The constructor must be able to be called with no arguments, i.e. use default values for all arguments or make sure you use \code{missing()} or similar!}} \item{static}{If \code{\link[base:logical]{TRUE}} this class is defined to be static, otherwise not. Currently this has no effect expect as an indicator.} \item{abstract}{If \code{\link[base:logical]{TRUE}} this class is defined to be abstract, otherwise not. Currently this has no effect expect as an indicator.} \item{private}{If \code{\link[base:logical]{TRUE}} this class is defined to be private.} \item{protected}{If \code{\link[base:logical]{TRUE}} this class is defined to be protected.} \item{export}{A \code{\link[base]{logical}} setting attribute \code{"export"}.} \item{trial}{If \code{\link[base:logical]{TRUE}} this class is defined to be a trial class, otherwise not. A trial class is a class that is introduced to be tried out and it might be modified, replaced or even removed in a future release. Some people prefer to call trial versions, beta version. Currently this has no effect expect as an indicator.} \item{deprecated}{If \code{\link[base:logical]{TRUE}} this class is defined to be deprecated, otherwise not. Currently this has no effect expect as an indicator.} \item{envir}{The environment for where the class (constructor function) should be stored.} \item{enforceRCC}{If \code{\link[base:logical]{TRUE}}, only class names following the R Coding Convention is accepted. If the RCC is violated an RccViolationException is thrown.} \item{...}{Not used.} Note: If a constructor is not declared to be private nor protected, it will be declared to be public. } \section{A constructor must be callable without arguments}{ The requirement that a constructor function should be callable without arguments (e.g. \code{MyConstructor()}) is because that call is used to create the static instance of a class. The reason for this is that a static instance of the class is created automatically when the constructor is called \emph{the first time} (only), that is, when the first of object of that class is created. All classes have to have a static instance. To make a constructor callable without arguments, one can either make sure all arguments have default values or one can test for missing arguments using \code{missing()}. For instance the following definition is \emph{not} correct: \code{setConstructorS3("Foo", function(x) extend(Object(), "Foo", x=x))} whereas this one is \code{setConstructorS3("Foo", function(x=NA) extend(Object(), "Foo", x=x))} } \section{Code validation}{ If argument \code{enforceRCC} is \code{\link[base:logical]{TRUE}}, the class name is validated so it starts with a letter and it also gives a \code{\link[base]{warning}} if its first letter is \emph{not} capital. The reason for this is to enforce a naming convention that names classes with upper-case initial letters and methods with lower-case initial letters (this is also the case in for instance Java). } \examples{\dontrun{For a complete example see help(Object).}} \seealso{ To define a method see \code{\link[R.methodsS3]{setMethodS3}}. For information about the R Coding Conventions, see \code{\link{RccViolationException}}. For a thorough example of how to use this method see \code{\link{Object}}. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} R.oo/man/hashCode.Object.Rd0000644000176200001440000000307613621423127015063 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{hashCode.Object} \alias{hashCode.Object} \alias{Object.hashCode} \alias{hashCode,Object-method} \title{Gets a hash code for the Object} \description{ Gets a hash code for the Object. This makes it possible to put any \code{\link[R.oo]{Object}} in a hash table. The hash code returned must: 1) be \emph{consistent}, i.e. \code{hashCode(obj)} should return the same value on multiple invocations as long as nothing has changed. 2) tell same same thing as \code{equals()}, if \code{equals(o1,o2)} is \code{\link[base:logical]{TRUE}}, then \code{hashCode(o1) == hashCode(o2)} should also be \code{\link[base:logical]{TRUE}}. Note that if \code{equals(o1,o2)} is \code{\link[base:logical]{FALSE}}, \code{hashCode(o1)} \code{hashCode(o2)} may be \emph{either} equal or non-equal. By default, the method returns the internal memory address where the Object is located. } \usage{ \method{hashCode}{Object}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{double}}. } \examples{ obj <- Object() hashCode(obj) # 26979608 } \author{Henrik Bengtsson} \seealso{ \code{\link[R.oo:equals.Object]{*equals}()} For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/staticCode.Object.Rd0000644000176200001440000000255213621423127015425 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{staticCode.Object} \alias{staticCode.Object} \alias{Object.staticCode} \alias{staticCode,Object-method} \title{Method that will be call each time a new instance of a class is created} \description{ Method that will be call each time a new instance of a class is created. By extending this method it is possible to have static code that is called each time a new instance of a class is created. } \usage{ \method{staticCode}{Object}(static, ...) } \arguments{ \item{static}{The static instance of this class.} \item{...}{Not used.} } \value{ Returns nothing. } \details{ The method \code{extend()} in the Object class will call this method just before returning and it will pass the static instance of the class as a reference. Note that method should never be called explicitly. Any value returned by this method will be ignored. } \examples{\dontrun{For a complete example see help(Object).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Object}}. } \keyword{programming} \keyword{methods} \keyword{internal} \keyword{methods} R.oo/man/getWhen.Exception.Rd0000644000176200001440000000163013621423130015462 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getWhen.Exception} \alias{getWhen.Exception} \alias{Exception.getWhen} \alias{getWhen,Exception-method} \title{Gets the time when the Exception was created} \description{ Gets the time, as a POSIX object, when the Exception was created. } \usage{ \method{getWhen}{Exception}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a POSIX time object. } \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/as.character.Exception.Rd0000644000176200001440000000173013621423130016420 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{as.character.Exception} \alias{as.character.Exception} \alias{Exception.as.character} \alias{as.character,Exception-method} \title{Gets a character string representing of the Exception} \description{ . By default the format is: "[\{POSIX date string\}] \{class name\}: \{msg\}". } \usage{ \method{as.character}{Exception}(x, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{\dontrun{For a complete example see help(Exception).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Exception}}. } \keyword{programming} \keyword{methods} \keyword{error} \keyword{internal} \keyword{methods} R.oo/man/hashCode.Rd0000644000176200001440000000230313621423132013642 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % hashCode.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{hashCode} \alias{hashCode.default} \alias{hashCode} \title{Gets an integer hashcoded for R objects} \description{ Gets an integer hashcoded for R objects. } \usage{ \method{hashCode}{default}(object, ...) } \arguments{ \item{object}{A \code{\link[base]{vector}} or \code{\link[base]{list}} of \R objects.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{vector}} of \code{\link[base]{integer}}'s. } \details{ A \code{\link[base]{character}} string is converted into a hashcode following Java conventions by \code{s[1]*31^(n-1) + s[2]*31^(n-2) + ... + s[n]} using integer arithmetic, where \code{s[i]} is the \code{i}:th character of the string, \code{n} is the length of the string. The hash value of the empty string is zero. For all other objects, by default \code{as.integer()} is called. } \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{internal} R.oo/man/argsToString.Rdoc.Rd0000644000176200001440000000245313621423131015445 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$argsToString} \alias{Rdoc$argsToString} \alias{argsToString.Rdoc} \alias{Rdoc.argsToString} \alias{argsToString,Rdoc-method} \title{Gets the arguments signature of a function} \description{ Gets the arguments signature of a function. } \usage{ ## Static method (use this): ## Rdoc$argsToString(fcn, escapeRd=FALSE, collapse=TRUE, ...) ## Don't use the below: \method{argsToString}{Rdoc}(static, fcn, escapeRd=FALSE, collapse=TRUE, ...) } \arguments{ \item{fcn}{A \code{\link[base]{function}}.} \item{escapeRd}{If \code{\link[base:logical]{TRUE}}, certain Rd markup symbols are escaped.} \item{collapse}{If \code{\link[base:logical]{TRUE}}, each argument is returned as a single string, otherwise split up into a vector of strings as far as possible.} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{list}} of \code{\link[base]{character}} strings. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/getDetails.Class.Rd0000644000176200001440000000151713621423127015267 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getDetails.Class} \alias{getDetails.Class} \alias{Class.getDetails} \alias{getDetails,Class-method} \title{Lists the fields and methods of a class} \description{ Lists the fields and methods of a class (or an object). } \usage{ \method{getDetails}{Class}(this, private=FALSE, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns an invisible \code{\link[base]{character}} string of the class information. } \examples{ getDetails(Exception) } \author{Henrik Bengtsson} \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getName.Package.Rd0000644000176200001440000000136213621423131015041 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getName.Package} \alias{getName.Package} \alias{Package.getName} \alias{getName,Package-method} \title{Gets the name of this package} \description{ Gets the name of this package. } \usage{ \method{getName}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/getRdHierarchy.classRepresentation.Rd0000644000176200001440000000136013621423132021061 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % classRepresentation.misc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getRdHierarchy.classRepresentation} \alias{getRdHierarchy.classRepresentation} \title{Gets the class hierarchy in Rd format} \description{ Gets the class hierarchy in Rd format. } \usage{ \method{getRdHierarchy}{classRepresentation}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \keyword{methods} \keyword{internal} \keyword{documentation} R.oo/man/dimension.Rd0000644000176200001440000000242513621423132014116 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % dimension.default.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{dimension} \alias{dimension.default} \alias{dimension} \title{Gets the dimension of the object} \description{ Gets the dimension of the object similar to what \code{dim()} does, but instead of \code{\link[base]{NULL}} it will return the length of a vector. If a function is passed, \code{\link[base]{NULL}} is returned. } \usage{ \method{dimension}{default}(object, ...) } \arguments{ \item{object}{The object for which the dimension should be obtained.} \item{...}{Not used.} } \value{ Returns an \code{\link[base]{integer}} \code{\link[base]{vector}} or \code{\link[base]{NULL}}. } \examples{ dimension(matrix(1:100, ncol=10)) # 10 10 dimension(1:14) # 14 dimension(data.frame(a=1:10, b=10:1)) # 10 2 dimension(print) # NULL } \author{Henrik Bengtsson} \seealso{ \code{\link{ll.default}}(). \code{\link[base]{dim}}() and \code{\link[base]{length}}(). } \keyword{attribute} \keyword{utilities} \keyword{internal} R.oo/man/Non-documented_objects.Rd0000644000176200001440000000714113621423127016525 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 999.NonDocumentedObjects.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Non-documented objects} \alias{Non-documented objects} \title{Non-documented objects} % The BasicObject class \alias{getInstanciationTime.default} \alias{isReferable} % The Class class \alias{forName} \alias{getDetails} \alias{getKnownSubclasses} \alias{getMethods} \alias{getMethods.default} \alias{getName} \alias{getPackage} \alias{getStaticInstance} \alias{getSuperclasses} \alias{isAbstract} \alias{isBeingCreated} \alias{isDeprecated} \alias{isPrivate} \alias{isProtected} \alias{isPublic} \alias{isStatic} \alias{newInstance} % The Exception class \alias{getCalls} \alias{getCall} \alias{getLastException} \alias{getMessage} \alias{getStackTrace} \alias{getStackTraceString} \alias{getWhen} \alias{printStackTrace} % The Object class \alias{attach} \alias{attach.default} \alias{attachLocally} \alias{clone} \alias{clearLookupCache} \alias{clearCache} \alias{detach} \alias{detach.default} \alias{finalize} \alias{getFields} \alias{getInstanciationTime} \alias{getInstanciationTime.default} \alias{getInstantiationTime} \alias{getInternalAddress} \alias{getFieldModifier} \alias{getFieldModifiers} \alias{hasField} \alias{load} \alias{load.default} \alias{novirtual} \alias{registerFinalizer} \alias{save} \alias{save.default} \alias{staticCode} % The Package class \alias{getAuthor} \alias{getBundle} \alias{getBundlePackages} \alias{getChangeLog} \alias{getClasses} \alias{getClasses.default} \alias{getContribUrl} \alias{getContents} \alias{getDataPath} \alias{getDate} \alias{getDescription} \alias{getDescriptionFile} \alias{getDevelUrl} \alias{getDocPath} \alias{getEnvironment} \alias{getExamplePath} \alias{getHistory} \alias{getHowToCite} \alias{getLicense} \alias{getMaintainer} \alias{getManPath} \alias{getNews} \alias{getPath} \alias{getPosition} \alias{getTitle} \alias{getUrl} \alias{getVersion} \alias{isLoaded} \alias{isOlderThan} \alias{showChangeLog} \alias{showContents} \alias{showDescriptionFile} \alias{showHistory} \alias{showHowToCite} \alias{showNews} \alias{startupMessage} \alias{unload} % The RccViolationException class \alias{getRccUrl} % The Rdoc class \alias{argsToString} \alias{check} \alias{compile} \alias{createManPath} \alias{createName} \alias{declaration} \alias{escapeRdFilename} \alias{getClassS4Usage} \alias{getKeywords} \alias{getNameFormat} \alias{getObject} \alias{getObject.Rdoc} \alias{getPackageNameOf} \alias{getRdDeclaration} \alias{getRdHierarchy} \alias{getRdMethods} \alias{getRdTitle} \alias{getUsage} \alias{hierarchy} \alias{isKeyword} \alias{isVisible} \alias{methodsInheritedFrom} \alias{setManPath} \alias{setNameFormat} % The RdocException class \alias{getSource} % Trial functions \alias{callSuperMethodS3} \alias{callSuperMethodS3.default} % Deprecated functions \alias{setClassS3} \alias{setClassS3.default} \alias{getClass.BasicObject} \alias{getClass.default} \description{ This page contains aliases for all "non-documented" objects that \code{R CMD check} detects in this package. Almost all of them are \emph{generic} functions that have specific document for the corresponding method coupled to a specific class. Other functions are re-defined by \code{setMethodS3()} to \emph{default} methods. Neither of these two classes are non-documented in reality. The rest are deprecated methods. } \author{Henrik Bengtsson} \keyword{documentation} \keyword{internal} R.oo/man/DOLLAR.Class.Rd0000644000176200001440000000430613621423127014156 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{DOLLAR.Class} \alias{$.Class} \alias{Class.$} \alias{$,Class-method} \alias{Class.[[} \alias{[[.Class} \alias{[[,Class-method} \title{Makes the fields and methods of an Class accessible via the \$ and the [[ operator} \usage{ \method{$}{Class}(this, name) \method{[[}{Class}(this, name, exact=TRUE) } \description{ Makes the fields and methods of an Class accessible via the \code{$} operator. This method is never called explicitly, but through an indirect usage of the \code{$} operator, e.g. \code{obj$name} or \code{obj$getValue()}. \enumerate{ \item This method will first search for a \code{get()} method, e.g. if name has the value \code{"age"}, a \code{getAge()} will be looked for. If such a method exists it will be called with the Class as the first and only argument, e.g. \code{getAge(this)}. A \code{get()} is only looked for if \code{} is not a private field. A private field is a name \emph{beginning} with a \code{.} (period). The rational for this naming convention is to be consistent with how \code{\link[base]{ls}()} works, which will not list such members by default. \item If no such method exists, first then, this method will look a field in the Class can has the name \code{name}. \item If such neither exists, a method with name \code{name} will be searched for and returned. \item If no fields or methods are found at all, \code{\link[base]{NULL}} is returned. } } \arguments{ \item{name}{The name of the field or method to be accessed.} \item{...}{Not used.} } \value{ Returns the value of a field or a method (\code{\link[base]{function}}). If no such field or method exists, \code{\link[base]{NULL}} is returned. } \examples{\dontrun{For a complete example see help(Class).}} \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/throw.error.Rd0000644000176200001440000000153613621423132014426 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % error.throw.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{throw.error} \alias{throw.error} \title{Throws (rethrows) an object of class 'error'} \description{ Rethrows an 'error' object. The 'error' class was introduced in R v1.8.1 with the new error handling mechanisms. } \usage{ \method{throw}{error}(error, ...) } \arguments{ \item{error}{An object or class 'error'.} \item{...}{Not used.} } \value{ Returns nothing. } \author{Henrik Bengtsson} \seealso{ See the \code{tryCatch()} method etc. See the \code{\link{Exception}} class for more detailed information. } \keyword{error} \keyword{methods} R.oo/man/getTitle.Package.Rd0000644000176200001440000000154313621423131015243 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getTitle.Package} \alias{getTitle.Package} \alias{Package.getTitle} \alias{getTitle,Package-method} \title{Gets the Title of this package} \description{ Gets the Title of this package as specified by the \code{DESCRIPTION} file. } \usage{ \method{getTitle}{Package}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \examples{ pkg <- Package("R.oo") print(getTitle(pkg)) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Package}}. } \keyword{internal} \keyword{methods} R.oo/man/Package.Rd0000644000176200001440000001634013621423131013464 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Package.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Package} \docType{class} \alias{Package} \title{The Package class provides methods for accessing package information} \description{ Package: R.oo \cr \bold{Class Package}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{Package}\cr \bold{Directly known subclasses:}\cr \cr public class \bold{Package}\cr extends \link[R.oo]{Object}\cr Creates a Package that can be thrown and caught. The \code{Package} class is the root class of all other \code{Package} classes. } \usage{ Package(name=NULL) } \arguments{ \item{name}{Name of the package.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:as.character.Package]{as.character}} \tab Gets a string representation of this package.\cr \tab \code{\link[R.oo:getAuthor.Package]{getAuthor}} \tab Gets the Author of this package.\cr \tab \code{\link[R.oo:getBundle.Package]{getBundle}} \tab Gets the Bundle that this package might belong to.\cr \tab \code{\link[R.oo:getBundlePackages.Package]{getBundlePackages}} \tab Gets the names of the other packages that is in the same bundle as this package.\cr \tab \code{\link[R.oo:getChangeLog.Package]{getChangeLog}} \tab Gets the change log of this package.\cr \tab \code{\link[R.oo:getClasses.Package]{getClasses}} \tab Gets all classes of a package.\cr \tab \code{\link[R.oo:getContents.Package]{getContents}} \tab Gets the contents of this package.\cr \tab \code{\link[R.oo:getContribUrl.Package]{getContribUrl}} \tab Gets the URL(s) from where this package can be installed.\cr \tab \code{\link[R.oo:getDataPath.Package]{getDataPath}} \tab Gets the path to the data (data/) directory of this package.\cr \tab \code{\link[R.oo:getDate.Package]{getDate}} \tab Gets the date when package was build.\cr \tab \code{\link[R.oo:getDescription.Package]{getDescription}} \tab Gets the description of the package.\cr \tab \code{\link[R.oo:getDescriptionFile.Package]{getDescriptionFile}} \tab Gets the description file of this package.\cr \tab \code{\link[R.oo:getDevelUrl.Package]{getDevelUrl}} \tab Gets the URL(s) from where the developers version of this package can be installed.\cr \tab \code{\link[R.oo:getDocPath.Package]{getDocPath}} \tab Gets the path to the accompanying documentation (doc/) directory of this package.\cr \tab \code{\link[R.oo:getEnvironment.Package]{getEnvironment}} \tab Gets the environment of a loaded package.\cr \tab \code{\link[R.oo:getExamplePath.Package]{getExamplePath}} \tab Gets the path to the example (R-ex/) directory of this package.\cr \tab \code{getHistory} \tab -\cr \tab \code{\link[R.oo:getHowToCite.Package]{getHowToCite}} \tab Gets the citation of this package.\cr \tab \code{\link[R.oo:getLicense.Package]{getLicense}} \tab Gets the License of this package.\cr \tab \code{\link[R.oo:getMaintainer.Package]{getMaintainer}} \tab Gets the Maintainer of this package.\cr \tab \code{\link[R.oo:getName.Package]{getName}} \tab Gets the name of this package.\cr \tab \code{getNews} \tab -\cr \tab \code{\link[R.oo:getPath.Package]{getPath}} \tab Gets the library (system) path to this package.\cr \tab \code{\link[R.oo:getPosition.Package]{getPosition}} \tab Gets the search path position of the package.\cr \tab \code{\link[R.oo:getTitle.Package]{getTitle}} \tab Gets the Title of this package.\cr \tab \code{\link[R.oo:getUrl.Package]{getUrl}} \tab Gets the URL of this package.\cr \tab \code{\link[R.oo:getVersion.Package]{getVersion}} \tab Gets the version of this package.\cr \tab \code{\link[R.oo:isLoaded.Package]{isLoaded}} \tab Checks if the package is installed on the search path or not.\cr \tab \code{\link[R.oo:isOlderThan.Package]{isOlderThan}} \tab Checks if the package is older than a given version.\cr \tab \code{\link[R.oo:ll.Package]{ll}} \tab Generates a list of informative properties of all members of the package.\cr \tab \code{\link[R.oo:load.Package]{load}} \tab Loads a package.\cr \tab \code{\link[R.oo:showChangeLog.Package]{showChangeLog}} \tab Show the change log of this package.\cr \tab \code{\link[R.oo:showContents.Package]{showContents}} \tab Show the CONTENTS file of this package.\cr \tab \code{\link[R.oo:showDescriptionFile.Package]{showDescriptionFile}} \tab Show the DESCRIPTION file of this package.\cr \tab \code{showHistory} \tab -\cr \tab \code{\link[R.oo:showHowToCite.Package]{showHowToCite}} \tab Show the HOWTOCITE file of this package.\cr \tab \code{showNews} \tab -\cr \tab \code{\link[R.oo:startupMessage.Package]{startupMessage}} \tab Generates a 'package successfully loaded' package startup message.\cr \tab \code{\link[R.oo:unload.Package]{unload}} \tab Unloads a package.\cr } \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \examples{\dontrun{# By defining .onAttach() as follows in zzz.R for a package, an # instance of class Package with the same name as the package will # be made available on the search path. More over, the code below # will also inform the user that the package has been loaded: # # > library(R.oo) # R.oo v0.52 (2003/04/13) was successfully loaded. # .onAttach <- function(libname, pkgname) { pkg <- Package(pkgname) assign(pkgname, pkg, pos=getPosition(pkg)) cat(getName(pkg), " v", getVersion(pkg), " (", getDate(pkg), ")", " was successfully loaded.\n", sep="") } # The Package class works for any packages, loaded or not. # Some information about the base package pkg <- Package("base") print(pkg) # [1] "Package: base v3.6.2 is loaded (pos=14). Title: The R Base Package. # The official webpage is NA and the maintainer is R Core Team . The package is installed in /usr/lib/R/library/base/. # License: Part of R 3.6.2. Description: Base R functions. Type # showNews(base) for package history, and ?base for help." print(list.files(Package("base")$dataPath)) # Some information about the R.oo package print(R.oo::R.oo) # [1] "Package: R.oo v1.23.0-9000 . Title: R Object-Oriented Programming # with or without References. The official webpage is https://github.com/ # HenrikBengtsson/R.oo and the maintainer is Henrik Bengtsson. The package # is installed in /home/alice/R/x86_64-pc-linux-gnu-library/3.6/R.oo/. # License: LGPL (>= 2.1). Description: Methods and classes for object- # oriented programming in R with or without references. Large effort has # been made on making definition of methods as simple as possible with a # minimum of maintenance for package developers. The package has been # developed since 2001 and is now considered very stable. This is a # cross-platform package implemented in pure R that defines standard S3 # classes without any tricks. Type showNews(R.oo) for package history, # and ?R.oo for help." }} \author{Henrik Bengtsson} \keyword{programming} \keyword{methods} \keyword{classes} R.oo/man/getStaticInstance.Class.Rd0000644000176200001440000000156613621423127016622 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getStaticInstance.Class} \alias{getStaticInstance.Class} \alias{Class.getStaticInstance} \alias{getStaticInstance,Class-method} \title{Gets the static instance of this class} \description{ Gets the static instance of this class. } \usage{ \method{getStaticInstance}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a reference to an \code{\link{Object}}. } \examples{ obj <- getStaticInstance(Object) } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getSuperclasses.Class.Rd0000644000176200001440000000207113621423127016352 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 060.Class.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{getSuperclasses.Class} \alias{getSuperclasses.Class} \alias{Class.getSuperclasses} \alias{getSuperclasses,Class-method} \title{Gets the super classes of this class} \description{ Gets the super classes of this class. } \usage{ \method{getSuperclasses}{Class}(this, ...) } \arguments{ \item{...}{Not used.} } \value{ Returns a \code{\link[base]{vector}} of \code{\link[base]{character}} strings. } \examples{ print(getSuperclasses(RccViolationException)) \dontrun{ returns [1] "Exception" "try-error" "Object" } } \author{Henrik Bengtsson} \seealso{ \code{\link[base]{class}}(). \code{\link[R.oo:getKnownSubclasses.Class]{*getKnownSubclasses}()}. For more information see \code{\link{Class}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/newInstance.Object.Rd0000644000176200001440000000202013621423127015607 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % 050.Object.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{newInstance.Object} \alias{newInstance.Object} \alias{Object.newInstance} \alias{newInstance,Object-method} \title{Creates a new instance of the same class as this object} \description{ Creates a new instance of the same class as this object. } \usage{ \method{newInstance}{Object}(this, ...) } \arguments{ \item{...}{Arguments passed to the constructor of the corresponding \code{\link{Object}} class.} } \value{ Returns a reference to an instance of \code{\link{Object}} or a subclass thereof. } \author{Henrik Bengtsson} \seealso{ \code{\link{newInstance.Class}}(). \code{\link{newInstance.BasicObject}}(). For more information see \code{\link{Object}}. } \keyword{internal} \keyword{methods} \keyword{programming} R.oo/man/getClassS4Usage.Rdoc.Rd0000644000176200001440000000174113621423131015757 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$getClassS4Usage} \alias{Rdoc$getClassS4Usage} \alias{getClassS4Usage.Rdoc} \alias{Rdoc.getClassS4Usage} \alias{getClassS4Usage,Rdoc-method} \title{Gets the usage of a S4 class} \description{ Gets the usage of a S4 class. } \usage{ ## Static method (use this): ## Rdoc$getClassS4Usage(class, ...) ## Don't use the below: \method{getClassS4Usage}{Rdoc}(static, class, ...) } \arguments{ \item{class}{A class name (\code{\link[base]{character}} string).} \item{...}{Not used.} } \value{ Returns a \code{\link[base]{character}} string. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/man/Exception.Rd0000644000176200001440000001257713621423130014076 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Exception.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Exception} \docType{class} \alias{Exception} \title{The Exception class to be thrown and caught} \description{ Package: R.oo \cr \bold{Class Exception}\cr \code{\link[R.oo]{Object}}\cr \code{~~|}\cr \code{~~+--}\code{try-error}\cr \code{~~~~~~~|}\cr \code{~~~~~~~+--}\code{condition}\cr \code{~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~+--}\code{error}\cr \code{~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~+--}\code{simpleError}\cr \code{~~~~~~~~~~~~~~~~~~~~~~|}\cr \code{~~~~~~~~~~~~~~~~~~~~~~+--}\code{Exception}\cr \bold{Directly known subclasses:}\cr \link[R.oo]{InternalErrorException}, \link[R.oo]{RccViolationException}, \link[R.oo]{RdocException}\cr public static class \bold{Exception}\cr extends simpleError\cr Creates an Exception that can be thrown and caught. The \code{Exception} class is the root class of all other \code{Exception} classes. } \usage{ Exception(..., sep="", collapse=", ") } \arguments{ \item{...}{One or several strings, which will be concatenated and contain informative message about the exception.} \item{sep}{The string to used for concatenating several strings.} \item{collapse}{The string to used collapse vectors together.} } \section{Fields and Methods}{ \bold{Methods:}\cr \tabular{rll}{ \tab \code{\link[R.oo:as.character.Exception]{as.character}} \tab Gets a character string representing of the Exception.\cr \tab \code{getCall} \tab -\cr \tab \code{\link[R.oo:getCalls.Exception]{getCalls}} \tab Gets the active calls saved when the exception was created.\cr \tab \code{\link[R.oo:getLastException.Exception]{getLastException}} \tab Static method to get the last Exception thrown.\cr \tab \code{\link[R.oo:getMessage.Exception]{getMessage}} \tab Gets the message of the Exception.\cr \tab \code{\link[R.oo:getStackTrace.Exception]{getStackTrace}} \tab Gets the stack trace saved when the exception was created.\cr \tab \code{\link[R.oo:getStackTraceString.Exception]{getStackTraceString}} \tab Gets the stack trace as a string.\cr \tab \code{\link[R.oo:getWhen.Exception]{getWhen}} \tab Gets the time when the Exception was created.\cr \tab \code{\link[R.oo:print.Exception]{print}} \tab Prints the Exception.\cr \tab \code{\link[R.oo:printStackTrace.Exception]{printStackTrace}} \tab Prints the stack trace saved when the exception was created.\cr \tab \code{\link[R.oo:throw.Exception]{throw}} \tab Throws an Exception that can be caught.\cr } \bold{Methods inherited from error}:\cr as.character, throw \bold{Methods inherited from condition}:\cr abort, as.character, conditionCall, conditionMessage, print \bold{Methods inherited from Object}:\cr $, $<-, [[, [[<-, as.character, attach, attachLocally, clearCache, clearLookupCache, clone, detach, equals, extend, finalize, getEnvironment, getFieldModifier, getFieldModifiers, getFields, getInstantiationTime, getStaticInstance, hasField, hashCode, ll, load, names, objectSize, print, save } \examples{ ###################################################################### # 1. To catch a regular "error" exception thrown by e.g. stop(). ###################################################################### x <- NA y <- NA tryCatch({ x <- log(123) y <- log("a") }, error = function(ex) { print(ex) }) print(x) print(y) ###################################################################### # 2. Always run a "final" expression regardless or error or not. ###################################################################### filename <- tempfile("R.methodsS3.example") con <- file(filename) tryCatch({ open(con, "r") }, error = function(ex) { cat("Could not open ", filename, " for reading.\n", sep="") }, finally = { close(con) cat("The id of the connection is ", ifelse(is.null(con), "NULL", con), ".\n", sep="") }) ###################################################################### # 3. Creating your own Exception class ###################################################################### setConstructorS3("NegativeLogValueException", function( msg="Trying to calculate the logarithm of a negative value", value=NULL) { extend(Exception(msg=msg), "NegativeLogValueException", .value = value ) }) setMethodS3("as.character", "NegativeLogValueException", function(this, ...) { paste(as.character.Exception(this), ": ", getValue(this), sep="") }) setMethodS3("getValue", "NegativeLogValueException", function(this, ...) { this$.value }) mylog <- function(x, base=exp(1)) { if (x < 0) throw(NegativeLogValueException(value=x)) else log(x, base=base) } # Note that the order of the catch list is important: l <- NA x <- 123 tryCatch({ l <- mylog(x) }, NegativeLogValueException = function(ex) { cat(as.character(ex), "\n") }, "try-error" = function(ex) { cat("try-error: Could not calculate the logarithm of ", x, ".\n", sep="") }, error = function(ex) { cat("error: Could not calculate the logarithm of ", x, ".\n", sep="") }) cat("The logarithm of ", x, " is ", l, ".\n\n", sep="") } \author{Henrik Bengtsson} \seealso{ See also \code{\link[base:conditions]{tryCatch}()} (and \code{\link[base]{try}}()). } \keyword{programming} \keyword{methods} \keyword{error} \keyword{classes} R.oo/man/isVisible.Rdoc.Rd0000644000176200001440000000230013621423131014737 0ustar liggesusers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do not modify this file since it was automatically generated from: % % Rdoc.R % % by the Rdoc compiler part of the R.oo package. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \name{Rdoc$isVisible} \alias{Rdoc$isVisible} \alias{isVisible.Rdoc} \alias{Rdoc.isVisible} \alias{isVisible,Rdoc-method} \title{Checks if a member is visible given its modifiers} \description{ Checks if a member is visible given its modifiers. } \usage{ ## Static method (use this): ## Rdoc$isVisible(modifiers, visibilities, ...) ## Don't use the below: \method{isVisible}{Rdoc}(static, modifiers, visibilities, ...) } \arguments{ \item{modifiers}{A \code{\link[base]{character}} string of modifiers.} \item{visibilities}{A \code{\link[base]{character}} string of visibility flags.} \item{...}{Not used.} } \value{ Returns \code{\link[base:logical]{TRUE}} if the modifiers are equal or higher than the visibility flags, otherwise \code{\link[base:logical]{FALSE}}. } \author{Henrik Bengtsson} \seealso{ For more information see \code{\link{Rdoc}}. } \keyword{internal} \keyword{methods} \keyword{documentation} R.oo/DESCRIPTION0000644000176200001440000000211013721504716012575 0ustar liggesusersPackage: R.oo Version: 1.24.0 Depends: R (>= 2.13.0), R.methodsS3 (>= 1.8.0) Imports: methods, utils Suggests: tools Title: R Object-Oriented Programming with or without References Authors@R: c(person("Henrik", "Bengtsson", role=c("aut", "cre", "cph"), email = "henrikb@braju.com")) Author: Henrik Bengtsson [aut, cre, cph] Maintainer: Henrik Bengtsson Description: Methods and classes for object-oriented programming in R with or without references. Large effort has been made on making definition of methods as simple as possible with a minimum of maintenance for package developers. The package has been developed since 2001 and is now considered very stable. This is a cross-platform package implemented in pure R that defines standard S3 classes without any tricks. License: LGPL (>= 2.1) LazyLoad: TRUE URL: https://github.com/HenrikBengtsson/R.oo BugReports: https://github.com/HenrikBengtsson/R.oo/issues NeedsCompilation: no Packaged: 2020-08-24 16:24:06 UTC; hb Repository: CRAN Date/Publication: 2020-08-26 16:11:58 UTC R.oo/tests/0000755000176200001440000000000013621423047012233 5ustar liggesusersR.oo/tests/isBeingCreated.Class.R0000644000176200001440000000130213327450457016276 0ustar liggesusersmessage("TESTING: isBeingCreated()...") library("R.oo") setConstructorS3("Car", function(brand=NULL, nbrOfWheels=0) { if(!isBeingCreated(Car)) { if (is.null(brand)) throw("A car must have a brand") if (nbrOfWheels <= 0) throw("A car must have one or more wheels: ", nbrOfWheels) } extend(Object(), "Car", .brand = brand, .nbrOfWheels = nbrOfWheels ) }) setMethodS3("as.character", "Car", function(this, ...) { cat(class(this)[1], ":", this$.brand, " with ", this$.nbrOfWheels, " wheels.", sep="") }) print(Car("Volvo", 4)) print(Car("BMW", 4)) print(Car("Tyrrell P34", 6)) print(Car("T-Rex", 3)) message("TESTING: isBeingCreated()...DONE") R.oo/tests/Package.unload.R0000644000176200001440000000030413327450457015177 0ustar liggesusersmessage("TESTING: Package unloading...") library("R.oo") pkg <- Package("datasets") load(pkg) print(isLoaded(pkg)) unload(pkg) print(isLoaded(pkg)) message("TESTING: Package unloading...DONE") R.oo/tests/ll.R0000644000176200001440000000157213327450457013002 0ustar liggesusersmessage("TESTING: ll()...") library("R.oo") ## Create some objects in the current environment a <- 1:100 env <- new.env() env$b <- letters[1:10] ## List the content of evironments x <- ll(envir=env) print(x) ## Empty environment x <- ll(envir=new.env()) print(x) ## search() path environment x <- ll(envir=1L) str(x) ## search() path environment x <- ll(envir="R.oo") str(x) ## Filter by name pattern x <- ll(envir="R.oo", pattern="^throw.*") print(x) x <- ll(envir="R.oo", pattern="^NonExistingName$") print(x) ## List all functions and sort them by size x <- ll(envir="R.oo", mode="function", sortBy="objectSize") str(x) ## List all functions of a package and sort them by size x <- ll(R.oo, mode="function", sortBy="objectSize") str(x) ## List all functions of an Object obj <- Object() obj$a <- 1:100 obj$b <- new.env() x <- ll(obj) print(x) message("TESTING: ll()...DONE") R.oo/tests/attachLocally.Object.R0000644000176200001440000000073513327450457016364 0ustar liggesusersmessage("TESTING: attachLocally()...") library("R.oo") foo <- function(object, arg1="some value", ...) { cat("Local objects in foo():\n") print(ls()) attachLocally(object) cat("\nLocal objects in foo():\n") print(ls()) for (name in ls()) { cat("\nObject '", name, "':\n", sep="") print(get(name, inherits=FALSE)) } } a <- "A string" obj <- Object() obj$a <- "Another string" obj$b <- NA foo(obj) print(a) message("TESTING: attachLocally()...DONE") R.oo/tests/Object.R0000644000176200001440000000375013327450457013601 0ustar liggesusersmessage("TESTING: Object...") library("R.oo") obj <- Object() print(obj) obj <- Object(42L) print(obj) stopifnot(obj == 42L) obj$a <- 1:99 print(obj) fields <- getFields(obj) print(fields) hasA <- hasField(obj, "a") print(hasA) stopifnot(hasA) value <- obj$a str(value) stopifnot(identical(value, 1:99)) obj$a <- 1:100 print(obj) value <- obj[["a"]] str(value) stopifnot(identical(value, 1:100)) obj[["a"]] <- 1:101 print(obj) value <- obj[["a"]] str(value) stopifnot(identical(value, 1:101)) size <- objectSize(obj) print(size) ref <- isReferable(obj) print(ref) stopifnot(isTRUE(ref)) time <- getInstantiationTime(obj) print(time) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Attach and detach # - - - - - - - - - - - - - - - - - - - - - - - - - - - - res <- attach(obj) print(res) stopifnot(exists("a", mode="integer")) str(a) ## Object already attached res <- tryCatch(attach(obj), warning=function(w) w) stopifnot(inherits(res, "warning")) res <- detach(obj) print(res) ## Object already detached res <- tryCatch(detach(obj), warning=function(w) w) stopifnot(inherits(res, "warning")) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Save and load # - - - - - - - - - - - - - - - - - - - - - - - - - - - - obj <- Object() obj$a <- 1 obj$b <- 2 pathnameT <- tempfile() save(obj, file=pathnameT) obj2 <- Object$load(pathnameT) stopifnot(all.equal(getFields(obj2), getFields(obj))) for (key in getFields(obj)) { stopifnot(identical(obj2[[key]], obj[[key]])) } file.remove(pathnameT) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Class # - - - - - - - - - - - - - - - - - - - - - - - - - - - - obj2 <- newInstance(obj, 43L) print(obj2) stopifnot(obj2 == 43L) hash <- hashCode(obj) print(hash) stopifnot(length(hash) == 1L) neq <- equals(obj, 1) print(neq) stopifnot(!neq) eq <- equals(obj, obj) print(eq) stopifnot(eq) obj3 <- clone(obj) print(obj3) stopifnot(!identical(obj3, obj)) stopifnot(all.equal(obj3, obj)) message("TESTING: Object...DONE") R.oo/tests/Object.finalize.R0000644000176200001440000000162513327450457015400 0ustar liggesuserslibrary("R.oo") oopts <- options(warn=1L) message("TESTING: finalize() on Object ...") setConstructorS3("MyClass", function() { extend(Object(), "MyClass") }) setMethodS3("finalize", "MyClass", function(this, ...) { cat(as.character(this), "is about to be removed from the memory!\n") }) o <- MyClass() o <- MyClass() o <- MyClass() o <- MyClass() gc() ## MyClass: 0x01BE602C is about to be removed from the memory! ## MyClass: 0x01BFF634 is about to be removed from the memory! ## MyClass: 0x01C13584 is about to be removed from the memory! ## used (Mb) gc trigger (Mb) ## Ncells 229903 6.2 467875 12.5 ## Vcells 53725 0.5 786432 6.0 rm(o) ## MyClass: 0x01C578B0 is about to be removed from the memory! ## used (Mb) gc trigger (Mb) ## Ncells 229903 6.1 467875 12.3 ## Vcells 53725 0.5 786432 6.0 message("TESTING: finalize() on Object ... DONE") options(oopts) R.oo/tests/Interface.R0000644000176200001440000000120013327450457014257 0ustar liggesuserslibrary("R.oo") message("TESTING: Interface...") int <- Interface() print(int) setConstructorS3("MyInterface", function(...) { extend(Interface(), "MyInterface") }) int <- MyInterface() print(int) setConstructorS3("MyClass", function(...) { extend(Object(), c("MyClass", uses(MyInterface(), Interface()))) }) obj <- MyClass() print(obj) ## For some reason uses() doesn't play well with covr if (!"covr" %in% loadedNamespaces()) { setConstructorS3("MyClass", function(...) { extend(Object(), c("MyClass", uses("MyInterface", "Interface"))) }) obj <- MyClass() print(obj) } message("TESTING: Interface...DONE") R.oo/tests/InternalErrorException.reportBug.R0000644000176200001440000000127413327450457021007 0ustar liggesusersmessage("TESTING: InternalErrorException...") library("R.oo") ex <- InternalErrorException("Hmm... I didn't expect this!") print(ex) ex2 <- InternalErrorException("Hmm... I didn't expect this!", package=R.oo) print(ex2) ex3 <- InternalErrorException("Hmm... I didn't expect this!", package="R.oo") print(ex3) myLog <- function(x, ...) { if (!is.numeric(x)) { throw(InternalErrorException("Argument 'x' to myLog() is not numeric: ", mode(x), package=R.oo)) } log(x, ...) } myLog(2) ex <- NULL tryCatch({ myLog("a") }, error= function(ex) { ex <- Exception$getLastException() }) message("TESTING: InternalErrorException...DONE") R.oo/tests/objectSize.R0000644000176200001440000000113313327450457014465 0ustar liggesusersmessage("TESTING: objectSize()...") library("R.oo") ## Simple object x <- 1:100 y0 <- object.size(x) y <- objectSize(x) print(y) stopifnot(y == y0) ## A list x <- as.list(1:100) y0 <- object.size(x) y <- objectSize(x) print(y) stopifnot(y == y0) ## An environment env <- new.env() env$a <- 1:100 env$b <- as.list(1:100) env$c <- new.env() y0 <- object.size(env) print(y0) y <- objectSize(env) print(y) ## An environment with circular dependencies env <- new.env() env$a <- 1:100 env$env <- env y0 <- object.size(env) print(y0) y <- objectSize(env) print(y) message("TESTING: objectSize()...DONE") R.oo/tests/StaticMethodsAndNamespaces.R0000644000176200001440000000030113327450457017556 0ustar liggesusersmessage("TESTING: Static methods and classes...") clazz <- R.oo::Class print(clazz) clazz <- R.oo::Class$forName("Object") print(clazz) message("TESTING: Static methods and classes...DONE") R.oo/tests/abort.R0000644000176200001440000000160113327450457013473 0ustar liggesusersmessage("TESTING: abort()...") library("R.oo") foo <- function() { cat("foo()...\n") on.exit(cat("foo()...done\n")) tryCatch({ stop("Woops!") }, error = function(ex) { cat("An error was caught: ", ex$message, "\n", sep="") }) cat("Continuing...\n") } bar <- function() { cat("bar()...\n") on.exit(cat("bar()...done\n")) tryCatch({ abort("Woops!") }, error = function(ex) { cat("An error was caught: ", ex$message, "\n", sep="") }) cat("This message will never be displayed...\n") } # An error generated by stop() can be caught foo() ## abort() will abort covr::package_coverage() and ## and any other evaluations beyond this point. if (!"covr" %in% loadedNamespaces() && FALSE) { # ...which is not possible when using abort() bar() # This expression is never reached cat("This line will never be outputted.\n") } # message("TESTING: abort()...DONE") R.oo/tests/Exception.R0000644000176200001440000000421213327450457014323 0ustar liggesusersmessage("TESTING: Exception...") library("R.oo") oopts <- options(warn=1) ###################################################################### # 1. To catch a regular "error" exception thrown by e.g. stop(). ###################################################################### x <- NA y <- NA tryCatch({ x <- log(123) y <- log("a") }, error = function(ex) { print(ex) }) print(x) print(y) ###################################################################### # 2. Always run a "final" expression regardless or error or not. ###################################################################### filename <- tempfile("R.methodsS3.example") con <- file(filename) tryCatch({ open(con, "r") }, error = function(ex) { cat("Could not open ", filename, " for reading.\n", sep="") }, finally = { close(con) cat("The id of the connection is ", ifelse(is.null(con), "NULL", con), ".\n", sep="") }) ###################################################################### # 3. Creating your own Exception class ###################################################################### setConstructorS3("NegativeLogValueException", function( msg="Trying to calculate the logarithm of a negative value", value=NULL) { extend(Exception(msg=msg), "NegativeLogValueException", .value = value ) }) setMethodS3("as.character", "NegativeLogValueException", function(this, ...) { paste(as.character.Exception(this), ": ", getValue(this), sep="") }) setMethodS3("getValue", "NegativeLogValueException", function(this, ...) { this$.value }) mylog <- function(x, base=exp(1)) { if (x < 0) throw(NegativeLogValueException(value=x)) else log(x, base=base) } # Note that the order of the catch list is important: l <- NA x <- 123 tryCatch({ l <- mylog(x) }, NegativeLogValueException = function(ex) { cat(as.character(ex), "\n") }, "try-error" = function(ex) { cat("try-error: Could not calculate the logarithm of ", x, ".\n", sep="") }, error = function(ex) { cat("error: Could not calculate the logarithm of ", x, ".\n", sep="") }) cat("The logarithm of ", x, " is ", l, ".\n\n", sep="") options(oopts) message("TESTING: Exception...DONE") R.oo/tests/throw.R0000644000176200001440000000105513327450457013532 0ustar liggesusersmessage("TESTING: throw()...") library("R.oo") ## Generate an error ex <- tryCatch({ stop("An error") }, error = function(ex) { ex }) print(ex) ## Re-throw the error ex2 <- tryCatch({ throw(ex) }, error = function(ex) { ex }) print(ex2) stopifnot(identical(ex2, ex)) ## Generate an Exception ex <- tryCatch({ throw("An error") }, error = function(ex) { ex }) print(ex) ## Re-throw the Exception ex2 <- tryCatch({ throw(ex) }, error = function(ex) { ex }) print(ex2) stopifnot(identical(ex2, ex)) message("TESTING: throw()...DONE") R.oo/tests/extend.default.R0000644000176200001440000000203313327450457015276 0ustar liggesusersmessage("TESTING: extend()...") library("R.oo") setConstructorS3("MyDouble", function(value=0, ...) { extend(as.double(value), "MyDouble", ...) }) setMethodS3("as.character", "MyDouble", function(object, ...) { fmtstr <- attr(object, "fmtstr") if (is.null(fmtstr)) fmtstr <- "%.6f" sprintf(fmtstr, object) }) setMethodS3("print", "MyDouble", function(object, ...) { print(as.character(object), ...) }) x <- MyDouble(3.1415926) print(x) x <- MyDouble(3.1415926, fmtstr="%3.2f") print(x) attr(x, "fmtstr") <- "%e" print(x) setConstructorS3("MyList", function(value=0, ...) { extend(list(value=value, ...), "MyList") }) setMethodS3("as.character", "MyList", function(object, ...) { fmtstr <- object$fmtstr if (is.null(fmtstr)) fmtstr <- "%.6f" sprintf(fmtstr, object$value) }) setMethodS3("print", "MyList", function(object, ...) { print(as.character(object), ...) }) x <- MyList(3.1415926) print(x) x <- MyList(3.1415926, fmtstr="%3.2f") print(x) x$fmtstr <- "%e" print(x) message("TESTING: extend()...DONE") R.oo/tests/zzz.Object.finalize,reentrant.R0000644000176200001440000000262113327450457020230 0ustar liggesusersmessage("TESTING: finalize() reentrant...") ## FIXME: 'covr' does not play well with tests ## detaching/unloading packages if ("covr" %in% loadedNamespaces()) { detach <- function(...) NULL } library("R.methodsS3") library("R.oo") lotsOfParsing <- function(code="y <- 1:3") { parse(text=rep(code, times=10000)) } setConstructorS3("MyClass", function(a=1:10) { extend(Object(), "MyClass", a=a) }) setMethodS3("finalize", "MyClass", function(this, ...) { cat("finalize...\n") utils::str(sys.calls()) cat("finalize...done\n") }) # Parse and eval expression (works) expr <- lotsOfParsing() eval(expr) print(y) ## [1] 1 2 3 stopifnot(identical(y, 1:3)) # Create an object with a finalizer x <- MyClass() # Detach R.oo so that the finalizer will try to reload it detach("package:R.oo") # Remove 'x' so that it will be finalized below rm(x) # This may trigger garbage collection via parse() # If so, it is important that parse() is not called # (indirectly via library()) by the finalizer. # Because otherwise R may crash. expr2 <- lotsOfParsing(code="y <- 1:4") ## finalize... ## Dotted pair list of 9 ## $ : ... ## ... ## $ : language function (env) { ... ## $ : language finalize(this) ## $ : language finalize.MyClass(this) ## Parse called: TRUE ## finalize...done eval(expr2) print(y) ## [1] 1 2 3 4 stopifnot(identical(y, 1:4)) print(warnings()) message("TESTING: finalize() reentrant...DONE") R.oo/tests/trim.R0000644000176200001440000000063213327450457013342 0ustar liggesusersmessage("TESTING: trim()...") library("R.oo") x <- character(0L) y <- trim(x) print(y) stopifnot(identical(y, x)) x <- "Hello world!" y <- trim(x) print(y) stopifnot(identical(y, x)) x <- " \tHello world!\n " y <- trim(x) print(y) stopifnot(identical(y, "Hello world!")) x <- c(" \tHello", "world!") y <- trim(x) print(y) stopifnot(identical(y, c("Hello", "world!"))) message("TESTING: trim()...DONE") R.oo/tests/ASCII.R0000644000176200001440000000053013327450457013214 0ustar liggesusersmessage("TESTING: ASCII...") library("R.oo") ## Display ASCII table print(R.oo::ASCII) idxs <- 1:255 str(idxs) chars <- intToChar(idxs) print(chars) stopifnot(length(chars) == length(idxs)) idxs2 <- charToInt(chars) str(idxs2) stopifnot(length(idxs2) == length(chars)) stopifnot(identical(idxs2, idxs)) message("TESTING: ASCII...DONE") R.oo/tests/Object.finalize,onoff.R0000644000176200001440000000323013327450457016476 0ustar liggesuserslibrary("R.methodsS3") library("R.oo") oopts <- options(warn=1L) message("TESTING: finalize() on Object on and off ...") finalized <- NULL if ("covr" %in% loadedNamespaces()) { assertFinalization <- function(name) TRUE } else { assertFinalization <- function(name) { cat(sprintf("Is '%s' in '%s'?\n", name, paste(finalized, collapse=", "))) stopifnot(is.element(name, finalized)) } } name <- NULL nextName <- function() { if (is.null(name)) return(letters[1L]) letters[which(letters == name) + 1L] } setMethodS3("finalize", "Foo", function(this, ...) { cat(sprintf("Finalizing %s()...\n", class(this)[1L])) name <- unclass(this) cat(sprintf(" Value: %s\n", name)) finalized <<- c(finalized, name) cat(sprintf("Finalizing %s()...done\n", class(this)[1L])) }) setConstructorS3("Foo", function(..., ...finalize=NA) { extend(Object(...), "Foo", ...finalize=...finalize) }) # Default x <- Foo(name <- nextName()) rm(list="x"); gc() assertFinalization(name) # Default (explicit) x <- Foo(name <- nextName(), finalize=TRUE, ...finalize=NA) rm(list="x"); gc() str(finalized) assertFinalization(name) # Disable x <- Foo(name <- nextName(), finalize=FALSE, ...finalize=FALSE) rm(list="x"); gc() str(finalized) # Disable (forced) x <- Foo(name <- nextName(), finalize=TRUE, ...finalize=FALSE) rm(list="x"); gc() str(finalized) # Enable (forced) x <- Foo(name <- nextName(), finalize=FALSE, ...finalize=TRUE) rm(list="x"); gc() str(finalized) assertFinalization(name) print(finalized) # Finalize upon exit options("R.oo::Object/finalizeOnExit"=TRUE) y <- Foo(name <- "OnExit") message("TESTING: finalize() on Object on and off ... DONE") options(oopts) R.oo/tests/typeOfClass.R0000644000176200001440000000107013327450457014620 0ustar liggesusersmessage("TESTING: typeOfClass()...") library("R.oo") type <- typeOfClass(NULL) print(type) stopifnot(is.na(type)) type <- typeOfClass(Object) print(type) stopifnot(type == "S3-Object") type <- typeOfClass("Object") print(type) stopifnot(type == "S3-Object") library("methods") type <- typeOfClass("data.frame") print(type) stopifnot(type == "S4") clazz <- getClass("data.frame") type <- typeOfClass(clazz) print(type) stopifnot(type == "S4") type <- typeOfClass("Non-Existing-Class") print(type) stopifnot(is.na(type)) message("TESTING: typeOfClass()...DONE") R.oo/tests/Class.R0000644000176200001440000000253113327450457013434 0ustar liggesusersmessage("TESTING: Class...") library("R.oo") clazz <- Object print(clazz) print(as.character(clazz)) message(" - instantiation ...") obj <- Object() print(obj) obj <- newInstance(clazz) print(obj) stopifnot(inherits(obj, "Object")) obj <- clazz[["newInstance"]]() print(obj) stopifnot(inherits(obj, "Object")) message(" - instantiation ... DONE") message(" - reflection ...") clazz <- Class$forName("Object") print(clazz) print(getKnownSubclasses(clazz)) static <- getStaticInstance(clazz) print(static) pkg <- getPackage(clazz) print(pkg) stopifnot(pkg == "R.oo") ## Odds and ends print(isBeingCreated(clazz)) ## FIXME: Case should never occur but code allows for it print(isBeingCreated.Class(obj)) message(" - reflection ... DONE") message(" - modifiers ...") print(isAbstract(clazz)) print(isPrivate(clazz)) print(isProtected(clazz)) print(isPublic(clazz)) print(isDeprecated(clazz)) print(isStatic(clazz)) ## TRUE because of Object$load() message(" - modifiers ... DONE") message(" - inheritance ...") setConstructorS3("MyClass", function(...) { extend(Object(), "MyClass", ...) }) obj <- MyClass(a=1, b=2, c=3) print(obj) stopifnot(all(c("a", "b", "c") %in% names(obj))) obj <- newInstance(MyClass, a=1, b=2, c=3) print(obj) stopifnot(all(c("a", "b", "c") %in% names(obj))) message(" - inheritance ... DONE") message("TESTING: Class...DONE") R.oo/tests/Object.finalize,noattach.R0000644000176200001440000000200313327450457017165 0ustar liggesusersoopts <- options(warn=1L) message("TESTING: finalize() on Object without attach ...") pkgs <- c("R.methodsS3", "R.oo") isAttached <- function(pkgs) { structure(sprintf("package:%s", pkgs) %in% search(), names=pkgs) } # Record which packages were attached from the beginning # (happens if not a fresh session) wasAttached <- isAttached(pkgs) assertPackages <- function(loaded=c("R.methodsS3", "R.oo")) { s <- utils::sessionInfo() s$R.version <- NULL s$platform <- "" s$locale <- "" cat("----------------------------------") print(s) cat("----------------------------------\n\n") loaded <- loaded[!wasAttached[loaded]] stopifnot(!any(isAttached(loaded))) } R.oo::setConstructorS3("MyClass", function(a=1:10) { R.oo::extend(R.oo::Object(), "MyClass", a=a) }) # Create an object with a finalizer x <- MyClass() assertPackages() # Remove 'x' so that it will be finalized below rm(x) gc() assertPackages(loaded="R.oo") message("TESTING: finalize() on Object without attach ... DONE") options(oopts) R.oo/tests/hashCode.R0000644000176200001440000000063313327450457014106 0ustar liggesuserslibrary("R.oo") message("TESTING: hashCode() ...") y <- hashCode(character(0L)) print(y) y <- hashCode("") print(y) y <- hashCode(base::letters) print(y) y <- hashCode(integer(0L)) print(y) y <- hashCode(1:10) print(y) y <- hashCode(double(0L)) print(y) y <- hashCode(1:10+0.1) print(y) y <- hashCode(list(0L)) print(y) y <- hashCode(as.list(1:10)) print(y) message("TESTING: hashCode() ... DONE") R.oo/tests/Package.R0000644000176200001440000000511113621423047013707 0ustar liggesusersmessage("TESTING: Package...") library("R.oo") # By defining .onAttach() as follows in zzz.R for a package, an # instance of class Package with the same name as the package will # be made available on the search path. More over, the code below # will also inform the user that the package has been loaded: # # > library(R.oo) # R.oo v0.52 (2003/04/13) was successfully loaded. # .onAttach <- function(libname, pkgname) { pkg <- Package(pkgname) assign(pkgname, pkg, pos=getPosition(pkg)) cat(getName(pkg), " v", getVersion(pkg), " (", getDate(pkg), ")", " was successfully loaded.\n", sep="") } # The Package class works for any packages, loaded or not. # Some information about the base package pkg <- Package("base") print(pkg) # [1] "Package: base v3.6.2 is loaded (pos=14). Title: The R Base Package. # The official webpage is NA and the maintainer is R Core Team . The package is installed in /usr/lib/R/library/base/. # License: Part of R 3.6.2. Description: Base R functions. Type # showNews(base) for package history, and ?base for help." print(list.files(Package("base")$dataPath)) # Some information about the R.oo package print(R.oo::R.oo) # [1] "Package: R.oo v1.23.0-9000 . Title: R Object-Oriented Programming # with or without References. The official webpage is https://github.com/ # HenrikBengtsson/R.oo and the maintainer is Henrik Bengtsson. The package # is installed in /home/alice/R/x86_64-pc-linux-gnu-library/3.6/R.oo/. # License: LGPL (>= 2.1). Description: Methods and classes for object- # oriented programming in R with or without references. Large effort has # been made on making definition of methods as simple as possible with a # minimum of maintenance for package developers. The package has been # developed since 2001 and is now considered very stable. This is a # cross-platform package implemented in pure R that defines standard S3 # classes without any tricks. Type showNews(R.oo) for package history, # and ?R.oo for help." pkg <- Package("R.oo") classes <- getClasses(pkg) print(classes) stopifnot(all(c("Object", "Class", "Interface", "Exception", "Package") %in% classes)) pkg <- Package("R.oo") res <- showDescriptionFile(pkg, pager=function(...) TRUE) stopifnot(isTRUE(res)) res <- showNews(pkg, pager=function(...) TRUE) stopifnot(isTRUE(res)) res <- showChangeLog(pkg, pager=function(...) TRUE) stopifnot(isTRUE(res)) res <- showHistory(pkg, pager=function(...) TRUE) stopifnot(isTRUE(res)) res <- try(Package("Non-Existing-Package"), silent=TRUE) stopifnot(inherits(res, "try-error")) message("TESTING: Package...DONE") R.oo/tests/BasicObject.R0000644000176200001440000000532013327450457014536 0ustar liggesusersmessage("TESTING: BasicObject...") library("R.oo") obj <- BasicObject() print(obj) obj <- BasicObject(42L) print(obj) stopifnot(obj == 42L) obj$a <- 1:99 print(obj) fields <- getFields(obj) print(fields) hasA <- hasField(obj, "a") print(hasA) stopifnot(hasA) value <- obj$a str(value) stopifnot(identical(value, 1:99)) obj$a <- 1:100 print(obj) value <- obj[["a"]] str(value) stopifnot(identical(value, 1:100)) obj[["a"]] <- 1:101 print(obj) value <- obj[["a"]] str(value) stopifnot(identical(value, 1:101)) size <- objectSize(obj) print(size) ref <- isReferable(obj) print(ref) stopifnot(isTRUE(ref)) time <- getInstantiationTime(obj) print(time) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Attach and detach # - - - - - - - - - - - - - - - - - - - - - - - - - - - - obj <- BasicObject(42L) obj$a <- 1:99 res <- attach(obj) print(res) stopifnot(exists("a", mode="integer")) str(a) ## Object already attached res <- tryCatch(attach(obj), warning=function(w) w) stopifnot(inherits(res, "warning")) res <- detach(obj) print(res) ## Object already detached res <- tryCatch(detach(obj), warning=function(w) w) stopifnot(inherits(res, "warning")) obj <- BasicObject(list(a=1L, b=2, c=3)) res <- attach(obj) print(res) stopifnot(exists("a", mode="integer")) str(a) res <- detach(obj) print(res) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Class # - - - - - - - - - - - - - - - - - - - - - - - - - - - - obj2 <- newInstance(obj, 43L) print(obj2) stopifnot(obj2 == 43L) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Inheritance # - - - - - - - - - - - - - - - - - - - - - - - - - - - - setConstructorS3("MyObject", function(...) { extend(BasicObject(), "MyObject", ...) }) obj <- MyObject(a=1, b=2) print(obj) str(obj) stopifnot(all(c("a", "b") %in% names(attributes(obj)))) setMethodS3("foo", "MyObject", function(static, x=1L, ...) { list(x=x, ...) }, static=TRUE) res <- MyObject$foo(y=2L) stopifnot(identical(res$x, 1L)) stopifnot(identical(res$y, 2L)) obj$a <- 3 print(obj) value <- obj[["a"]] str(value) stopifnot(identical(value, 3)) obj[["a"]] <- 4 print(obj) value <- obj$a str(value) stopifnot(identical(value, 4)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - # FIXME: hashCode() return integer(0) whenever # getInstantiationTime() returns NULL, which is # now the default behavior of BasicObject # - - - - - - - - - - - - - - - - - - - - - - - - - - - - hash <- hashCode(obj) print(hash) ## FIXME: Currently returns integer(0) ## stopifnot(length(hash) == 1L) neq <- equals(obj, 1) print(neq) ## FIXME: Currently returns NA ## stopifnot(!neq) eq <- equals(obj, obj) print(eq) ## FIXME: Currently returns NA ## stopifnot(eq) message("TESTING: BasicObject...DONE") R.oo/tests/local.R0000644000176200001440000000106313327450457013460 0ustar liggesusersmessage("TESTING: local()...") library("R.oo") setConstructorS3("Foo", function() { extend(Object(), "Foo") }) setMethodS3("finalize", "Foo", function(this, ...) { cat("Finalized Foo\n") }) x <- Foo() print(x) # Trigger finalizer via garbage collection rm(list="x") gc() local({ setConstructorS3("Bar", function() { extend(Object(), "Bar") }) setMethodS3("finalize", "Bar", function(this, ...) { cat("Finalized Bar\n") }) x <- Bar() print(x) # Trigger finalizer via garbage collection rm(list="x") gc() }) message("TESTING: local()...DONE") R.oo/tests/equals.R0000644000176200001440000000034613327450457013663 0ustar liggesusersmessage("TESTING: equals()...") library("R.oo") print(equals(1,1)) print(equals(1,2)) a <- 1:100 b <- 1:100 print(equals(a,b)) obj <- Object() print(equals(obj, 1)) print(equals(obj, obj)) message("TESTING: equals()...DONE") R.oo/tests/getConstructorS3.R0000644000176200001440000000023713327450457015623 0ustar liggesusersmessage("TESTING: getConstructorS3()...") library("R.oo") fcn <- getConstructorS3("Object") print(args(fcn)) message("TESTING: getConstructorS3()...DONE") R.oo/NEWS0000644000176200001440000020367213720764545011615 0ustar liggesusersPackage: R.oo ============= Version: 1.24.0 [2020-08-24] NEW FEATURES: * Added '$<-' and '[[<-' for Object to the list of S3 methods that tries to ignore objects of class 'Object' that are of the kind that R.oo creates. This fixes conflicts with 'Object' objects that the 'arrow' package produces, which are non-R.oo objects. Other S3 Object methods already do this since R.oo 1.20.0 to workaround similar issues with the 'rJava' package. BUG FIXES: * getDate() for Package returned NA because it was looking for DESCRIPTION field 'Date', which has been renamed to 'Date/Publication'. Version: 1.23.0 [2019-11-02] SIGNIFICANT CHANGES: * Exporting generic throw(), which previously was a re-export of ditto from R.methodsS3. This change prevents the message 'Registered S3 method overwritten by 'R.oo': ... throw.default R.methodsS3' from appearing when the R.oo package is loaded (directly or indirectly). DEPRECATED AND DEFUNCT: * Removed defunct method gc() for Object. Use clearCache(..., gc = TRUE). CRAN POLICY: * Dont test example(getBundle.Package) because they may take more than 5 seconds when run on CRAN where installed.packages() will take a long time due to many thousands of packages. Version: 1.22.0 [2018-04-21] NEW FEATURES: * Now generic function clone() is always created. This avoids the recurring issues where the creation of generic R.oo::clone() was skipped if another clone() generic already existed during package installation from source. This would in turn cause for instance the R.utils package to fail during loading (R.utils Issue #29). Thanks to Matt Dowle for reporting on this and insisting on a fix. DEPRECATION & DEFUNCT: * Removed previously defunct update() for Package; use update.packages(). * Removed previously defunct registerFinalizer() for Object. * Previous deprecated gc() for Object is now defunct; use clearCache(..., gc = TRUE) instead. BUG FIXES: * Method dispatching of `[[<-` for Object and BasicObject failed when running R CMD check in R-devel (>= 3.6.0) with environment variables '_R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV' and '_R_S3_METHOD_LOOKUP_USE_TOPENV_AS_DEFENV' both set to TRUE. Version: 1.21.0 [2016-10-30] NEW FEATURES: * Now TAB-completion works on elements of Object, BasicObject and Class. * Now getElement() works also for Object, Class and BasicObject. * [[() for Object, Class and BasicObject gained argument 'exact', but exact=FALSE is currently ignored and treated as exact=TRUE. Version: 1.20.0 [2016-02-17] SIGNIFICANT CHANGES: * Package requires R (>= 2.13.0) (April 2011), because R.methodsS3 effectively requires that version. NEW FEATURES: * Some S3 methods for R.oo classes Object and Exception would interfere with ditto for rJava objects that had class attributes containing "Object" and "Exception". Although these classes have the same name, and therefore are in conflict, they represent completely different classes. For methods where conflicts have been identified, the R.oo implementations will try to detect the conflict and call the next method instead. * Now print() and startupMessage() for Package report on package date only if date exists. SOFTWARE QUALITY: * CLEANUP: Explicit namespace imports also from 'utils' package. * CLEANUP: Drop unused code. BUG FIXES: * clazz[[method]]() for Class object clazz did not call the intended static method, as clazz$() would do. * getClasses() for Package would return NULL. Version: 1.19.0 [2015-02-27] SOFTWARE QUALITY: * Now explicitly declare "default" S3 methods for getClasses and getMethods. * Dropped non-ASCII characters from R source comments. BUG FIXES: * Now charToInt() returns integers as documented (was numerics). * objectSize() for environment could result in infinite recursive calls if there circular dependencies between environments. Added package test for objectSize() including this case. * getKnownSubclasses() for Class could throw an error if one of the objects "scanned" for being a function and of class Class would thrown an error from just looking at it. See R-devel thread 'Inspect a "delayed" assigned whose value throws an error?' on 2015-01-26 for details. * Forgot to explicitly import getClasses and getMethods from the 'methods' package. Interestingly, this one has never given an error. * getStaticInstance() for Object now searches the parent/calling environment as well. This covers the case when constructors and objects are created in a local environment (contrary to package namespaces and the global environment). Version: 1.18.5 [2015-01-05] DEPRECATE AND DEFUNCT: * Now update() for Package is defunct; use update.packages(). Version: 1.18.4 [2014-12-29] NEW FEATURES: * Added argument 'decreasing' to ll(), e.g. ll(sortBy="objectSize", decreasing=TRUE). Version: 1.18.3 [2014-10-18] BUG FIXES: * Rdoc$compile() and Rdoc tag @allmethods failed to provide links and titles on non-exported S3 methods. Version: 1.18.2 [2014-04-26] BUG FIXES: * Now Rdoc$getRdUsage() escapes '%*%' to `'\%*\%'` in the Rd output. Version: 1.18.1 [2014-03-30] BUG FIXES: * Now getRdDeclaration(), getRdHierarchy() and getRdMethods() for Class handles also non-exported methods and Classes. Version: 1.18.0 [2014-02-22] SIGNIFICANT CHANGES: * A registered finalizer function for Object:s no longer calls finalize() on the Object itself unless the R.oo package is loaded, whereas previously it would have tried to temporarily reattach the R.oo package. On the other hand, it is now sufficient to have R.oo loaded for finalize() to be called, whereas in the passed it also had to be attached. DEPRECATE AND DEFUNCT: * Deprecated gc() for Object. Use clearCache(..., gc=TRUE) instead. Version: 1.17.1 [2014-02-05] SIGNIFICANT CHANGES: * Argument 'properties' of ll() defaults to an options, which if not set in turn defaults to a given value. The ll() method is no longer trying to set that option if missing. The option is also no longer set when the package is attached. Version: 1.17.0 [2014-01-05] NEW FEATURES: * Now Class$forName() searches all loaded namespaces as a last resort. Version: 1.16.2 [2014-01-05] NEW FEATURES: * Now static method Class$forName() accepts optional 'envir' argument for specifying from where to search for the Class object. * Added argument 'gc=FALSE' to clearCache(). It is recommended to start using clearCache(obj, gc=TRUE) instead of gc(obj). DEPRECATE AND DEFUNCT: * Defunct registerFinalizer() for Object. BUG FIXES: * The temporary finalizer() registered for Object while loading the R.oo package itself would cause cyclic loading of R.oo. The reason was that it checked whether R.oo was available or not, by only looking at attached namespaces but not loaded ones. This bug was introduced in R.oo 1.16.0. Version: 1.16.1 [2014-01-04] SOFTWARE QUALITY: * Added several missing importFrom() and S3method() statements to the NAMESPACE file. Version: 1.16.0 [2013-10-13] NEW FEATURES: * Added argument 'finalize' to Object() to specify whether a finalizer should be registered or not. If so, then generic function finalize() is called on the Object. Furthermore, extend() for Object gained argument '...finalize', which, regardless of argument 'finalize' of Object, force the registration of a finalizer (...finalize=TRUE) or the removal of one (...finalize=FALSE). If ...finalize=NA (default), then the finalizer is enabled/disabled according to argument 'finalize' of Object. For backward compatibility reasons, the default behavior is still to register a finalizer for Object:s, but this may change in a future release. SOFTWARE QUALITY: * Now the package's system tests assumes that it's only the 'base' package that is attached. BUG FIXES: * Now Object finalizers will no longer try to re-attach the 'R.oo' package if library() is in the process of trying to attach another package, because otherwise a cyclic loading of namespaces may occur. This was observed for a package that allocated a temporary Object .onAttach() which then was garbage collected and finalized. Version: 1.15.8 [2013-10-10] BUG FIXES: * It appears that when loading the package it may happen that the 'R.oo' namespace is loaded cyclicly, though this has only been observed while running 'R CMD INSTALL'. This may be because a Package object (R.oo::R.oo) is assigned during the loading of the namespace. Since Package extends() an Object object, this may end up loading 'R.oo' again. To avoid this, R.oo::R.oo is now assigned using delayed assignment. Version: 1.15.7 [2013-10-08] SOFTWARE QUALITY: * Now using inherits=FALSE in several internal exists()/get() calls. Version: 1.15.6 [2013-10-07] NEW FEATURES: * Now Rdoc tag @howToCite does a better job when there are multiple citations in CITATION. SOFTWARE QUALITY: * Now importing getCall() from 'stats', iff R (>= 2.14.0). Version: 1.15.5 [2013-09-28] NEW FEATURES: * Now the 'R.oo' Package object is also available when the package is only loaded (but not attached). Version: 1.15.4 [2013-09-26] DEPRECATE AND DEFUNCT: * Deprecated update() for Package. * Deprecated non-used registerFinalizer() for Object. Version: 1.15.3 [2013-09-23] SOFTWARE QUALITY: * Now properly declaring all S3 methods in the NAMESPACE file. Version: 1.15.2 [2013-09-20] SOFTWARE QUALITY: * ROBUSTNESS: Forgot to import R.methodsS3::appendVarArgs(). BUG FIXES: * The finalizer function registered by extend() for Object:s assumed that the 'utils' is attached while calling capture.output(), which under certain conditions could generate 'Error in getObjectInfo(this) : could not find function "capture.output"' while the garbage collector was running. In extreme cases it could also crash R. Version: 1.15.1 [2013-08-29] NEW FEATURES: * library("R.oo", warn.conflicts=FALSE, quietly=TRUE) will load the package completely silently. * Now startupMessage() for Package acknowledges library(..., quietly=TRUE). * setConstructorS3() no longer requires that R.oo is attached ("loaded"). Version: 1.15.0 [2013-08-23] NEW FEATURES: * Now getHowToCite() for Package utilizes utils::citation(), if package don't contain a HOWTOCITE file. It is recommended to write packages with CITATION instead of HOWTOCITE. DOCUMENTATION: * Hiding non-essential methods from the Rd help index, e.g. charToInt(), intToChar(), hashCode(), equals(), dimension() and trim(). SOFTWARE QUALITY: * Package no longer utilizes ':::'. DEPRECATE AND DEFUNCT: * Made get- and showHowToCite() protected methods. * Dropped deprecated inst/HOWTOSITE replaced by inst/CITATION. Version: 1.14.0 [2013-08-20] NEW FEATURES: * Now it's possible to call static methods without attaching ("loading") the package, e.g. R.oo::Class$forName("Object"). Added unit tests for this. * Now getPackage() for Class first searches the namespace of the Class object and then the attached ("loaded") packages. * Now '$' and '$<-' for Object locates the static instance of the Class using getStaticInstance() for Object. * Updated getStaticInstance() for Object to search more locations. Version: 1.13.10 [2013-07-11] NEW FEATURES: * Now R.oo::ll() works without attaching the package. This is done by attaching R.oo when called. * Now it is possible to use static methods of a Class without attaching the package where the Class is defined, e.g. R.utils::Arguments$getIndex(2). To enable this feature, options("R.oo::Class/searchNamespaces"=TRUE) must be set. BUG FIXES: * ll(private=TRUE) gave an error if the environment contained the special '...' argument. Version: 1.13.9 [2013-07-01] SOFTWARE QUALITY: * Bumped up package dependencies. Version: 1.13.8 [2013-06-27] NEW FEATURES: * Added a trial version of Rdoc tag @usage. Version: 1.13.7 [2013-05-30] NEW FEATURES: * Now Rdoc$compile() infer the package name from the DESCRIPTION file (instead from the package directory name). * Added argument 'path' to compileRdoc(). Version: 1.13.6 [2013-05-25] PERFORMANCE: * Minor speedup by replacing all rm(x) with rm(list="x"). Version: 1.13.5 [2013-05-20] NEW FEATURES: * Now Rdoc$getUsage() inserts line breaks so that any usage line is at most 90 characters long. DOCUMENTATION: * CRAN POLICY: Now all Rd \usage{} lines are at most 90 characters long. Version: 1.13.4 [2013-04-08] NEW FEATURES: * Now the @RdocData Rdoc tag also adds an \docType{data} Rd tag. Version: 1.13.3 [2013-04-04] BUG FIXES: * In R.oo v1.13.1 a bug was introduced causing the value of Rdoc tag @allmethods not to be parsed and instead treated as text. Version: 1.13.2 [2013-04-03] NEW FEATURES: * Now Rdoc$compile() outputs the same Rd files regardless of system settings. More precisely, it always uses '\n' for line breaks and locale "C" (default) for sorting strings. * Now Rdoc$compile(..., filename) handles when argument 'filename' is a vector of filenames. Version: 1.13.1 [2013-03-25] NEW FEATURES: * Now Rdoc$compile(..., check=TRUE) saves the erroneous Rd to file before throwing the exception. This helps troubleshooting. BUG FIXES: * Rdoc$compile() could sometimes drop '}' following Rdoc tags. Version: 1.13.0 [2013-03-08] NEW FEATURES: * Added support for Rdoc tag @author to have an optional value, e.g. @author "John Doe" as well as @author "JD, FB" where the initials are inferred from the package's DESCRIPTION file. * Added compileRdoc() to make it easier to compile Rdoc comments into Rd help files, e.g. Rscript -e "R.oo::compileRdoc()". * Now getAuthor() and getMaintainer() for Package use the 'Authors@R' field of DESCRIPTION and if not found then the 'Author'/'Maintainer' field. In addition, using argument 'as="person"' will parse and return the results as a 'person' list. SOFTWARE QUALITY: * Added an Authors@R field to the DESCRIPTION. Version: 1.12.0 [2013-03-04] NEW FEATURES: * It is now easier to find help for static method, e.g. help("Object$load") and ?"Object$load". * For "static" methods (e.g. Object$load()), the Rdoc compiler now generates a \usage{} section without the deprecated Rd markup \synopsis{}, which has been replaced by the static call placed in a comment. It also uses the static method as the name and alias (e.g. \name{Object$load}). Version: 1.11.7 [2013-01-08] BUG FIXES: * ROBUSTNESS: Made the Object finalizers reentrant. This was previously not the case on R prior to R v2.15.2 Patched r61487 iff the garbage collection is triggered from within base::parse() and the R.oo package is not already loaded when the finalizer is called. In such cases, R could crash. Added a package system test for this. Thanks to Duncan Murdoch (R core) for reporting on this and R core for making base::library() reentrant in R (>= 2.15.2 Patched r61487). Version: 1.11.6 [2013-01-08] NEW FEATURES: * Added argument 'format' to getInternalAddress() for Object. BUG FIXES: * The hexadecimal string returned by as.character() for Object would contain the decimal value and not the hexadecimal one. Version: 1.11.5 [2012-12-28] SOFTWARE QUALITY: * Further preparation for supporting R.oo and its derived packages to be imported without attaching ("loading") them. * Replaced all data.class(obj) with class(obj)[1L]. BUG FIXES: * getMethods() for Class would give an error if no methods were found for the queried Class. * In the rare case where getStaticInstance() for Class failed to setup a static instance, the temporary state set internally would not be unset. Version: 1.11.4 [2012-12-19] NEW FEATURES: * Added startupMessage() for Package. Version: 1.11.3 [2012-12-18] SOFTWARE QUALITY: * R CMD check for R devel no longer gives a NOTE on attach(). Version: 1.11.2 [2012-11-29] PERFORMANCE: * Made getKnownSubclasses() for Class a bit faster. Version: 1.11.1 [2012-11-28] SIGNIFICANT CHANGES: * LIMITATION: Registered finalizer for pure Object:s (i.e. excluding those which are of a subclass of Object) will no longer be called if the R.oo package has been detached. This should be a very unlikely scenario. BUG FIXES: * extend() for Object dropped existing field modifiers. Version: 1.11.0 [2012-11-23] NEW FEATURES: * Now getStaticInstance() for Class sets the environment for the returned Object to that of the Class. SOFTWARE QUALITY: * Preparing for better support for Object/Class in import-only namespaces, i.e. without packages being loaded. Version: 1.10.3 [2012-11-18] NEW FEATURES: * Updated the URL returned by RccViolationException$getRccUrl(). SOFTWARE QUALITY: * ROBUSTNESS: Now nearly all S3 methods are declared properly in the namespace. Version: 1.10.2 [2012-11-07] BUG FIXES: * obj$(...) would throw an error iff the Object 'obj' was saved or instantiated by R.oo (< 1.10.0). Code is now backward compatible with this case. Thanks Roger Day at University of Pittsburgh Cancer Institute and Dan Tenenbaum (BioC core) for reporting on this. Version: 1.10.1 [2012-10-16] BUG FIXES: * No longer passing '...' to NextMethod(), cf. R-devel thread 'Do *not* pass '...' to NextMethod() - it'll do it for you; missing documentation, a bug or just me?' on Oct 16, 2012. Version: 1.10.0 [2012-10-14] NEW FEATURES: * GENERALIZATION: Now $(...) calls the corresponding generic function (static, ...), where 'static' is the static object of Class . This allows for using NextMethod() in static functions. Calls to $(...) and $(...) were adjusted analogously. * Now throw() for Exception outputs the error message both above and below the stack trace, which is particularly useful when the stack trace is long. BUG FIXES: * The stacktrace details collected by Exception dropped the names of the functions. Version: 1.9.10 [2012-09-14] BUG FIXES: * The Exception constructor could generate warning 'In if (regexpr("^function \\(", code) != -1) return("") : the condition has length > 1 and only the first element will be used' occurring in its local fcnName() function. Now code no longer assumes that 'code' is of length 1. Version: 1.9.9 [2012-09-11] NEW FEATURES: * Now throw() for Exception aborts (after signalling and outputting the message) by calling stop(). Ideally it should utilize abort(), but the new version of abort() may be "caught" is certain cases. SOFTWARE QUALITY: * ROBUSTNESS/CRAN POLICY: Updated abort() for condition to utilize invokeRestart("abort"). This avoids having to call .Internal(.signalCondition(...)). It also means that the message outputted by abort() no longer starts with a "Error in ...:" line. abort() imitates how stop() works but without the signalling. BUG FIXES: * getContribUrl() and getDevelUrl() would give an error if corresponding fields did not exists in the DESCRIPTION file. Now they return NAs just as getUrl(). Version: 1.9.8 [2012-06-22] NEW FEATURES: * GENERALIZATION: Added newInstance() for BasicObject. * ROBUSTNESS: Now constructor BasicObject() is guaranteed to return an object with non-duplicated class attribute elements. Version: 1.9.7 [2012-06-20] DEPRECATE AND DEFUNCT: * Dropped non-used adjusted getClass() generic function, which means that now there is one less function masking the 'methods' package. BUG FIXES: * throw() for Exception would give an error on R < 2.14.0, where no generic getCall() exists. Now it works for all versions of R. Version: 1.9.6 [2012-06-11] BUG FIXES: * Rdoc$getKeywords() now uses system environment variable R_DOC_DIR for locating the internal KEYWORDS.db. Thanks Charles Hogg at NIST for suggesting this. Version: 1.9.5 [2012-04-20] NEW FEATURES: * Added argument 'export' to setConstructorS3(). * Now Rdoc$getUsage() searches also the package namespace for the function/method definition. This is done, before looking in the global search path. DEPRECATE AND DEFUNCT: * setConstructorS3() no longer sets attribute "formals". It has been deprecated since April 2003. Version: 1.9.4 [2012-04-05] SOFTWARE QUALITY: * Now package imports and exports getCall() from the 'stats' package so that generic function getCall() is available for Exception:s also when 'stats' is not loaded, e.g. during executing .Rprofile. Version: 1.9.3 [2012-03-18] NEW FEATURES: * Now it is possible to set the default value of argument 'cleanup' of getStackTrace() for Exception via an option. Version: 1.9.2 [2012-03-08] NEW FEATURES: * Made stack traces of Exception:s more informative and cleaner. * Now the default throw() of R.methodsS3 is "quietly" overwritten, i.e. there is no longer a warning about it when R.oo is loaded. * Now package no longer warns about renaming existing functions getMethods() and getClasses() of 'base' to default methods during installation, iff R.methodsS3 (>= 1.2.3). Version: 1.9.1 [2012-03-05] NEW FEATURES: * CLEANUP: throw() for 'error' is now just a wrapper for stop(). Previously it had to do what stop() now does for 'condition' objects. SOFTWARE QUALITY: * CRAN POLICY: Replaced all appendVarArgs() for 'base' functions that do .Internal() calls, because they would then appear as local functions of this package and hence not be accepted by CRAN according to their new policies. Instead we now create "default" functions that are wrappers to the corresponding functions in the 'base' package. Extra care has to be taken for functions that have arguments whose values are dependent on the call environment/closure. * CRAN POLICY: Dropped .Internal() calls in the default ll() method, in getMethods() for Class objects, and in throw() for Exceptions. Version: 1.9.0 [2012-02-23] SOFTWARE QUALITY: * Now the package imports 'utils' instead of depending on it. This means that all packages that depends on 'R.oo' for loading 'utils' for them need to explicitly load it themselves. * The R.oo package now requires (at least) R v2.4.0 (Oct 2006!) Version: 1.8.3 [2011-11-01] SOFTWARE QUALITY: * CLEANUP/FIX: Dropped package.description() from getDescriptionFile() for Package, which was done for compatibility reasons when it was deprecated in R v1.9.0. It will be dropped completely in R v2.15.0. Version: 1.8.2 [2011-08-25] DOCUMENTATION: * Added further clarification to help(setConstructorS3) about the requirement that constructors defined by setConstructorS3() have to be callable without arguments. Version: 1.8.1 [2011-07-10] SOFTWARE QUALITY: * Changed first argument of getCall() to 'x', because that is what the new getCall() method of 'stats' in R v2.14.0 uses. Version: 1.8.0 [2011-04-03] NEW FEATURES: * ROBUSTNESS: Now finalizers for Object:s are registered to be called also when the R session is quit, if the "R.oo::Object/finalizeOnExit" option is TRUE. If FALSE (default), as before, the finalizers were only executed when Object:s were cleaned up by the garbage collector. * Turned of the default instantiation timestamp for Object and BasicObject. The main reason is that it makes it very complicated to calculate reproducible checksums. However, for backward compatibility, it is possible to turn on the timestamp by setting option "R.oo::Object/instantiationTime". For BasicObject there is option "R.oo::BasicObject/instantiationTime". * Added protected getFieldModifiers() and getFieldModifier(). * Added argument 'recursive' to clearCache() for recursively traversing all elements are clearing the cache of all detected Object:s. * Now clearCache() also calls clearLookupCache(). * Added protected clearLookupCache() for clearing internal objects stored in the Object and that are used for faster field lookups. DEPRECATE AND DEFUNCT: * Dropped deprecated getInstanciationTime(). Version: 1.7.5 [2011-02-01] SOFTWARE QUALITY: * Now using 'inherits' (not 'inherit') in all calls to get() and exists(). Version: 1.7.4 [2010-09-22] NEW FEATURES: * Now Rdoc lines are allowed to start with double ('##') or triple ('###') comment characters in addition to single ('#') ones. Version: 1.7.3 [2010-06-04] SIGNIFICANT CHANGES: * Now argument 'addTimestamp' of Rdoc$compile() defaults to FALSE. This way the generate Rd file will remain identical unless there are real Rdoc/code changes. Not adding timestamps is better when working with a version control systems. BUG FIXES: * If there are no Rd files, then check() of Rdoc would throw the error "object 'res' not found". Version: 1.7.2 [2010-04-13] BUG FIXES: * Package(pkg) would throw "Error in Package(pkgname) : object 'package' not found", if 'pkg' is installed in multiple libraries. Version: 1.7.1 [2010-03-17] BUG FIXES: * Loading the package would generate warnings of of several conflicts. Forgot to export '.conflicts.OK' after adding the name space. Version: 1.7.0 [2010-03-13] SOFTWARE QUALITY: * Added a NAMESPACE. Version: 1.6.7 [2010-01-21] DOCUMENTATION: * Added some more "get started" help to help(R.oo). Version: 1.6.6 [2009-11-19] NEW FEATURES: * Added isOlderThan() for Package. Version: 1.6.5 [2009-10-30] NEW FEATURES: * ROBUSTIFICATION: Lowered the risk for save() of Object to leave an incomplete file due to say power failures etc. This is done by first writing to a temporary file, which is then renamed. If the temporary file already exists, an exception is thrown. Version: 1.6.4 [2009-10-27] SOFTWARE QUALITY: * Removed a stray print() statement in attachLocally() for Object:s. Version: 1.6.3 [2009-10-26] NEW FEATURES: * Added objectSize() for environments. BUG FIXES: * Rdoc$compile() did not work with R v2.10.0 and newer. Version: 1.6.2 [2009-10-16] SOFTWARE QUALITY: * Some cleanup of Rd files to meet the stricter requirements. Version: 1.6.1 [2009-10-09] BUG FIXES: * getBundle() of Package gave "Error in getBundle.Package(pkg) : subscript out of bounds" starting with R v2.10.0. Version: 1.6.0 [2009-10-02] NEW FEATURES: * Added the Interface class, which is in an alpha version. Version: 1.5.0 [2009-09-09] DOCUMENTATION: * Fixed broken/missing Rd links. Version: 1.4.9 [2009-07-07] NEW FEATURES: * Added protected method registerFinalizer() for Object. Version: 1.4.8 [2009-05-18] DOCUMENTATION: * The titles for intToChar() and charToInt() where mixed up. Thanks to Jens Philip Hoehmann for reporting this. Version: 1.4.7 [2009-01-10] DOCUMENTATION: * There were some Rd warnings with the new R v2.9.0. Version: 1.4.6 [2008-08-11] NEW FEATURES: * Added support for more "short tags" in the Rdoc compiler. SOFTWARE QUALITY: * Replaced all 'a %in% b' with is.element(a,b) due to an old and weird bug that I cannot reproduce, cf. my R-devel post in thread 'Argument "nomatch" matched by multiple actual arguments ... %in% -> match?!?' on March 6, 2008. Thanks Ran Pang for reminding me and for additional troubleshooting. Version: 1.4.5 [2008-05-28] NEW FEATURES: * SPELL CORRECTION: Added getInstantiationTime(), but keeping misspelled (and now deprecated) getInstanciationTime() for backward compatibility. The internal attribute was also renamed, but the above method look for both in case saved objects are loaded. Version: 1.4.4 [2008-05-08] NEW FEATURES: * Added getNews() and showNews() to the Package class. NEWS files are now detected (first). * Added getConstructorS3(). * The NEWS file does now replace the former HISTORY file of R.oo. * If running R v2.7.0 or new, the first element of vector 'ASCII' is an empty string. This is because ASCII 0x00 cannot be represented as an R string and in R v2.8.0 it will give a warning. Note though that regardless of this, charToInt(intToChar(0)) == 0 is still TRUE. Version: 1.4.3 [2008-03-25] NEW FEATURES: * Added getName() for environment:s. BUG FIXES: * getInternalAddress() would return NA. Version: 1.4.2 [2008-03-06] NEW FEATURES: * Added paper to citation("R.oo"). BUG FIXES: * Regular expression pattern 'a-Z' is illegal on (at least) some locale, e.g. 'C' (where 'A-z' works). The only way to specify the ASCII alphabet is to list all characters explicitly, which we now do in all methods of the package. See the r-devel thread "invalid regular expression '[a-Z]'" on 2008-03-05 for details. Version: 1.4.1 [2008-01-10] BUG FIXES: * Made the registered finalizer calling finalize() more error prone. Version: 1.4.0 [2007-09-17] SIGNIFICANT CHANGES: * Extracted setMethodS3() and related methods from R.oo and put them in a standalone R.methodsS3 package. While doing this, the 'enforceRCC' argument used by setMethodS3() was renamed to 'validators' which now takes an optional list of functions. Any code using argument 'enforceRCC=FALSE' must now use 'validators=NULL'. DEPRECATE AND DEFUNCT: * Removed code that patched R v1.8.0 and before. Version: 1.3.0 [2007-08-29] NEW FEATURES: * Now the startup message when loading the package is generated with packageStartupMessage() so that it can be suppressed. DEPRECATE AND DEFUNCT: * Removed showAndWait() for simpleError, which displayed a TclTk dialog for a generic error. Never used. If someone wants the code, please tell me and I'll forward it. * Removed deprecated trycatch(); use tryCatch() instead. * Removed patched for R v1.8.x and before: stop(), try(). BUG FIXES: * If Object:s are garbage collected after R.oo has been detached, the error 'Error in function (env) : could not find function "finalize"' would be thrown, because the registered finalizer hook tries to call the generic function finalize() in R.oo. We solve this by trying to reload R.oo (and the unload it again). Special care was taken so that Object:s allocated by R.oo itself won't cause an endless loop. Version: 1.2.8 [2007-06-09] SOFTWARE QUALITY: * Removed (incorrect) argument name 'list' from all substitute() calls. DEPRECATE AND DEFUNCT: * Removed already deprecated getData() because there might be a name clash with the 'nlme' package. BUG FIXES: * Queried non-existing object 'error' instead of 'ex' in the exception handling of update() of the Package class. Version: 1.2.7 [2007-04-07] SIGNIFICANT CHANGES: * Removed support for R v2.0.0 and before. DEPRECATE AND DEFUNCT: * Removed reportBug() since it was never completed. Version: 1.2.6 [2007-03-24] NEW FEATURES: * Now ll() uses objectSize() instead of object.size(). It also returns the properties in its "minimal" data type, e.g. the 'objectSize' column contains integers (not characters as before). This makes it possible to utilize subset() on the ll() output. * Added a default method for objectSize(), which is just a wrapper for object.size(). DEPRECATE AND DEFUNCT: * Made trycatch() defunct, i.e. it gives an error suggesting to use tryCatch() instead. Version: 1.2.5 [2007-01-05] BUG FIXES: * getMethods(..., private=FALSE) for class Class would return private methods, and private=TRUE would remove them. It should be the other way around. * getMethods() for Class would sometimes give error message: "Error in result[[k]] : subscript out of bounds". This in turn would cause Rdoc to fail. Version: 1.2.4 [2006-10-03] BUG FIXES: * Since getInternalAddress() coerced the address to an integer, addresses about 2^32 bytes = 4GB got address NA. Now getInternalAddress() and the default hashCode() return a double. Version: 1.2.3 [2006-09-07] SOFTWARE QUALITY: * Added package 'utils' as a package this one depends on. This is required for package without a namespace in the upcoming R v2.4.0 release. DEPRECATE AND DEFUNCT: * Removed deprecated method getClass() for class Object but also BasicObject. These were deprecated on 2002-12-15. Version: 1.2.2 [2006-08-11] NEW FEATURES: * Added support for give modifiers to fields in classes extending the Object class. Currently it is only the "cached" modifier that is recognized. To specify that a field, say, "foo" is "cached", list it as "cached:foo". Fields that are "cached" will be assigned to NULL when clearCache() of the object is called. For convenience there is also a gc() method for all Object:s. See ?gc.Object for an example. SOFTWARE QUALITY: * Made the package smaller by removing the DSC-2003 logo from the R.oo paper, which shrunk from 324kb to 220kb. The rest of the files in the source distribution is about 80kb when gzipped, i.e. still the paper is three times larger than the rest of the package. Version: 1.2.0 [2006-07-14] BUG FIXES: * update(R.oo) would throw an error and the package was detached. Version: 1.1.9 [2006-06-14] NEW FEATURES: * Added method getEnvironment() to class Object, which will return the environment where the Object's members are stored. * Now ll() does not assign variables in the lookup environment, which means it will work with sealed environments too. Version: 1.1.8 [2006-05-30] NEW FEATURES: * Added isBeingCreated() to Class in order to check if the constructor was called to create the static instance or just any instance. * Now the Rdoc tag @allmethods takes an optional argument specifying if private, protected or public methods should be listed. DEPRECATE AND DEFUNCT: * Removed setClassS3() which has been deprecated since 2003(!). Version: 1.1.7 [2006-05-22] NEW FEATURES: * Added argument 'addTimestamp=TRUE' to Rdoc$compile(). This makes it possible to turn of the timestamp, because timestamps makes diff, say the one in Subversion, think there is a real different. BUG FIXES: * Rdoc$compile() did not write the name of the source file in the header (anymore). * The code for automatic formatting of replacement methods generated an error. Version: 1.1.6 [2006-04-03] * This version was commited to CRAN. NEW FEATURES: * Now the Rdoc compiler recognizes replacement functions and creates the correct Rd \usage{} format for these. Version: 1.1.5 [2006-03-28] NEW FEATURES: * Now argument 'properties' of ll() is given by the option "R.oo::ll/properties". If not set when the package is loaded, it is set to a default value. See help(ll) for more details. This was suggested by Tim Beissbarth, German Cancer Research Center. BUG FIXES: * showHistory() for the Package class was calling itself. * Compiling Rdoc comments with invalid keyword tags would generate an internal error. Same for invalid visibility tags etc. Version: 1.1.4 [2006-02-18] NEW FEATURES: * Now the Rdoc compiler also escapes Rd filenames for @see and @seemethod tags. Version: 1.1.3 [2006-02-09] NEW FEATURES: * Added getChangeLog() and showChangeLog() to the Package class. The get- and showHistory(), which are to be made deprecated in the future, are now wrappers for these two methods. * Added Rdoc tag @RdocPackage to generate -package.Rd files. * Now the Rdoc compiler makes sure that the generated Rd files all starts with a letter or a digit. If not, it adds a default prefix (currently "000"). If not, the new R v2.3.0 R CMD check may complaint about missing objects. SOFTWARE QUALITY: * Removed all usage of NULL environments since they are now deprecated in R v2.3.0. * Now '...' is added explicitly to setMethodS3() in all Rd examples. Version: 1.1.2 [2006-01-06] NEW FEATURES: * Added Rd links to classes listed under "Directly known subclasses:". Version: 1.1.1 [2005-11-23] NEW FEATURES: * Added validation of arguments in replacement functions. * Added RCC validation of arguments in 'picky' methods, e.g. $()". BUG FIXES: * The "$<-" function goes through alternatives where to save the new value, e.g. set(), field, static field etc. When a "match" found and the value was assigned, it did not return (except for the set() match), but instead contiued search for the rest. One effect of this was that the new value was always assign to the static field too. The fix make the code run faster too. Thanks Edouard Duchesnay at Service Hospitalier Frdric Joliot, Commissariat l'Energie Atomique, France for spotting this. Version: 1.1.0 [2005-07-18] NEW FEATURES: * Added argument 'replaceNewline' to getDescription() of Package. * Now as.character() of Package reports the title, the license, and the description, but no longer if the package is part of a bundle. The latter was too slow since it had to scan all installed packages. * Now print() of Class passes '...' to getDetails(), that is, now print(Class, private=TRUE) will work too. * Added attachLocally() to the Object class. * Added extend.default(), which can be used to extend any type of object. * Now pure Object:s are also finalized. Before only subclasses defined via extend(, "", ...) was finalized. This was not a big deal, because the finalize():er of the Object class is empty anyway. DOCUMENTATION: * Added a section on "Defining static fields" to the help page of Object. BUG FIXES: * Rdoc$compile() sometimes generated the error "invalid regular expression '\name{[^\}]*}'" (forgot to escape '{' and '}'). Fixed. Thanks Lorenz Wernisch, School of Crystallography, University of London for reporting this. * getDetails() in Class would list private and protected methods as public. * Argument 'enforceRCC' of setMethodS3() was not passed to setGenericS3(). Version: 1.0.5 [2005-06-03] NEW FEATURES: * Now the static load() method in Object asserts that the loaded Object inherits from the class that the static object, which is used to call load(), is of. Thus, Object$load(...) will load all Object:s, whereas MyClass$load(...) will only load objects inheriting from MyClass. * Now an RdocMethod tag will not add keyword 'internal' if the class starts with a lower case, e.g. 'matrix'. * A '@keyword foo' can now be removed with '@keyword -foo'. Order is irrelevant, since @keyword:s are added at the very end. Version: 1.0.4 [2005-05-02] NEW FEATURES: * Added getDevelUrl() to the Package class. Version: 1.0.3 [2005-02-28] NEW FEATURES: * Argument 'appendVarArgs' of setMethodS3() is now ignored if a replacement function (named "nnn<-") is defined. Version: 1.0.2 [2005-02-25] BUG FIXES: * setMethodS3(..., abstract=TRUE) generated warnings of type "using .GlobalEnv instead of package:". Found a way (ad hoc?) to get rid of them. See source code for details. This should remove similar warnings from packages loading R.oo. Version: 1.0.1 [2005-02-20] NEW FEATURES: * Package now outputs "See ?R.oo for help" when loaded. * setMethodS3(..., abstract=TRUE) now defines abstract methods with '...' as the only argument(s). SOFTWARE QUALITY: * Now using three-digit version numbers, e.g. a.b.c where a,b,c in 0,1,...,9. 'a' is updated for major updates, 'b' for minor updates and 'c' is for minor revisions. * Removed require(methods) for R v2.0.0 and above. Version: 1.00 [2005-02-15] SIGNIFICANT CHANGES: * Moved to CRAN. Version: 0.70 [2005-02-15] NEW FEATURES: * Added appendVarArgs=TRUE to setMethodS3(), which specifies that '...' should be added, if missing. * Add argument '...' to all methods to make it even more consistent with any generic function. This is also done for a few methods in the R base packages. SOFTWARE QUALITY: * Package now passes R CMD check on R v2.1.0 devel without warnings. Version: 0.69 [2005-02-11] NEW FEATURES: * Renamed get- & showDescription() to get- & showDescriptionFile() and added getDescription() to get the 'Description' field of DESCRIPTION. DOCUMENTATION: * Added an example to setMethodS3() that is not using Object(). SOFTWARE QUALITY: * Package now passes R CMD check on R v2.1.0 devel also. Had do modify a few lines of code to meet the new stricter regular expression patterns. DEPRECATE AND DEFUNCT: * Moving away from trycatch() in favor of tryCatch(). trycatch() remains for a while, but will be made deprecated in future version and later probably defunct. Version: 0.68 [2005-02-09] NEW FEATURES: * By default, now Rdoc$compile() runs Rdoc$check() at the end. * Rdoc: Added a first simple test for undefined top-level tags in the generated Rd code. Utilizes tools::Rd_parse(), which might be renamed etc. according to its help page. * Tag-variables such as @author now search for value in options() too. Version: 0.67 [2004-10-23] BUG FIXES: * getRdMethods() in Class returned empty \tabular{rll}{} if no methods exist, but this gives an error in R CMD Rdconv. Version: 0.66 [2004-10-21] NEW FEATURES: * When using setMethodS3(..., abstract=TRUE) in a package that uses lazy loading, which all new packages do by default, warnings like "using .GlobalEnv instead of package:utils" will be generated the first time the abstract method is accessed. This is because eval() is used to create the abstract method; we are looking for a way that will not generate these warnings, although they are not serious. Example: library(R.colors); print(getColorSpace.Color) * Added getEnvironment() to the Package class. DOCUMENTATION: * Added help to more methods. SOFTWARE QUALITY: * Made the package compatible with R v2.0.0 too. Had to move example file 'Exception.R' from data/ to inst/misc/ and update the help example for Rdoc. Update the example of unload() for the Package class to load the 'boot' package instead of obsolete 'ts'. BUG FIXES: * Rdoc tags was not be parsed by the Rdoc compiler for deprecated methods. Version: 0.65 [2004-06-27] NEW FEATURES: * Substantially improved the loading of all my packages. The Package() constructor, which was called when a new package was loaded, was slow unnecessarily slow because of an internal call to installed.packages(). * Added known generic function 'as.vector()'. DOCUMENTATION: * Added documentation to many methods. BUG FIXES: * getInternalAddress() for class Object was "too" hard coded making it not work correctly on for instance Suse Linux. Assumed fixed positions of the hexadecimal address of the environment. Now a gsub() with a backreference is used. Should be more safe. Version: 0.64 [2004-04-21] BUG FIXES: * Fixed deprecated warning about package.description() that occured R v1.9.0 such that the code still works for older versions of R. This was needed for the Package class. Version: 0.63 [2004-03-03] NEW FEATURES: * Updated trycatch() (and the Exception class) to work with R v1.8.1. If running R v1.8.1, then tryCatch() is used internally. For R v1.7.1 and before the old trycatch() is used, which will be made deprecated later on. Added a throw() for the error class too for rethrowing errors. * Update the Rdoc compiler to generate correct \name and \alias Rd tags. DEPRECATE AND DEFUNCT: * To anyone using setClassS3(), please use setConstructorS3() instead; setClassS3() is deprecated and will be phased out soon! BUG FIXES: * Package class - from R v1.8.1 we noted that R CMD check made installed.packages() return multiple matches of the same package. This might have been a problem before too, but R CMD check never complained. Version: 0.62 [2003-12-31] NEW FEATURES: * Added showDescription(), getHistory(), showHistory(), getHowToCite(), and showHowToCite() to the Package class. DOCUMENTATION: * Added an "about" section in the documentation. BUG FIXES: * For some Rdoc types the \keyword{} statement was placed on the same line as the previous Rd statement. This sometimes generated cluttered Rd index files. Version: 0.61 [2003-12-16] NEW FEATURES: * Package: update() does now also reload the updated package by default. * Exception: Now the throw() method includes the complete stacktrace too when generating a error signal. In other words, the user will automatically see the stacktrace of the error if the error is not caught. Same for stop(). * Rdoc: Added the tag @RdocDocumentation for general documentation. Version: 0.60 [2003-10-28] NEW FEATURES: * Added argument 'compress=TRUE' to Object's save() to make it more explicit that compression is supported too. Compression is supported by all R systems since R v1.5.0. See ?capabilities. * Now Rdoc tries to create the 'man/' (destPath) directory if missing. BUG FIXES: * "$<-.Class" was incorrectly returning the static object instead of itself. * The way "$.Object", "$<-.Object", "$.Class" and "$<-.Class" were checking if an attribute exists was not done correctly. Now they get the list of names of the attributes and compares to that. * If Object's save() was called with a connection it would still interpret it as a filename. Version: 0.59 [2003-09-19] NEW FEATURES: * The Rdoc compile does no long list deprecated methods by default. BUG FIXES: * getMethods() was not sensitive to 'deprecated=TRUE'. Version: 0.58 [2003-09-03] BUG FIXES: * dimension() would not always be found if ll() was called on another package, e.g. ll(envir="methods"). Version: 0.57 [2003-07-18] NEW FEATURES: * Added Rdoc comments saying that the constructor function must be able to be called without any arguments! Thanks Nathan Whitehouse at Baylor College of Medicine, Houston for making me aware of the missing documentation. * Rdoc$compile() generated an InternalException when a class was not found saying "Not a class". Now it throws an RdocException and is more specific saying that the class does not exists. Updated the Rdoc comments saying pointing out that the classes and methods have to be loaded before calling Rdoc$compile(). Again, thanks Nathan. Version: 0.56 [2003-07-07] BUG FIXES: * Forgot to escape '%' in \usage{} in Rdoc, which lead to unbalanced curly brackets when R CMD check * ran. Version: 0.55 [2003-05-14] SOfTWARE QUALITY: * Slight improvement in the internal generation of get and set, which is done by using substr()<-. Version: 0.54 [2003-05-03] BUG FIXES: * Now the Rdoc compiler generates the correct \synopsis and \usage pairs. Before they were added either or, but that was a mistake by me. \synopsis should be *added* whenever the the \usage statement is not complete. * update() of Package did not work. Did by mistake add a package argument to update.packages() too. That argument is only used in install.packages though. Version: 0.54 [2003-04-29] NEW FEATURES: * Added argument force=FALSE to update() in the Package class. Version: 0.53 [2003-04-28] NEW FEATURES: * R.oo: The Rdoc compiler was further improved and made more flexible. I am aiming to make it possible for the user to define their own simple tags. * All Rd files are now making use of \link[pkg:name]{label} for refering to methods not named according to the label. This is for instance the case with all class specific methods. More over, all Rd files for classes has \keyword{classes} and the \usage{} is used where it works and otherwise \synopsis{} is used (as recommended on the R help pages). All this is automatically taken care of by the Rdoc compiler. Version: 0.52 [2003-04-23] NEW FEATURES: * Added getDocPath(), update() and unload() to the Package class. With update() it is now possible to update a package or its bundle by just typing update(R.oo). * Added showAndAsk() to the Exception. It will, if tcltk is installed, display a dialog box with the error message. If tcltk is not installed, the message will be printed on the command line and a prompt requesting the user to press enter will be shown. showAndAsk() will give an error if run in a non-interactive mode. DOCUMENTATION: * Added almost all missing help pages, i.e. I wrote up *a lot* of Rd files. More help is still though for the Rdoc class, which compiles Rdoc comments in the source files into Rd files. However, if you want to use Rdoc$compile() already now, see the source files for plenty of examples and just run Rdoc$compile() in the same directory. * Spell correction: "c.f." -> "cf." BUG FIXES: * getStaticInstance() of class Class did not recover correctly if static instance was missing. Version: 0.51 [2003-01-17] NEW FEATURES: * Added getUrl(), getMaintainer(), getAuthor(), getTitle(), getLicense(), and getBundle(). Made the output from as.character() more informative. * Added a caching feature of "$"() to speed up access to members. The first time a member (field, virtual field, static field, method etc) is accessed it is done by looking it up one at the time and taking the first existing one (in a predefined order). The second time the same field is accessed, the name is remembered and "$"() access the right member directly. If this works out, "$<-"() will get a similar cache. Version: 0.50 [2002-12-20] NEW FEATURES: * Updated try(), which a slight modification to the base::try() for improved exception handling, to have its own internal restart() function (just like base::try()), because restart() has been made deprecated from R v1.6.0. This is how the try() in the base package does it. Version: 0.49 [2002-12-15] NEW FEATURES: * Added the finalizer method finalize(), which any subclass can override and that will be called by the garbage collector just before an object is about to be removed from the memory. * Added default function for equals(). * Added argument 'overwrite=TRUE' and 'conflict=c("error", "warning", "quiet")' to setMethodS3(). * Now extend() in class Object removes duplicated class attributes. * Now it is possible to create methods (also generic) with one (or several) . (period) as a prefix of the name. Such a method should be considered private in the same manner as fields with a period are private. * Added argument 'path=NULL' to save() and load() in class Object. It will remove the need using paste() etc. * For ll(), replaced "getClass" with "data.class" in the 'properties' argument. Since 'data.class' is almost the same as 'mode', mode was also removed. * SPELL CHECK: "...name name..." in one of setGenericS3()'s error messages. Thanks Gordon Smyth, WEHI, Melbourne, for the comment. DEPRECATE AND DEFUNCT: * COMPATIBILITY FIX: Removed default getClass(), because it was not would not work with the methods package. * Removed deprecated and obsolete is.interface(). BUG FIXES: * The Rdoc class listed too many methods in the "Methods inherited" section. Version: 0.48 [2002-11-23] SIGNIFICANT CHANGES: * Renamed setClassS3() to setConstructorS3(), since this is what it is actually doing. Keeping setClassS3() for backward compatibility but made it deprecated. NEW FEATURES: * Updated setGenericS3() to *always* create generic functions with no arguments except "..." to follow the RCC. * Now $() and $<-() in class Object and Class also gets and sets attribute values too, respectively. * Added getInstanciationTime(), which returns the time point when the object was created. * Updated getField() of class Class to call generic method getField() and not getField.Object(). BUG FIXES: * $<-() of class Class did not work for static fields. * getDetails() would not add a newline after the class name if the class did not have a superclass, i.e. for root class Object. Version: 0.47 [2002-10-23] SIGNIFICANT CHANGES: * Package named Rx.oo as long as it is a beta package. NEW FEATURES: * Decided to declare all Rd files for class methods as \keyword{internal} which means that they will not show up in the HTML table of contents. Only classes and stand-alone functions should be there. * The package now contains the public classes Object, Exception, RccViolationException. It also contains the internal classes Class, Package, and Rdoc. The class Class is essential, but Package and Rdoc are just utility classes containing useful static methods for development purposes etc. * The idea behind the Rx.oo package are the same as behind "old" R.oo, but internally environments are used for emulating references, whereas in R.oo a global so called object space was used. However, API-wise not much have been changed. * FYI: R.oo was first published in March 2001 and has undergone several updates, tests and bug fixes. Experience from that project has been brought into this package. Version: 0.46 [2002-10-14] NEW FEATURES: * Added trial versions of extend() of class Object and class Reference. Also added trial version of superMethodS3() to replace faulty NextMethod(). * Added as.Reference() to class Object and class Reference and made the constructor accept Reference objects by just returning them again. Before an exception was thrown. * Added argument 'showDeprecated=FALSE' to classinfo() in class Class. This has the effected that when typing a name of a class and pressing enter at the prompt to display class information, deprecated method are *not* shown by default. * Added the class Class for dealing with static methods, static fields, accessing methods and fields of classes, generating class information etc. Since the handling of static methods and fields are now dealt by a specific class it means that the access of non-static methods and fields, which is done by the Object class, should now be a bit faster due to less overhead. Version: 0.45 [2002-09-23] SOFTWARE QUALITY: * Internal updates: Made .ObjectSpace.count an internal variable of the .ObjectSpace environment, meaning that it is harder to delete it by mistake. * Added internal function getPackagePosition(). BUG FIXES: * relibrary(R.oo) was reloading the .RObjectSpace file too, which is not a wanted feature. * setGenericS3() would sometimes believe that a non-function object actually was a function and tried to set it as a generic function, which resulted in an error exception. * createClassS3() would throw an error exception if there where two packages *loaded* such the name of the first one was the same as the beginning of the name of the second one, e.g. R.oo and R.oo2. Version: 0.44 [2002-09-12] NEW FEATURES: * Added the functions Q() and Quit() for quiting with the option to save the ObjectSpace also. * Added isGenericS3() and isGenericS4(). * If trying to use delete() to remove a non-existing variable or Object now only a warning() is given, before an exception was thrown which was quite annoying. delete() works as rm() plus it also deletes objects in ObjectSpace, which means that all calls to rm() can be replaced by calls to delete(). * Added the static methods ObjectSpace$save() and ObjectSpace$load() to save and load an image of the ObjectSpace. SOFTWARE QUALITY: * Package passes the R CMD check with 5 warnings. BUG FIXES: * "[[" in class Reference did not work for numeric indices, e.g. ref[[5]]. Strange that I haven't noticed this before. Version: 0.43 [2002-07-09] NEW FEATURES: * Now "$" and "[[" also searches for fields in attributes(). This is a first step towards making use of structure() and friends instead. I've been thinking about this from the very beginning, but newer done it. The plan is to move away from the internal list() and accept any [R] object as the core object. This will also be more consistent with the R.methods/S4 strategy. Version: 0.42 [2002-05-31] SOFTWARE QUALITY: * Removed forgotten debug messages in setGenericS3(). Version: 0.41 [2002-05-26] NEW FEATURES: * Moved about() from R.base to this package and removed old description(). * Now the package reports its name, version and date if it was succesfully loaded. * Minimized the number of warnings when loading packages. * Added argument dontWarn to setGenericS3(), which by default is set so no warnings are produced for renamed methods in the base package. * Copied packagePaths() from package R.base to package R.oo, since it is required in R.oo and we do not want R.oo to depend on R.base. SOFTWARE QUALITY: * Package now passes the R CMD check with 5 warnings. Version: 0.40 [2002-05-05] NEW FEATURES: * The classes Throwable and Exception have been transfer to here from the R.lang package. With the trycatch() they are really useful. * throw() and trycatch() are now available in both R.base and R.oo. * Added createClassS3() and internal variable .NewClassesNotCreated. * "$.Object"() and "$.Reference"() now returns NULL if a field/method etc is not found! Before it an error was thrown. BUG FIXES: * trycatch() didn't with methods created by setMethodS3(). This was due to I did (internally): object <- try(eval(substitute(object, envir=envir))) instead of: object <- try(eval(substitute(object), envir=envir)) Hmm, a tricky typo to find since it worked elsewhere. * Tiny bug fix in message of throw() clause in "$"(). Version: 0.39 [2002-04-21] NEW FEATURES: * Added a trial version of "[.Reference". Currently, it does not support the get() idea as described below. Maybe a "[<-.Reference" will be added later. * Added trial version of a new feature for Object/Reference fields. Now, if a field does not exists and there is no method with the same name, then, if a method named "get()" exists, the value of get() is returned. This way one can have fields that are generated "on the fly" to save memory etc. This new feature required that "[[".Object was modified (actually created). Example: For an object 'obj' one can get its class by either the classical getClass(obj) or by the new feature obj$Class. If this new feature are successful, I will also look at implementing a corresponding set() support. BUG FIXES: * setGenericS3() gave an error if one tried to set a generic function with the same name as an [R] object that was *not* a function. A simple add of argument mode="function" to the exists() check fixed this. Version: 0.38 [2002-04-02] BUG FIXES: * clone() in class Reference did not work properly; it gave the wrong internal reference names, which in turn would generate errors such as 'Error in get(x, envir, mode, inherits) : variable "Reference.METHODS" was not found' when one tried object$foo() instead of foo(object). Now it works again. Version: 0.37 [2002-03-30] NEW FEATURES: * IMPROVEMENT: Since library(methods) might be loaded after library(R.oo) the function extends() breaks down. Worked this out a little bit by detaching and reloading R.oo in function createClass() if it is detected that extends() has changed. * IMPROVEMENT: Forces extends <- function(...) UseMethod("extends") The reason for doing this is that if we have anything but '...' that argument might be matched by an attribute. Not good! Version: 0.36 [2002-03-06] NEW FEATURES: * Added names() to the class Reference. BUG FIXES: * When running the OO garbage collector, calling a finalize() that used the method super() failed with an exception. Internally, the class attributes of the freeable references were lost. * extends() and implements() in Rdoc sometime gave errors. Version: 0.35 [2002-03-03] NEW FEATURES: * Added the methods attach() and detach() which works both on Object's and Reference's. Version: 0.34 [2002-02-27] NEW FEATURES: * Renamed the (still) internal class .Reference to Reference. * Added the setInterfaceS3() method. Makes it easier to define interfaces. * Static method buildClass() in class Rdoc now also creates a list of methods and saves the result in the file .methods.Rdoc, which can be included in the Rdoc comments by @include ".methods.Rdoc". Hopefully, this will mean that the list of methods in the help files will be more up to date. DOCUMENTATION: * Update the examples in the help files to make use of the new setClassS3, setInterfaceS3, and setMethodS3. DEPRECATE AND DEFUNCT: * Declared more internal methods as "private". BUG FIXES: * Internal scanForMethods() did not make a difference of functions and non-functions, since it basically only looked at the name. For instance would CONST.Foo <- 256 be considered a method in previous versions. This was not a big deal, but it is correct now. Version: 0.33 [2002-02-26] BUG FIXES: * buildClass() in class Rdoc did not work due to the new package "methods". Corrected with one line of code. Version: 0.32 [2002-01-29] NEW FEATURES: * Added the arguments 'trial', 'deprecated', 'static', 'protection', and 'abstract' to setMethodS3 (and to some extend also to setClassS3). SOFTWARE QUALITY: * Started to make more use of setClassS3 and setMethodS3 internally. Version: 0.31 [2002-01-21] NEW FEATURES: * Added createGeneric() to make life easier for class developers. Version: 0.30 [2002-01-18] NEW FEATURES: * Added the (optional) argument 'path=NULL' to loadObject(). Version: 0.29 [2002-01-13] NEW FEATURES: * When obj$foo is evaluated first the field "foo" is searched for and secondly the class method "foo" is searched for. Previously, methods had higher priority than fields. BUG FIXES: * Bug fix in gco(). [R] v1.4.0 made it crash. Version: 0.28 [2002-01-09] NEW FEATURES: * Made R.oo compatible with new [R] v1.4.0 and the new package "methods". Version: 0.27 [2002-01-02] NEW FEATURES: * Internally renamed the methods, e.g. new(), getClass() and extends(), that conflicted with methods defined in the new [R] package "methods". Hopefully, these changes makes "methods" run when R.classes is loaded. * Starting to seperate Object methods and .Reference methods. Eventually maybe R.oo Object's could work very similar to "methods" object where .Reference is just an add-on to make the Object's referensable. Version: 0.26 [2001-12-29] NEW FEATURES: * First steps to make R.classes work *together* with the new "methods" package. These fixes made R.classes work when "methods" was loaded, but "methods" didn't work when R.classes was loaded. * This version was never released to the public. Version: 0.25 [2001-08-09] NEW FEATURES: * Added super(), which provides a simple way to access methods in the super class. Version: 0.24 [2001-08-07] NEW FEATURES: * Added support for 'this[[field]]' and 'this[[field]] <- value' when this is a reference. Another step away from get- and putObject(). * Introduced the modifers() function instead of old attr(...). DOCUMENTATION: * Updated many of the out-of-date examples in the help pages. PERFORMANCE: * Improved the speed of the garbage collector and it can now also run until no more objects are deleted. Version: 0.23 [2001-08-04] PERFORMANCE: * Major break-through in memory and speed efficiency. A lot of expressions are now evaluated directly in the object space environment, which means that no copying between the object space and the current environment is needed. This improvement makes the need for getObject() and setObject() much less of interest and they will probably be made obsolete or private, which is another step towards a more user friendly oo core. Version: 0.22 [2001-08-03] NEW FEATURES: * Improved the error and warning messages for false references. * delete() can now remove any number of any kind of objects, i.e. it is now more consistent to rm(). * Created this HISTORY file. Everything below is recreated from from this date and is therefore not complete. Version: 0.21 [2001-07-29] * ... Version: 0.20 [2001-07-27] * ... Version: 0.19 [2001-07-06] SIGNIFICANT CHANGES: * Renamed the package to R.oo (from com.braju.oo). Version: 0.15 [2001-05-06] * ... Version: 0.14 [2001-04-30] BUG FIXES: * Bug fixes in garbage collection algorithm. Version: 0.13 [2001-04-15] NEW FEATURES: * Now it is possible to add new fields to an object. Even though this is not true oo-style, it certainly is helpful. Also, fields (not methods) can be assign new values using regular style 'foo$value <- bar', where 'foo' is either the object itself or more common the reference to the object. Version: 0.12 [2001-04-13] SIGNIFICANT CHANGES: * Now objects "physically" contains only the fields. The methods are looked up in an internal static class. Also, by writing the name of a class, information about the class is listed. Version: 0.11 [2001-04-11] * ... Version: 0.10 [2001-04-04] NEW FEATURES: * Support for static classes. Static methods in static classes can be called by 'Foo$myStaticMethod()'. For class developers: a static class is created by 'new(Foo(), static=TRUE)' which will not return a reference. A static class is only living on object space. Version: 0.9 [2001-04-02] NEW FEATURES: * Support for static methods. A static method is declared as 'myStatic = METHOD+STATIC' and implemented as 'myStatic.myClass <- function(arg1, arg2, ...)'. Note that there is no 'this' argument to static classes. Version: 0.8 [2001-04-01] SIGNIFICANT CHANGES: * Totally changed the declaration of methods in a class. Previously, one wrote 'myFcn = function() NULL' and now one writes 'myFcn = METHOD' where 'METHOD' is predefined constant. This allows fields in a class to also contain functions, i.e. 'myField = sqrt(x)', which was not possible in previous versions. Version: 0.5 [2001-03-27] SIGNIFICANT CHANGES: * This is the first public release. Version: 0.2 [2001-03-16] * ... Version: 0.1 [2001-03-12] * The very first version. Version: 0.0 [2001-03-10] * The very first attempt to create an object-oriented core for [R]. At this moment I was a beginner in [R]. R.oo/R/0000755000176200001440000000000013701657463011304 5ustar liggesusersR.oo/R/classRepresentation.misc.R0000644000176200001440000001124113327450457016406 0ustar liggesusers###########################################################################/** # @set "class=classRepresentation" # # @RdocMethod getKnownSubclasses # @keyword internal # # @title "Gets the known subclasses" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # @keyword documentation #*/########################################################################### setMethodS3("getKnownSubclasses", "classRepresentation", function(this, ...) { this@subclasses$signature }) ###########################################################################/** # @RdocMethod getSuperclasses # @keyword internal # # @title "Gets the superclasses" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # @keyword documentation #*/########################################################################### setMethodS3("getSuperclasses", "classRepresentation", function(this, ...) { superClasses <- NULL for (contain in attr(this, "contains")$vector) { superClasses <- c(superClasses, contain@superClass) } superClasses }) ###########################################################################/** # @RdocMethod getRdHierarchy # @keyword internal # # @title "Gets the class hierarchy in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # @keyword documentation #*/########################################################################### setMethodS3("getRdHierarchy", "classRepresentation", function(this, ...) { package <- "???" name <- this@className superClasses <- getSuperclasses(this) s <- paste("Package: ", package, "\\cr\n") s <- paste(s, "\\bold{Class ", name, "}\\cr\n\n", sep="") indent <- "" for (extend in rev(superClasses)) { link <- sapply(extend, FUN=function(name) { link <- name if (isClass(name)) { cls <- getClass(name) link <- paste("\\link{", link ,"}", sep="") } paste("\\code{", link ,"}", sep="") }) if (indent == "") { s <- paste(s, link, "\\cr\n", sep="") indent <- "~~" } else { s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n", sep="") indent <- paste(indent, "~~~~~", sep="") } s <- paste(s, "\\code{", indent, "|}\\cr\n", sep="") } link <- paste("\\code{", name, "}", sep="") s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n\n", sep="") s }, private=TRUE) ###########################################################################/** # @RdocMethod getRdDeclaration # @keyword internal # # @title "Gets the class declaration in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # @keyword documentation #*/########################################################################### setMethodS3("getRdDeclaration", "classRepresentation", function(this, ...) { name <- this$className s <- "public"; # visibility(this) s <- paste(s, "class") s <- paste(s, " \\bold{", name, "}\\cr\n", sep="") links <- getSuperclasses(this) if (length(links) > 0) { name <- links[1] link <- name # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(name, mode="function")) { cls <- get(name, mode="function") if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) link <- paste("\\link{", link ,"}", sep="") else link <- paste("\\link[", pkg, "]{", link ,"}", sep="") if (isAbstract(cls)) link <- paste("\\emph{", link, "}", sep="") } } paste("\\code{", link ,"}", sep="") s <- paste(s, "extends ", link, "\\cr\n", sep="") } s }, private=TRUE) ###########################################################################/** # @RdocMethod getRdMethods # @keyword internal # # @title "Gets the methods in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{visibility}{-} # \item{trial}{-} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # @keyword documentation #*/########################################################################### setMethodS3("getRdMethods", "classRepresentation", function(class, visibility=c("public", "protected", "private"), trial=FALSE, ...) { src <- NULL src <- paste(src, "\\emph{No methods defined}.\n", sep="") src }, private=TRUE) R.oo/R/error.throw.R0000644000176200001440000000140713327450457013722 0ustar liggesusers###########################################################################/** # @set "class=error" # @RdocMethod throw # # @title "Throws (rethrows) an object of class 'error'" # # \description{ # Rethrows an 'error' object. The 'error' class was introduced in R v1.8.1 # with the new error handling mechanisms. # } # # @synopsis # # \arguments{ # \item{error}{An object or class 'error'.} # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # See the \code{tryCatch()} method etc. # See the @see "Exception" class for more detailed information. # } # # \keyword{error} #*/########################################################################### setMethodS3("throw", "error", function(error, ...) { base::stop(error) }) R.oo/R/999.package.R0000644000176200001440000000513213563564136013354 0ustar liggesusers#########################################################################/** # @RdocPackage R.oo # # \description{ # @eval "getDescription(R.oo)" # # Please note that the Rdoc syntax/grammar used to convert Rdoc comments # in code into Rd files is not strictly defined and is modified by the # need of the author. Ideally, there will be a well defined Rdoc language # one day. # } # # \section{Installation and updates}{ # To install this package do\cr # # \code{install.packages("R.oo")} # } # # \section{Dependencies and other requirements}{ # This package requires a standard \R installation and # the \pkg{R.methodsS3} package. # } # # \section{To get started}{ # To get started,It is very useful to understand that: # \enumerate{ # \item The @see "R.methodsS3::setMethodS3"() function, which is # defined in the \pkg{R.methodsS3} package (used to be part of # \pkg{R.oo}), is nothing but a conveniency wrapper for setting # up S3 methods, and automatically create an S3 generic # function, if missing. For more information, see the help of # \pkg{R.methodsS3}. # \item The @see "Object" class is a top-level "root" class # that provides support for \emph{reference variables}. # Any class inheriting from this class supports # reference variables. # \item The @see "Object" class is basically a wrapper around an # @environment, which some additional accessors etc. It is the # environment data type that provides the "emulation" of # reference variables - the Object class structure makes # it easier to extends this class and adds some level of coding # protection. The Object class features is not intended for # referencing individual elements of basic \R data types, # but rather for the whole variable of such. # For instance, you can reassign a whole matrix \code{X} part of # the object this way, but you cannot reassign \code{X[1,1]} # without creating a completely new copy. # } # } # # \section{Further readings}{ # For a detailed introduction to the package see [1] (part of the # package distribution). # } # # \section{How to cite this package}{ # Whenever using this package, please cite [1] as\cr # # @howtocite "R.oo" # } # # @author # # \section{License}{ # The releases of this package is licensed under # LGPL version 2.1 or newer. # } # # \references{ # [1] @include "../incl/BengtssonH_2003.bib.Rdoc" \cr # } # # \seealso{ # People interested in \pkg{R.oo} may also be interested in # packages \pkg{proto} and \pkg{mutatr}. # } #*/######################################################################### R.oo/R/zzz.R0000644000176200001440000000174113327450457012265 0ustar liggesusers## covr: skip=all # Detach the 'R.oo' attached in file 030.ObjectClassFunctions.R if (is.element("R.oo", search())) detach("R.oo") .onUnload <- function(libpath) { ## message("R.oo::.onUnload()") # Force finalize() on Object:s base::gc() } # .onUnload() .onLoad <- function(libname, pkgname) { ns <- getNamespace(pkgname) ## Doing assign(pkgname, Package(pkgname), envir=ns) seems to ## introduce potential cyclic loading of the R.oo namespace. ## My best guess is that it has to do with garbage collection. ## Because of this, we use a "delayed" assignment. /HB 2013-10-10 delayedAssign(pkgname, Package("R.oo"), eval.env=ns, assign.env=ns) # Create getCall() generic function, iff missing (R < 2.14.0) if (!exists("getCall", mode="function")) { assign("getCall", function(...) UseMethod("getCall"), envir=ns) } } # .onLoad() .onAttach <- function(libname, pkgname) { pkg <- get(pkgname, envir=getNamespace(pkgname)) startupMessage(pkg) } # .onAttach() R.oo/R/Interface.R0000644000176200001440000001075413563564136013336 0ustar liggesusers###########################################################################/** # @RdocClass Interface # # @title "The Interface class" # # \description{ # @classhierarchy # # This class represents a special set of classes whose purpose is to # provide methods (but not fields) shared by multiple different classes. # } # # @synopsis # # \arguments{ # \item{core}{The core value.} # \item{...}{Not used.} # } # # \section{Methods}{ # @allmethods "public" # } # # @author # @keyword internal #*/########################################################################### setConstructorS3("Interface", function(core=NA, ...) { this <- core class(this) <- "Interface" this }, private=TRUE) ###########################################################################/** # @RdocMethod extend # # @title "Extends another Interface class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...className}{The name of new interface.} # \item{...}{Named values representing the fields of the new instance.} # } # # \value{ # Returns an Interface of class \code{className}. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("extend", "Interface", function(this, ...className, ...) { class(this) <- unique(c(...className, class(this))) this }) ###########################################################################/** # @RdocMethod uses # @alias uses # @alias uses.character # # @title "Specifies that an object uses this Interface" # # \description{ # @get "title". # } # # @synopsis # # \value{ # Returns a @character @vector of class names of Interface:s. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("uses", "Interface", function(this, ...) { res <- setdiff(class(this), "Interface") if (length(list(...)) > 0) { res <- c(list(res), list(uses(...))) # Order interfaces/classes names <- sort(unique(unlist(res, use.names=FALSE))) idxs <- integer(length(names)) names(idxs) <- names for (kk in seq_along(res)) { for (name in res[[kk]]) { idxs[name] <- kk } } for (kk in seq_along(res)) { keep <- (idxs[res[[kk]]] == kk) res[[kk]] <- res[[kk]][keep] } res <- unlist(res, use.names=FALSE) } res }) setMethodS3("uses", "character", function(className, ...) { clazz <- Class$forName(className) obj <- newInstance(clazz) uses(obj, ...) }) ###########################################################################/** # @RdocMethod as.character # # @title "Gets a character string representing the Interface" # # \description{ # @get "title". # } # # @synopsis # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("as.character", "Interface", function(x, ...) { # To please R CMD check this <- x # Check if there are class "after" this one pos <- which("Interface" == class(this)) isLast <- (pos == length(class(this))) if (isLast) { s <- paste(class(this), collapse=", ") } else { s <- NextMethod() } s }, private=TRUE) ###########################################################################/** # @RdocMethod print # # @title "Prints an Interface" # # \description{ # For all objects of class @see "Interface", this method will print the # value of \code{as.character()} of the object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("print", "Interface", function(x, ...) { # To please R CMD check this <- x print(as.character(this), ...) }) ###########################################################################/** # @RdocMethod getFields # # @title "Returns NULL" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Ignored.} # } # # \value{ # Always returns @NULL. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getFields", "Interface", function(...) { NULL }, private=TRUE) R.oo/R/getName.environment.R0000644000176200001440000000216013327450457015347 0ustar liggesusers###########################################################################/** # @class "environment" # @RdocMethod getName # # @title "Gets the name of an environment" # # \description{ # @get "title", e.g. \code{"R_GlobalEnv"} or \code{"0x01ddd060"}. # } # # @synopsis # # \arguments{ # \item{env}{An @environment.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # name <- getName(globalenv()) # print(name) # stopifnot(identical(name, "R_GlobalEnv")) # # getName(new.env()) # } # # @author # # \seealso{ # \code{\link[base:environment]{environmentName}()}. # } # # \keyword{programming} #*/########################################################################### setMethodS3("getName", "environment", function(env, ...) { # base::environmentName() was added to R v2.5.0 if (exists("environmentName", mode="function")) { name <- environmentName(env) } else { name <- "" } if (name == "") { name <- capture.output(print.default(env)) name <- name[1]; # Just in case name <- gsub("[<]*environment:[ ]*([^>]*)[>]", "\\1", name) } name }) R.oo/R/Rdoc.R0000644000176200001440000025746513621422621012324 0ustar liggesusers##########################################################################/** # @RdocClass Rdoc # # @title "Class for converting Rdoc comments to Rd files" # # \description{ # @classhierarchy # # @get "title". # } # # @synopsis # # \section{Fields and Methods}{ # @allmethods # } # # @author # # \examples{\dontrun{@include "../incl/Rdoc.Rex"}} # # \references{ # R developers, # \emph{Guidelines for Rd files}, # \url{https://developer.r-project.org/Rds.html}, # 2003 # } # # @keyword documentation #*/########################################################################### setConstructorS3("Rdoc", function() { extend(Object(), "Rdoc", .START = paste(sep="", "/", "**"), # To hide it from itself!!! .STOP = paste(sep="", "*", "/"), # - " - .nameFormat = "method.class", .manPath = "../man/", package = NULL, source = NULL ) }) ###########################################################################/** # @RdocMethod getNameFormat # # @title "Gets the current name format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seemethod "setNameFormat" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getNameFormat", "Rdoc", function(static, ...) { Rdoc$.nameFormat }, static=TRUE) ###########################################################################/** # @RdocMethod setNameFormat # # @title "Sets the current name format" # # \description{ # @get "title". # Throws a @see "RccViolationException" if an unknown format is requested. # } # # @synopsis # # \arguments{ # \item{nameFormat}{ # If \code{"method.class"}, help files for methods belonging to classes are # named .. # If \code{"class.method"}, help files for methods belonging to classes are # named .. # These are currently the only name formats supported. # } # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seemethod "getNameFormat" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("setNameFormat", "Rdoc", function(static, nameFormat, ...) { if (nameFormat == "class.method") { } else if (nameFormat == "method.class") { } else { throw(RdocException("Unknown name format: ", nameFormat)) } Rdoc$.nameFormat <- nameFormat }, static=TRUE) ###########################################################################/** # @RdocMethod getKeywords # # @title "Gets the keywords defined in R with descriptions" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seemethod "setManPath" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getKeywords", "Rdoc", function(this, fullInfo=FALSE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Locate the KEYWORDS.db file # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - path <- Sys.getenv("R_DOC_DIR") if (is.null(path) || nchar(path) == 0) { # Backward compatibility path <- file.path(Sys.getenv("R_HOME"), "doc") tryCatch({ path <- R.home("doc") }, error = function(ex) {}) if (!file.exists(path)) { throw("Cannot determine the R doc directory. R_DOC_DIR was not set and R_HOME/doc/ does not exist: ", path) } } pathname <- file.path(path, "KEYWORDS.db") if (!file.exists(pathname)) { throw("The KEYWORDS.db file was not found: ", pathname) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Read keywords # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - keywords <- readLines(pathname, warn=FALSE) keywords <- strsplit(keywords, ":") names <- lapply(keywords, FUN=function(x) x[1]) names <- unlist(names) names <- gsub("[[:space:]]+$", "", gsub("^[[:space:]]+", "", names)) desc <- lapply(keywords, FUN=function(x) x[2]) desc <- unlist(desc) desc <- gsub("[[:space:]]+$", "", gsub("^[[:space:]]+", "", desc)) keywords <- strsplit(names, "\\|") len <- unlist(lapply(keywords, FUN=length)) keywords <- unlist(lapply(keywords, FUN=function(x) x[length(x)])) keywords <- keywords[len > 1] desc <- desc[len > 1] names(keywords) <- desc keywords }, static=TRUE) ###########################################################################/** # @RdocMethod isKeyword # # @title "Checks if a word is a Rd keyword" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @logical. # } # # @author # # \seealso{ # @seemethod "getKeywords" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("isKeyword", "Rdoc", function(this, word, ...) { is.element(word, Rdoc$getKeywords()) }, static=TRUE) ###########################################################################/** # @RdocMethod getManPath # # @title "Gets the path to the directory where the Rd files will be saved" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seemethod "setManPath" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getManPath", "Rdoc", function(this, ...) { this$.manPath }, static=TRUE) ###########################################################################/** # @RdocMethod setManPath # # @title "Sets the path to the directory where the Rd files should be saved" # # \description{ # @get "title". By default the path is \code{../man/} assuming that the # current directory is \code{../R/}, which is where source files commonly # are placed. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seemethod "getManPath" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("setManPath", "Rdoc", function(this, path="../man/", ...) { info <- file.info(path) if (is.na(info$isdir)) path <- gsub("/$", "", path) info <- file.info(path) if (is.na(info$isdir)) throw("Path does not exists: ", path) if (info$isdir != TRUE) throw("Specified path is not a directory: ", path) this$.manPath <- as.character(path) }, static=TRUE) ###########################################################################/** # @RdocMethod createManPath # # @title "Creates the directory where the Rd files should be saved" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the directory was creates, @FALSE if it already exists # and throws an @Exception if failed. # } # # @author # # \seealso{ # @seemethod "getManPath" # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("createManPath", "Rdoc", function(this, ...) { # Check if the path already exists, otherwise create it. path <- getManPath(this) # file.exists() and file.info() is sensitive to trailing '/'. path <- gsub("/$", "", path) isdir <- as.logical(file.info(path)["isdir"]) if (file.exists(path) && isdir) return(FALSE) # Path 'destPath' does not exist at all. It might be that there is # a file with the same name, but in any case, the OS should # take care of conflict if it thinks it is a conflict. if (!dir.create(path)) throw(Exception("Could not create destination directory: ", path)) return(TRUE) }, static=TRUE, protected=TRUE) ###########################################################################/** # @RdocMethod createName # # @title "Creates a class-method name" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{class}{A class name (@character string).} # \item{method}{A method name (@character string).} # \item{escape}{If @TRUE, non-valid filename characters are escaped into # valid character strings.} # \item{...}{Not used.} # } # # \value{ # Returns @character string. # } # # @author # # \seealso{ # @seemethod "escapeRdFilename". # @seeclass # } # # @keyword documentation # @keyword internal #*/########################################################################### setMethodS3("createName", "Rdoc", function(static, class, method, escape=TRUE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Get name format to be used (can be set globally) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nameFormat <- Rdoc$getNameFormat() if (nameFormat == "class.method") { name <- paste(class, ".", method, sep="") } else if (nameFormat == "method.class") { name <- paste(method, ".", class, sep="") } else { throw(RdocException("Unknown name format: ", nameFormat)) } if (escape) { name <- Rdoc$escapeRdFilename(name) } name }, static=TRUE, private=TRUE) ###########################################################################/** # @RdocMethod escapeRdFilename # # @title "Escape non-valid characters in a filename" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{filename}{A filename (@character string) to be escaped.} # \item{...}{Not used.} # } # # \value{ # Returns @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("escapeRdFilename", "Rdoc", function(static, filename, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Escape non-valid filenames # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - filename <- gsub("\\\\\\$", "DOLLAR", filename) filename <- gsub("[$]", "DOLLAR", filename) filename <- gsub("<-", "< -", filename) filename <- gsub("<", "LT", filename) filename <- gsub("[[]", "-LB-", filename) # From R v1.8.1 can't Rd filenames contain whitespace. filename <- gsub("[ \t]", "_", filename) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # A filename must start with a letter or a digit # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - startOk <- (regexpr("^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9]", filename) != -1) if (!startOk) { # Fix Rd filename (not really important actually). filename <- paste("000", filename, sep="") } filename }, protected=TRUE, static=TRUE) # escapeRdFilename() ###########################################################################/** # @RdocMethod compile # # @title "Compile source code files containing Rdoc comments into Rd files" # # \description{ # @get "title". # # \emph{Note, the class and methods to be compiled have to be loaded into # \R by for instance \code{library()} or \code{source()} before calling # this method.} # } # # @synopsis # # \arguments{ # \item{filename}{The pathname or filename pattern of the Rdoc files to be # compiled.} # \item{destPath}{The path where the generated Rd files should be saved.} # \item{showDeprecated}{If @TRUE, Rd files are generated for deprecated # objects too, otherwise not.} # \item{addTimestamp}{If @TRUE, a date and time stamp is added to the # Rd header comments. This timestamp might be confusing for version # control systems, which is why it can be turned off with @FALSE.} # \item{locale}{The locale to be set/used when compiling Rdoc comments. # This help assuring strings are sorted the same way across systems.} # \item{source}{If @TRUE, the Rdoc files will be \code{source()}:ed first. # This work of course only for Rdoc files that are R source files.} # \item{verbose}{If @TRUE, detailed compilation information is printed.} # \item{debug}{If @TRUE, extra debug information is printed.} # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("compile", "Rdoc", function(this, filename=".*[.]R$", destPath=getManPath(this), showDeprecated=FALSE, addTimestamp=FALSE, locale="C", verbose=FALSE, source=FALSE, check=TRUE, debug=FALSE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Global variables # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - authorWarn <- FALSE pkgAuthors <- NULL # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - isCapitalized <- function(str) { first <- substring(str,1,1) (first == toupper(first)) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # a d d K e y w o r d ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - validateKeyword <- function(keyword) { knownKeywords <- Rdoc$getKeywords() if (!is.element(keyword, knownKeywords)) { alts <- agrep(keyword, knownKeywords) alts <- paste("'", knownKeywords[alts], "'", collapse=", ", sep="") if (nchar(alts) > 0) alts <- paste("Did you mean ", alts, "?", sep="") throw(RdocException("Unknown keyword: ", keyword, ". ", alts, source=sourcefile)) } } # validateKeyword() rdocKeywords <- c() addKeyword <- function(keyword) { keyword <- as.character(keyword) # A remove keyword? if (regexpr("^-", keyword) != -1) { rdocKeywords <<- unique(c(rdocKeywords, keyword)) keyword <- gsub("^-", "", keyword) } else { rdocKeywords <<- unique(c(rdocKeywords, keyword)) } # Validate keyword validateKeyword(keyword) } # addKeyword() getRdKeywords <- function(...) { # Get all keywords if (length(rdocKeywords) == 0) return("") isRemove <- (regexpr("^-", rdocKeywords) != -1) keywords <- rdocKeywords[!isRemove] exclKeywords <- gsub("^-", "", rdocKeywords[isRemove]) keywords <- setdiff(keywords, exclKeywords) keywords <- unique(keywords) # Empty current list of keywords rdocKeywords <<- c() if (length(keywords) == 0) return(NULL) lines <- paste("\\keyword{", keywords, "}", sep="") lines <- paste(lines, collapse="\n") lines } # getRdKeywords() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # e s c a p e N a m e ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # From the help: # \name{name} # name typically is the basename of the Rd file containing the # documentation. It is the "name" of the Rd object represented # by the file, has to be unique in a package, and must not # contain LaTeX special characters (#, $, %, &, ~, _, ^, \, {, }). escapeName <- function(name) { name <- gsub("\\#", "POUND", name) name <- gsub("\\$", "DOLLAR", name) name <- gsub("\\%", "PERCENT", name) name <- gsub("\\&", "AND", name) name <- gsub("\\~", "TILDE", name) name <- gsub("\\_", "UNDERSCORE", name) name <- gsub("\\^", "POWER", name) name <- gsub("\\\\", "BACKSLASH", name) name <- gsub("\\{", "LCURLY", name) name <- gsub("\\}", "RCURLY", name) name <- gsub("<-", "< -", name) name } # escapeName() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # e s c a p e A l i a s ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - escapeAlias <- function(alias) { # Don't escape aliases?!? /HB 2004-03-03 alias <- gsub("\\%", "\\\\%", alias) # alias <- gsub("\\$", "\\\\$", alias) # alias <- gsub("<-", "< -", alias) alias } # escapeAlias() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # e x t r a c t R d o c s ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - extractRdocs <- function(filename, verbose=FALSE, debug=FALSE) { if (!file.exists(filename)) throw(RdocException("File not found: ", filename)) # Read all lines from the source code file lines <- readLines(filename, warn=FALSE) if (length(lines) == 0) return(list()) # Keep only the lines that are comments. lines <- lines[(regexpr("^ *#", lines) != -1)] if (length(lines) == 0) return(list()) # Find all Rdoc begins and ends begins <- which(regexpr("/\\*\\*", lines) != -1) ends <- which(regexpr("\\*/", lines) != -1) if (length(begins) != length(ends)) throw(RdocException("Number of Rdoc begins do not match number of Rdoc ends: ", filename)) if (any(begins - ends > 0)) throw(RdocException("Some of the Rdoc begins comes after the Rdoc ends: ", filename)) rdocs <- list() for (k in seq_along(begins)) { idx <- begins[k]:ends[k] tmp <- lines[idx] # Remove everything before the begin tag including the tag tmp[1] <- gsub("^#.*/\\*\\*", "", tmp[1]) # Remove everything after the end tag including the tag last <- length(tmp) tmp[last] <- gsub("^#.*\\*/.*", "", tmp[last]) # Remove all leading single and double comment characters tmp <- gsub("^#{1,3}", "", tmp) # Find (minimum) indentation indents <- regexpr("[^ ]", tmp[nchar(tmp) > 0]) indent <- min(indents) tmp <- substring(tmp, first=indent) # Remove all trailing whitespace tmp <- gsub("[ \t\v\r\n]$", "", tmp) # Remove all empty lines at the beginning while (nchar(tmp[1]) == 0) tmp <- tmp[-1] # Remove all empty lines at the end while (nchar(tmp[length(tmp)]) == 0) tmp <- tmp[-length(tmp)] attr(tmp, "sourcefile") <- filename rdocs[[k]] <- tmp } rdocs } # extractRdocs() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # w r i t e R d ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sourcefile <- NA writeRd <- function(rds, path=getManPath(this), addTimestamp=TRUE, verbose=FALSE, debug=FALSE) { for (rd in rds) { name <- attr(rd, "name") if (!is.null(path)) { if (regexpr("/$", path) == -1 && regexpr("\\$", path) == -1) path <- paste(path, "/", sep="") } filename <- Rdoc$escapeRdFilename(name) filename <- paste(path, filename, ".Rd", sep="") if (verbose) { cat("Generating ", filename, "...", sep="") } sourcefile <<- sourcefile <- attr(rd, "sourcefile") hdr <- c("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") hdr <- c(hdr, "% Do not modify this file since it was automatically generated from:") hdr <- c(hdr, "% ") hdr <- c(hdr, paste("% ", sourcefile, sep="")) hdr <- c(hdr, "% ") if (addTimestamp) { hdr <- c(hdr, paste("% on ", date(), ".", sep="")) hdr <- c(hdr, "% ") } hdr <- c(hdr, "% by the Rdoc compiler part of the R.oo package.") hdr <- c(hdr, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") bfr <- paste(c(hdr, "", rd, ""), collapse="\n") writeChar(bfr, eos=NULL, con=filename) } } # writeRd() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # c o m p i l e R d o c () # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - compileRdoc <- function(rdocs, showDeprecated=FALSE, verbose=FALSE, debug=FALSE) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate arguments # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (!is.list(rdocs)) throw(RdocException("Internal error: Expected a list: ", class(rdocs)[1L])) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Defines all simple tags that are shortcuts to different help documents. # Example: @TRUE -> \\code{\\link[base:logical]{TRUE}} # NA means that the text should just be place inside \code{}. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - shorttags <- list( # Package base: "0" = NA, "1" = NA, "..." = NA, "." = NA, # Must come *after* "..." "array" = "base", "attributes" = "base", "attr" = "base", "ANY" = NA, "call" = "base", "character" = "base", "complex" = "base", "connection" = "base:connections", "data.frame" = "base", "dimnames" = "base", "dim" = "base", "double" = "base", "environment" = "base", "expression" = "base", "factor" = "base", "FALSE" = "base:logical", "formula" = "base", "function" = "base", "Inf" = "base:is.finite", "integer" = "base", "length" = "base", "list" = "base", "logical" = "base", "matrix" = "base", "names" = "base", "name" = "base", "NA" = "base", "NaN" = "base:is.finite", "NULL" = "base", "numeric" = "base", "table" = "base", "TRUE" = "base:logical", "raw" = "base", "ts" = "base", "vector" = "base", "warning" = "base", # Package R.oo: "Object" = "R.oo", "Exception" = "R.oo", "throw" = "R.oo" ) names <- names(shorttags) match <- gsub("\\.", "\\\\.", names) attr(shorttags, "beginsWith") <- paste("^@", match, sep="") attr(shorttags, "contains") <- paste("[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9.]@", match, sep="") replace <- paste("\\link[", unlist(shorttags), "]{", names, "}", sep="") replace[is.na(shorttags)] <- names[is.na(shorttags)] replace <- paste("\\code{", replace, "}", sep="") attr(shorttags, "replace") <- replace # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - getTagValue <- function(bfr) { # 1. Remove all leading whitespace bfr <- gsub("^[ \t]", "", bfr) # 2a. Is there a '{' + '}' pair? (nesting brackets are not allowed) if ((beginPos <- regexpr("^\\{", bfr)) != -1L) { # Find the end '}' endPos <- regexpr("\\}", bfr) if (endPos == -1L) throw(RdocException("Closing } is missing: ", substring(bfr, first=1L, last=20L), source=sourcefile)) value <- substring(bfr, first=beginPos+1L, last=endPos-1L) bfr <- substring(bfr, first=endPos+1L) } # 2b. ...or a '"' + '"' pair? (*internal* escaped " are ignored) else if ((beginPos <- regexpr("^\"", bfr)) != -1L) { endPos <- regexpr("[^\\]\"", bfr) if (endPos == -1L) throw(RdocException("Closing \" is missing: ", substring(bfr, first=1L, last=20L), source=sourcefile)) value <- substring(bfr, first=beginPos+1L, last=endPos) bfr <- substring(bfr, first=endPos+2L) } # 2c. ...otherwise the value is the first word found # (on the same line!) else { beginPos <- 1L endPos <- regexpr("([ \t\n\r]|$)", bfr) value <- substring(bfr, first=1L, last=endPos-1L) # Ad hoc. /HB 2013-03-25 if (value != "}") { bfr <- substring(bfr, first=endPos) } else { value <- "" } } attr(bfr, "value") <- value bfr } # getTagValue() isObjectDeprecated <- function(name, ...) { obj <- getObject(this, name=name, ...) mods <- attr(obj, "modifiers") is.element("deprecated", mods) } # isObjectDeprecated() # Read and parse authors from DESCRIPTION's 'Authors@R' or 'Author'. getPackageAuthors <- function() { if (!is.null(pkgAuthors)) { return(pkgAuthors) } pkg <- Package(Rdoc$package) authors <- getAuthor(pkg, as="person") authorsN <- format(authors, include=c("given", "family")) maintainers <- getMaintainer(pkg, as="person") maintainersN <- format(maintainers, include=c("given", "family")) # Append maintainers, if not already listed as authors keep <- !is.element(maintainersN, authorsN) maintainers <- maintainers[keep] if (length(maintainers) > 0L) { ## authors <- c(authors, maintainers) } authors } # getPackageAuthors() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocClass <- function(bfr) { bfr <- getTagValue(bfr) class <<- attr(bfr, "value") typeOfClass <- typeOfClass(class) if (is.na(typeOfClass)) { throw(RdocException("Class is either not defined or loaded, or not an S4/setClass() or S3/setConstructorS3() class: ", class)) } if (typeOfClass == "S4") { clazz <<- getClass(class) } else if (typeOfClass == "S3-Object") { clazz <<- Class$forName(class) } line <- paste("\\name{", escapeName(class), "}\n", sep="") line <- paste(line, "\\docType{class}\n", sep="") line <- paste(line, "\\alias{", class, "}\n", sep="") addKeyword("classes") if (typeOfClass == "S4") { line <- paste(line, "\\alias{", class, "-class}\n", sep="") usage <- Rdoc$getClassS4Usage(clazz) } else if (typeOfClass == "S3-Object") { usage <<- Rdoc$getUsage(method=class) isDeprecated <<- isDeprecated(clazz) } name <<- class objectName <<- class rd <<- paste(rd, line, sep="") bfr } # tagRdocClass() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagClass <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") class <<- value bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocMethod <- function(bfr) { bfr <- getTagValue(bfr) method <- attr(bfr, "value") objectName <<- paste(method, class, sep=".") isDeprecated <<- isObjectDeprecated(objectName) # Find method fcn <- NULL tryCatch({ fcn <- Rdoc$getObject(objectName, mode="function") }, error = function(ex) { cat("Failed...\n") print(ex) cat("Failed...done\n") }) if (!is.function(fcn)) { throw(RdocException("Could not get method. Function was not found: ", objectName, "()", source=Rdoc$source)) } methodName <- createName.Rdoc(NULL, class, method, escape=FALSE) isStatic <- is.element("static", attr(fcn, "modifiers")) if (isStatic) { staticName <- paste(class, method, sep="$") name <- staticName alias <- c(staticName, escapeAlias(methodName)) } else { name <- escapeName(methodName) alias <- escapeAlias(methodName) } # Treat internal and non-internal methods differently if (isCapitalized(class)) { alias <- c(alias, paste(class, method, sep=".")) alias <- c(alias, paste(method, ",", class, "-method", sep="")) } alias <- c(alias, paste(method, class, sep=".")) # Multiple aliases(?) alias <- unique(alias) alias <- paste("\\alias{", alias, "}", sep="") line <- paste("\\name{", name, "}", sep="") line <- c(line, alias) line <- paste(line, collapse="\n") # Treat internal and non-internal methods differently if (isCapitalized(class)) { addKeyword("internal") } addKeyword("methods") name <<- methodName; # Filename usage <<- Rdoc$getUsage(method=method, class=class) rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocDefault <- function(bfr) { bfr <- getTagValue(bfr) default <- attr(bfr, "value") objectName <<- default isDeprecated <<- isObjectDeprecated(objectName) name <- default name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, ".default}\n", sep="") line <- paste(line, "\\alias{", name, "}", sep="") usage <<- Rdoc$getUsage(method=default, class="default") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocGeneric <- function(bfr) { bfr <- getTagValue(bfr) generic <- attr(bfr, "value") objectName <<- generic isDeprecated <<- isObjectDeprecated(objectName) name <- generic name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") addKeyword("methods") usage <<- Rdoc$getUsage(method=generic) rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocFunction <- function(bfr) { bfr <- getTagValue(bfr) fcn <- attr(bfr, "value") objectName <<- fcn isDeprecated <<- isObjectDeprecated(objectName) name <- fcn name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") usage <<- Rdoc$getUsage(method=fcn) rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocObject <- function(bfr) { bfr <- getTagValue(bfr) object <- attr(bfr, "value") objectName <<- object isDeprecated <<- isObjectDeprecated(objectName) name <- object name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}", sep="") usage <<- NULL rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocData <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") name <- value name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") line <- paste(line, "\\docType{data}\n", sep="") addKeyword("datasets") objectName <<- value usage <<- NULL rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocDocumentation <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") name <- value name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") addKeyword("documentation") hasTitle <- (regexpr("(@|[\\])title", bfr) != -1) if (!hasTitle) line <- paste(line, "\\title{", name, "}\n", sep="") objectName <<- value usage <<- NULL rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocAbout <- function(bfr) { # An @RdocAbout does *not* have a value # bfr <- getTagValue(bfr) name <- ". About this package" name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") addKeyword("documentation") line <- paste(line, "\n", sep="") hasTitle <- (regexpr("(@|[\\])title", bfr) != -1) if (!hasTitle) line <- paste(line, "\\title{About this package}\n", sep="") objectName <<- name usage <<- NULL rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagRdocPackage <- function(bfr) { # An @RdocPackage takes the package name as an argument bfr <- getTagValue(bfr) name <- attr(bfr, "value") name <<- name <- escapeName(name) line <- paste("\\name{", name, "-package}\n", sep="") line <- paste(line, "\\alias{", name, "-package}\n", sep="") line <- paste(line, "\\alias{", name, "}\n", sep="") line <- paste(line, "\\docType{package}\n", sep="") addKeyword("package") line <- paste(line, "\n", sep="") hasTitle <- (regexpr("(@|[\\])title", bfr) != -1) if (!hasTitle) line <- paste(line, "\\title{Package ", name, "}\n", sep="") name <<- paste(name, "-package", sep="") objectName <<- name usage <<- NULL rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagName <- function(bfr) { bfr <- getTagValue(bfr) if (!is.null(name)) { warning("Tag ignored: @RdocDefault is not needed if @RdocClass is specified.") return(bfr) } value <- attr(bfr, "value") name <- value name <<- name <- escapeName(name) line <- paste("\\name{", name, "}\n", sep="") line <- paste(line, "\\alias{", name, "}", sep="") objectName <<- value usage <<- Rdoc$getUsage(method=value) rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagAlias <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") alias <- value alias <- escapeAlias(alias) line <- paste("\\alias{", alias, "}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagAliasMethod <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") method <- value method <- escapeAlias(method) line <- paste("\\alias{", class, ".", method, "}\n", sep="") line <- paste(line, "\\alias{", method, ".", class, "}\n", sep="") line <- paste(line, "\\alias{", method, ",", class, "-method}\n", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagAliasUndocumented <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") alias <- unlist(tools::undoc(package=value)) alias <- sapply(alias, FUN=escapeAlias) lines <- paste("\\alias{", alias, "}", sep="") lines <- paste(lines, collapse="\n") rd <<- paste(rd, lines, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagUsage <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") if (nchar(value) == 0L) { # Usage is inferred from the @RdocNnn tag. } else if (nchar(value) > 0L) { # Usage is inferred from the @usage tag. parts <- strsplit(value, split=",", fixed=TRUE)[[1]] nparts <- length(parts) method <- parts[1L] if (nparts == 1L) { usage <- Rdoc$getUsage(method=method) } else if (nparts == 2L) { class <- parts[2L] usage <- Rdoc$getUsage(method=method, class=class) } } usage <- paste(usage, collapse="\n") line <- usage rd <<- paste(rd, line, sep="") bfr } tagSynopsis <- function(bfr) { usage <- c("", usage, "") usage <- paste(usage, collapse="\n") line <- paste("\\usage{", usage, "}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagKeyword <- function(bfr) { bfr <- getTagValue(bfr) keyword <- attr(bfr, "value") addKeyword(keyword) bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagInclude <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") if (!file.exists(value)) { throw(RdocException("File to be included not found: ", value, source=sourcefile)) } else { include <- readLines(value, warn=FALSE) include <- paste(include, collapse="\n") include <- gsub("\\%", "\\\\%", include) line <- paste(include, "\n", sep="") rd <<- paste(rd, line, sep="") } bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagExamples <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") if (!file.exists(value)) { throw(RdocException("File containing examples to be included not found: ", value, source=sourcefile)) } else { include <- readLines(value, warn=FALSE) include <- paste(include, collapse="\n") include <- gsub("\\%", "\\\\%", include) line <- paste("\\examples{\n", include, "\n}", sep="") } rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagVisibility <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") visibility <<- value if (!is.element(visibility, c("private", "protected", "public"))) throw(RdocException("Unknown type of visibility: ", value, source=sourcefile)) if (visibility == "private") addKeyword("internal") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagGet <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") if (exists(value)) { line <- as.character(get(value)) } else if (!is.null(getOption(value))) { line <- as.character(getOption(value)) } else { throw(RdocException("R variable does not exist: ", value, source=sourcefile)) } rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagSet <- function(bfr, envir=parent.frame()) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") keyValue <- strsplit(value, "=")[[1]] assign(keyValue[1], value=keyValue[2], envir=envir) bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagAuthor <- function(bfr) { bfrT <- getTagValue(bfr) value <- attr(bfrT, "value") value <- as.character(value) hasValue <- (nchar(value) > 0L) hasValue <- hasValue && (regexpr("^[ \t]*[\n\r]", value) == -1L) # Does the @author tag has a value? if (hasValue) { # Non-empty @author tag with value, e.g. '@author "HB"' value <- gsub("^[ \t]*['\"]?", "", value) value <- gsub("['\"]?[ \t]*$", "", value) # (i) All authors? if (value == "*") { pkgAuthors <<- authors <- getPackageAuthors() } else { # (ii) All initials? An initial = 2-5 upper case letters tmp <- unlist(strsplit(value, split=",", fixed=TRUE)) tmp <- gsub("^[ \t]*", "", tmp) tmp <- gsub("[ \t]*$", "", tmp) tmpU <- toupper(tmp) pattern <- sprintf("^[%s]{2,5}$", paste(base::LETTERS, collapse="")) allInitials <- all( (tmpU == tmp) & (regexpr(pattern, tmp) != -1L) ) if (allInitials) { initials <- tmp # Create all initials of the 'authors' pkgAuthors <<- authors <- getPackageAuthors() fullnames <- format(authors, include=c("given", "family")) known <- abbreviate(fullnames, minlength=2L) known <- toupper(known) # Check if the initials match idxs <- match(initials, known) unknown <- initials[is.na(idxs)] if (length(unknown) > 0L) { known <- paste(sQuote(known), sQuote(fullnames), sep="=") throw(RdocException("Rdoc 'author' tag specifies initials (", paste(sQuote(unknown), collapse=", "), ") that are not part of the known ones (", paste(known, collapse=", "), ")", source=sourcefile)) } authors <- authors[idxs] } else { authors <- as.person(value) } } bfr <- bfrT } else { # Empty @author tag, i.e. '@author' pkgAuthors <<- authors <- getPackageAuthors() # If there are creators of the package (which there should be), # use those as the default for an empty '@author' tag. isCreator <- sapply(authors, FUN=function(a) is.element("cre", a$role)) if (any(isCreator)) { authors <- authors[isCreator] } if (exists("author", mode="character", envir=globalenv())) { if (!authorWarn) { author <- get("author", mode="character", envir=globalenv()) warning("Detected an 'author' character variable in the global environment. Note that, since R.oo 1.13.0, the author for an (empty) Rdoc @author tag is inferred from the 'Authors@R' or 'Author' DESCRIPTION field and no longer take from the global 'author' variable: ", sQuote(author)) authorWarn <<- TRUE } } } authorsTag <- format(authors, include=c("given", "family")) authorsTag <- paste(authorsTag, collapse=", ") line <- paste("\\author{", authorsTag, "}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagHowToCite <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") package <- Package(value) howToCite <- getHowToCite(package, newline=NULL) if (is.null(howToCite)) { line <- "\\emph{No citation information available.}\n" } else { line <- gsub("\n", " ", howToCite) line <- gsub("[ ]+", " ", line) line <- lapply(line, FUN=strwrap, width=85L) line <- lapply(line, FUN=paste, collapse="\n") line <- unlist(line, use.names=FALSE) line <- paste(line, collapse="\n\n") line <- paste("\\preformatted{\n", line, "\n}\n", sep="") # Add the following line to fix a "R CMD check-bug" in LaTeX. # /HB 2004-03-10 line <- paste(line, "\\emph{}\n", sep="") } rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagSeeclass <- function(bfr) { line <- paste("For more information see \\code{\\link{", class, "}}.", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagSeemethod <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") line <- paste("\\code{\\link[", package, ":", Rdoc$createName(class, value), "]{*", value, "}()}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagSeeOtherMethods <- function(bfr) { clazz <<- Class$forName(class) method <- gsub(paste("[.]", class, "$", sep=""), "", objectName) classes <- list(getSuperclasses(clazz), getKnownSubclasses(clazz)) for (k in 1:2) { methods <- paste(method, classes[[k]], sep=".") exists <- sapply(methods, FUN=exists, mode="function") classes[[k]] <- classes[[k]][exists] methods <- methods[exists] for (l in seq_along(methods)) { fcn <- get(methods[l], mode="function") modifiers <- attr(fcn, "modifiers") isPrivate <- is.element("private", modifiers) isDeprecated <- is.element("deprecated", modifiers) if (isPrivate || isDeprecated) methods[l] <- NA } classes[[k]] <- classes[[k]][!is.na(methods)] } for (k in 1:2) { classes[[k]] <- paste("\\code{\\link[", package, ":", Rdoc$createName(classes[[k]], method), "]{", classes[[k]], "}}", sep="") } line <- "\\cr\\bold{Implementations of this method in}" line <- paste(line, " i) \\bold{superclasses:} ") line <- paste(line, paste(classes[[1]], collapse=", "), sep="") line <- paste(line, ", and ii) \\bold{subclasses:} ") line <- paste(line, paste(classes[[2]], collapse=", "), ".", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagSee <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") pkgObject <- strsplit(value, "::", value)[[1]] fcn <- "" if (length(pkgObject) == 1) { pkg <- NULL obj <- pkgObject[1] if (exists(obj, mode="function")) { expr <- substitute(inherits(fcn, "Class"), list(fcn=as.name(obj))) if (!eval(expr)) fcn <- "()" } } else { pkg <- pkgObject[1] obj <- pkgObject[2] .require <- require; # To please R CMD check if (.require(package=pkg, character.only=TRUE)) { pos <- which(paste("package:", "base", sep="") == search()) if (exists(obj, where=pos, mode="function", inherits=FALSE)) fcn <- "()" } pkg <- paste("[", pkg, "]", sep="") } line <- paste("\\code{\\link", pkg, "{", obj, "}}", fcn, sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagClasshierarchy <- function(bfr) { txt <- getRdHierarchy(clazz) subclasses <- getKnownSubclasses(clazz) # If possible, create links to Rd docs for each of the subclasses. links <- c() for (name in subclasses) { link <- name if (exists(name, mode="function")) { cls <- get(name, mode="function") if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) link <- paste("\\link{", link ,"}", sep="") else link <- paste("\\link[", pkg, "]{", link ,"}", sep="") if (isAbstract(cls)) link <- paste("\\emph{", link, "}", sep="") } } # link <- paste("\\code{", link ,"}", sep="") links <- c(links, link) } # for (name in ...) subclasses <- paste(links, collapse=", ") txt <- paste(txt, "\\bold{Directly known subclasses:}\\cr\n", sep="") txt <- paste(txt, subclasses, sep="") txt <- paste(txt, "\\cr\n\n", sep="") txt <- paste(txt, getRdDeclaration(clazz), "\n", sep="") line <- txt rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagMethods <- function(bfr) { methods <- getRdMethods(clazz, visibility=visibility) line <- methods rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagAllMethods <- function(bfr) { bfr <- getTagValue(bfr) visibilities <- attr(bfr, "value") # Ad hoc patch for parser /060530. addEnd <- (identical(visibilities, "}")) visibilities <- gsub(" ", "", visibilities) visibilities <- unlist(strsplit(visibilities, split="|", fixed=TRUE)) methods <- getRdMethods(clazz, visibilities=visibilities) line <- paste(methods, "\n\n", sep="") methods <- Rdoc$methodsInheritedFrom(clazz, visibility, showDeprecated=showDeprecated, sort=sort) line <- paste(line, methods, sep="") if (addEnd) line <- paste(line, "}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagTitle <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") title <<- as.character(value) # Check the title for correctness according to https://developer.r-project.org/Rds.html firstLetter <- substring(title, 1,1) if (firstLetter != toupper(firstLetter)) throw(RdocException("Titles shoule be capitalized: ", title, source=sourcefile)) if (regexpr("[.]$", title) != -1) throw(RdocException("Titles should not end with a period: ", title, source=sourcefile)) if (regexpr("[^\\][\\][:letter:]", title) != -1) throw(RdocException("Titles should not contain markup: ", title, source=sourcefile)) if (isDeprecated) title <<- paste("Deprecated: ", title, sep="") line <- paste("\\title{", title, "}", sep="") rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagEval <- function(bfr) { bfr <- getTagValue(bfr) value <- attr(bfr, "value") expr <- as.character(value) result <- eval(parse(text=expr)) line <- result rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tagInheritedmethods <- function(bfr) { methods <- Rdoc$methodsInheritedFrom(clazz, visibility, sort=sort) line <- methods rd <<- paste(rd, line, sep="") bfr } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tags <- list( "RdocClass" = tagRdocClass, "RdocGeneric" = tagRdocGeneric, "RdocFunction" = tagRdocFunction, "RdocDefault" = tagRdocDefault, "RdocMethod" = tagRdocMethod, "RdocObject" = tagRdocObject, "RdocData" = tagRdocData, "RdocDocumentation" = tagRdocDocumentation, "RdocAbout" = tagRdocAbout, "RdocPackage" = tagRdocPackage, # "classhierarchy" = tagClasshierarchy, # must be *before* "class". "synopsis" = tagSynopsis, "usage" = tagUsage, "keyword" = tagKeyword, # "Class" = tagRdocClass, "methodname" = tagRdocMethod, "name" = tagName, # "aliasmethod" = tagAliasMethod, # must be *before* "alias". # "aliasundocumented" = tagAliasUndocumented, # not useful. "alias" = tagAlias, "title" = tagTitle, # "class" = tagClass, "include" = tagInclude, "inheritedmethods" = "tagInheritedmethods", "examples" = tagExamples, "visibility" = tagVisibility, "get" = tagGet, "set" = tagSet, "author" = tagAuthor, "howtocite" = tagHowToCite, "seeclass" = tagSeeclass, "seemethod" = tagSeemethod, "seeothermethods" = tagSeeOtherMethods, "see" = tagSee, "methods" = tagMethods, "allmethods" = tagAllMethods, "eval" = tagEval ) names <- names(tags) attr(tags, "beginsWith") <- paste("^@", names, sep="") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # SETUP # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set the locale Sys.setlocale(locale=locale) # Make a best guess what the package is that is created by querying # the DESCRIPTION file, which should be in the parent directory of # the getManPath() directory. pkgPath <- dirname(getManPath(this)) pathname <- file.path(pkgPath, "DESCRIPTION") if (!file.exists(pathname)) { stop("Cannot infer package name. File not found: ", pathname) } pi <- read.dcf(file=pathname) package <- pi[,"Package", drop=TRUE] if (length(package) == 0L) { throw("Failed to infer package name. No 'Package' was listed in ", sQuote(pathname), ".") } if (length(package) > 1L) { throw("Failed to infer package name. More than one 'Package' were listed in ", sQuote(pathname), ": ", paste(sQuote(package), collapse=", ")) } Rdoc$package <- package class <- NULL clazz <- NULL Rdoc$source <- sourcefile <<- NULL rds <- list() for (rdoc in rdocs) { # Remember the name of the source file in case of an error... Rdoc$source <- sourcefile <<- attr(rdoc, "sourcefile") title <- NULL objectName <- NULL isDeprecated <- FALSE method <- NULL name <- NULL usage <- NULL visibility <- NULL # ============================================================== # 1. Replace all shorttags # # This can be vectorized since all shorttags are read only # and does not rely on any state of Rdoc etc. # This should speed up the process. # ============================================================== for (kk in seq_along(shorttags)) { replace <- attr(shorttags, "replace")[kk] # (a) Replace all occurances at the beginning of the lines. pattern <- attr(shorttags, "beginsWith")[kk] rdoc <- gsub(pattern, replace, rdoc) # (b) Replace all other occurances. ready <- FALSE while (!ready) { pattern <- attr(shorttags, "contains")[kk] pos <- regexpr(pattern, rdoc) idx <- (pos != -1L) if (any(idx)) { len <- attr(pos, "match.length")[idx] pos <- pos[idx] prefix <- substring(rdoc[idx], first=1L, last=pos) suffix <- substring(rdoc[idx], first=pos+len) rdoc[idx] <- paste(prefix, replace, suffix, sep="") } else { ready <- TRUE } } } # for (kk ...) # ============================================================== # 2. Compile the remaining lines # # This can *not* be vectorized since some tags may change the # state of the Rdoc compiler or set a local variable, which # will affect following tags. # ============================================================== # (a) Make on big string of the whole Rdoc comment. # This will simplify handling of line breaks within a tag # argument, e.g. when @title "Bla bla\nbla" exists. rdoc <- paste(rdoc, collapse="\n") # (b) Get the first occurance of a tag. # A tag begins with a '@', but can not have a letter, a # number or a '.' in front since then it could be a code # fragment refering to a S4 slot. patternL <- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" pattern <- sprintf("[^%s0-9.]@", patternL) pattern2 <- sprintf("[^%s0-9]@", patternL) rd <- "" while (TRUE) { # (i) It can be that the tag start at position 1... pos <- regexpr("^@", rdoc) # (ii) ...otherwise... if (pos == -1L) { pos <- regexpr(pattern, rdoc) if (pos == -1L) break; # No more tags. Done! # Save everything before the tag... rd <- paste(rd, substring(rdoc, first=1L, last=pos), sep="") # ...and make the tag be at the first position. rdoc <- substring(rdoc, first=pos+1L) } if (debug) str(rdoc) # (iii) Identify the tag tagName <- NULL tagFunction <- NULL for (kk in seq_along(tags)) { patternKK <- attr(tags, "beginsWith")[kk] pos <- regexpr(patternKK, rdoc) if (pos != -1L) { len <- attr(pos, "match.length") tagIdx <- kk tagName <- names(tags)[kk] if (debug) cat(paste("Found tag: ", tagName, "\n", sep="")) tagFunction <- tags[[kk]] break } } # for (kk ...) if (!is.null(tagFunction)) { # Shift the Rdoc buffer rdoc <- substring(rdoc, first=len+1L) if (is.function(tagFunction)) { # Evaluate the tag function in the current environment # so all variables can be shared between tags. # All tag functions must return the resulting buffer! expr <- substitute(tagFunction(rdoc), list(tagFunction=tagFunction, rdoc=rdoc)) rdoc <- eval(expr) } } else { pos <- regexpr(pattern2, substring(rdoc, first=2L)) tagName <- substring(rdoc, first=1L, last=pos) msg <- sprintf("Unknown tag not processed in '%s': '%s'", sourcefile, tagName) warning(msg) rd <- paste(rd, substring(rdoc, first=1L, last=1L), sep="") rdoc <- substring(rdoc, first=2L) } if (isDeprecated && !showDeprecated) break } # while(TRUE), i.e. get first tag... if (showDeprecated || !isDeprecated) { # Do not forget to add the rest! rd <- paste(rd, rdoc, sep="") rdoc <- NULL # Append all keywords at the end rd <- paste(rd, getRdKeywords(), sep="\n") # Remove all empty lines rd <- gsub("[ \t]\n", "\n", rd) rd <- gsub("[ \t]\r", "\r", rd) if (is.null(name)) { # @RdocClass, @RdocDefault and/or @RdocMethod was not given. Search for classical \name{...} search <- regexpr("\\name\\{[^\\}]*\\}", rd) if (search == -1L) { throw(RdocException("The resulting Rd text does not have a \\name{} tag: ", substring(rd, first=1L, last=40L), source=sourcefile)) } name <- substring(rd, first=search+5L, last=search+attr(search, "match.length")-2) search <- regexpr("\\name\\{[^\\}]*\\}", substring(rd, first=search+1L)) if (search != -1L) throw(RdocException("The resulting Rd text has more than one \\name{} tag.", source=sourcefile)) } visibility <- "public" if (is.null(visibility)) { if (is.null(objectName)) { } else if (!exists(objectName)) { # If no object was found, assume that it is a Rdoc comment for # a non-object, i.e. a concept or similar. } else { object <- get(objectName) modifiers <- attr(object, "modifiers") if (is.element("private", modifiers)) { visibility <- "private" } else if (is.element("protected", modifiers)) { visibility <- "protected" } } } attr(rd, "visibility") <- as.character(visibility) attr(rd, "isDeprecated") <- isDeprecated attr(rd, "name") <- as.character(name) attr(rd, "sourcefile") <- sourcefile # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Check Rd code? # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (check) { if (compareVersion(as.character(getRversion()), "2.10.0") >= 0) { # R v2.10.0 and newer tryCatch({ con <- textConnection(rd) rdParse <- tools::parse_Rd(file=con) }, warning = function(w) { filename <- sprintf("%s.Rd.ERROR", attr(rd, "name")) cat(rd, sep="\n", file=filename) throw(RdocException(sprintf("Syntax error in generated Rd code (see '%s') for Rdoc comment '%s' (in '%s') was detected by tools:parse_Rd(): %s", filename, attr(rd, "name"), attr(rd, "sourcefile"), as.character(w)))) }, finally = { close(con) con <- NULL }) } else { # R v2.9.2 and before tryCatch({ ns <- getNamespace("tools") tools_Rd_parse <- get("Rd_parse", mode="function", envir=ns) rdParse <- tools_Rd_parse(text=rd) if (length(rdParse$rest) > 0) { throw(RdocException("Unknown top-level text in generated Rd code for Rdoc comment '", attr(rd, "name"), "' (in '", attr(rd, "sourcefile"), "') (typically due to too many or a missing bracket): ", paste(rdParse$rest, collapse=", ", sep=""))) } }, error = function(e) { throw(RdocException("Syntax error in generated Rd code for Rdoc comment '", attr(rd, "name"), "' (in '", attr(rd, "sourcefile"), "') was detected by tools:Rd_parse(): ", as.character(e))) }) } } # if (check) rds <- c(rds, list(rd)) } else { warning(paste("No Rd file for '", objectName, "' was generated since it was declared deprecated.", sep="")) } # if (!isDeprecated) } # for (rdoc in rdocs) rds } # compileRdoc() # A local version of the sourceTo() in R.io. sourceTo <- function(..., local=TRUE, envir=parent.frame()) { # Wrap up the arguments to source args <- list(...) if (!is.element("file", names(args))) names(args)[1] <- "file" # Override any 'local' argument args$local <- local # Create a call expression to source(..., local=local) expr <- substitute({ do.call(source, args) }, list(args=args)) # Call source() eval(expr, envir=envir) } # sourceTo() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Assert that the manPath exists. createManPath(this) filename <- as.character(filename) if (length(filename) == 1L && !file.exists(filename)) { if (regexpr("\\*", filename) != -1L || regexpr("\\?", filename) != -1L) { # Filename pattern pattern <- filename # List all files filename <- list.files() # Match to filename pattern filename <- grep(paste(pattern, "$", sep=""), filename, value=TRUE) # Keep only files filename <- filename[file_test("-f", filename)] # Keep only newer files? } } # Load the source code in case it contains new stuff. if (source) { lapply(filename, FUN=source) } for (file in filename) { if (verbose) cat("Generating Rd files from source file ", file, "...", sep="") rdocs <- extractRdocs(file, verbose=verbose, debug=debug) rd <- compileRdoc(rdocs, showDeprecated=showDeprecated, verbose=verbose, debug=debug) writeRd(rd, path=destPath, addTimestamp=addTimestamp, verbose=verbose, debug=debug) if (verbose) cat("\n") } if (check) { check(this, manPath=destPath, verbose=verbose) } }, static=TRUE) # compile() ###########################################################################/** # @RdocMethod hierarchy # # @title "Gets the class hierarchy" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("hierarchy", "Rdoc", function(this, class, ...) { package <- getPackage(class) s <- paste("Package: ", package, "\\cr\n") what <- if (inherits(class, "Class")) "Class" else "Interface" s <- paste(s, "\\bold{", what, " ", getName(class), "}\\cr\n\n", sep="") indent <- "" for (extend in rev(getSuperclasses(class))) { link <- sapply(extend, FUN=function(name) { # isAbstract <- FALSE link <- name if (exists(name, mode="function")) { cls <- get(name, mode="function") if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) link <- paste("\\link{", link ,"}", sep="") else link <- paste("\\link[", pkg, "]{", link ,"}", sep="") # if (isAbstract(cls)) { # link <- paste("\\emph{", link, "}", sep="") # isAbstract <- TRUE # } } } paste("\\code{", link ,"}", sep="") }) if (indent == "") { s <- paste(s, link, "\\cr\n", sep="") indent <- "~~" } else { s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n", sep="") indent <- paste(indent, "~~~~~", sep="") } s <- paste(s, "\\code{", indent, "|}\\cr\n", sep="") } link <- paste("\\code{", getName(class), "}", sep="") if (isAbstract(class)) link <- paste("\\emph{", link, "}", sep="") s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n\n", sep="") s }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod declaration # # @title "Gets the class declaration" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("declaration", "Rdoc", function(this, class, ...) { s <- "public"; # visibility(class) if (isAbstract(class)) s <- paste(s, "abstract") if (isStatic(class)) s <- paste(s, "static") if (inherits(class, "Class")) s <- paste(s, "class") else throw(getName(class), " is neither a class nor an interface.") s <- paste(s, " \\bold{", getName(class), "}\\cr\n", sep="") links <- getSuperclasses(class) if (length(links) > 0) { name <- links[1] link <- name if (exists(name, mode="function")) { cls <- get(name, mode="function") if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) link <- paste("\\link{", link ,"}", sep="") else link <- paste("\\link[", pkg, "]{", link ,"}", sep="") if (isAbstract(cls)) link <- paste("\\emph{", link, "}", sep="") } } paste("\\code{", link ,"}", sep="") s <- paste(s, "extends ", link, "\\cr\n", sep="") } s }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod methodsInheritedFrom # # @title "Gets all methods inherited from a class in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("methodsInheritedFrom", "Rdoc", function(this, class, visibility=c("public", "protected", "private"), showDeprecated=FALSE, inheritedFrom=NULL, sort=TRUE, trial=FALSE, ...) { s <- "" private <- is.element("private", visibility) # Classes for (extend in getSuperclasses(class)) { # Try to find a Class object with this name. clazz <- NULL tryCatch({ clazz <- Class$forName(extend) }, error = function(ex) {}) if (is.null(clazz)) { # Use methods() to find methods methods <- methods(class=extend) pattern <- paste("[.]", extend, "$", sep="") methods <- gsub(pattern, "", methods) } else { # Get all methods of this Class methods <- getMethods(clazz, private=private, deprecated=showDeprecated) methods <- methods[[extend]] methods <- names(methods) } if (length(methods) > 0) { methods <- paste(methods, collapse=", ") s <- paste(s, sprintf("\\bold{Methods inherited from %s}:\\cr\n", extend)) s <- paste(s, methods, "\n\n", sep="") } } s }, private=TRUE, static=TRUE) setMethodS3("getObject", "Rdoc", function(static, name, mode="any", package=static$package, ...) { # Search for object in: # (i) the package names iff found, then # (ii) then the search path. # Try to infer the package's namespace. ns <- NULL if (is.character(package)) { tryCatch({ ns <- getNamespace(package) }, error = function(ex) {}) } if (is.environment(ns) && exists(name, mode=mode, envir=ns)) { obj <- get(name, mode=mode, envir=ns) } else if (exists(name, mode=mode)) { obj <- get(name, mode=mode) } else { throw("Failed to locate object of mode \"", mode, "\": ", name) } obj }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod getUsage # # @title "Gets the usage of a method" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{method}{A method name (@character string).} # \item{class}{An optional class name (@character string).} # \item{wrap}{An @integer specifying the maximum number of characters per line. Longer lines will be wrapped with newlines.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getUsage", "Rdoc", function(static, method, class=NULL, wrap=90L, indent=2L, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - buildUsage <- function(method, class=NULL, args, valueArg=NULL, wrap=90L, head=NULL, ...) { # Argument 'args': stopifnot(is.list(args)) indentStr <- paste(rep(" ", times=indent), collapse="") correction <- 0L if (length(head) == 0L) { if (is.null(class)) { head <- method # Escape '%*%' to '\%*\%' head <- gsub("%", "\\%", head, fixed=TRUE) # Quote any method name containing '%' if (regexpr("%", head, fixed=TRUE) != -1L) head <- sprintf("`%s`", head) } else { # The effective length of this in the help manual is nchar(method). head <- sprintf("\\method{%s}{%s}", method, class) correction <- nchar(head) - nchar(method) } } correction0 <- correction lines <- NULL line <- paste(head, "(", sep="") if (length(args) == 0L) { line <- paste(line, ") ", sep="") } while (length(args) > 0L) { subargs <- args[[1L]] nsubargs <-length(subargs) # Try to keep = together if (nsubargs >= 3L) { # If = fit on a line, then keep the together... if (sum(nchar(subargs[1:3L])) <= wrap) { subargs[3L] <- paste(subargs[1:3], collapse="") subargs <- subargs[-(1:2)] } else if (sum(nchar(subargs[1:2L])) <= wrap) { # ...otherwise, at least keep = together, iff possible. subargs[2L] <- paste(subargs[1:2], collapse="") subargs <- subargs[-1L] } nsubargs <-length(subargs) } # Remaining arguments args <- args[-1L] nargs <- length(args) suffix <- if (nargs > 0L) ", " else ") " # For each subargument for (kk in seq_len(nsubargs)) { subarg <- subargs[kk] ## str(list(kk=kk, subarg=subarg)) if (kk == nsubargs) { subarg <- paste(subarg, suffix, sep="") } else { subarg <- paste(subarg, " ", sep="") } len <- nchar(subarg) # Does argument fit on the same line? if (nchar(line) - correction + len <= wrap) { line <- paste(line, subarg, sep="") } else { lines <- c(lines, line) line <- paste(indentStr, subarg, sep="") correction <- 0L } } # for (kk ...) } # while (length(args) > 0L) # Append a value assignment, i.e. "... <- value"? if (!is.null(valueArg)) { arg <- paste("<- ", valueArg, sep="") # Does it fit on the same line? if (nchar(line) - correction + nchar(arg) <= wrap) { line <- paste(line, arg, sep="") } else { lines <- c(lines, line) line <- paste(indentStr, arg, sep="") } } lines <- c(lines, line) lines <- gsub("[ ]$", "", lines); # Trim trailing space # Sanity check lens <- nchar(lines) lens[1L] <- lens[1L] - correction0 stopifnot(all(lens <= wrap)) ## print(lines) lines } # buildUsage() if (!is.null(class)) { fcnName <- paste(method, class, sep=".") } else { fcnName <- method } fcn <- NULL tryCatch({ fcn <- getObject(static, name=fcnName, mode="function") }, error = function(ex) { cat("Failed...\n") print(ex) cat("Failed...done\n") }) if (!is.function(fcn)) { throw(RdocException("Could not get usage. Function was not found: ", fcnName, "()", source=Rdoc$source)) } isStatic <- is.element("static", attr(fcn, "modifiers")) isConstructor <- inherits(fcn, "Class") args <- Rdoc$argsToString(fcn, escapeRd=TRUE, collapse=FALSE) # Replacement methods are special isReplacement <- (regexpr("<-$", method) != -1L) if (isReplacement) { method <- gsub("<-$", "", method) nargs <- length(args) valueArg <- args[nargs] args <- args[-nargs] } else { valueArg <- NULL } if (isConstructor) { usage <- buildUsage(method, args=args, valueArg=valueArg, wrap=wrap) } else if (isStatic) { # (a) The S3 method call lines <- buildUsage(method, class=class, args=args, valueArg=valueArg, wrap=wrap) usageM <- paste(lines, collapse="\n") # (b) The "static" method call, e.g. Class$forName(...) # Adjust line width ('wrap') to fit prefix '## ' as well. lines <- buildUsage(method, class=class, args=args[-1L], valueArg=valueArg, head=paste(class, method, sep="$"), wrap=wrap - 3L) lines <- paste("## ", lines, sep="") usageS <- paste(lines, collapse="\n") # (c) Combine usage <- c("## Static method (use this):", usageS, "", "## Don't use the below:", usageM) } else if (!is.null(class)) { usage <- buildUsage(method, class=class, args=args, valueArg=valueArg, wrap=wrap) } else { usage <- buildUsage(method, args=args, valueArg=valueArg, wrap=wrap) } usage }, private=TRUE, static=TRUE) # getUsage() ###########################################################################/** # @RdocMethod getClassS4Usage # # @title "Gets the usage of a S4 class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{class}{A class name (@character string).} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getClassS4Usage", "Rdoc", function(static, class, ...) { if (!inherits(class, "classRepresentation")) throw(InternalErrorException("Wrong usage.")) name <- class@className usage <- paste("new(", name, ")", sep="") hasConstructor <- exists(name, mode="function") if (hasConstructor) { constructor <- get(name, mode="function") args <- Rdoc$argsToString(constructor, collapse=TRUE) args <- paste(args, collapse=", ") constructorUsage <- paste(name, "(", args, ")", sep="") usage <- paste(usage, "\n", constructorUsage, sep="") } usage }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod argsToString # # @title "Gets the arguments signature of a function" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{fcn}{A @function.} # \item{escapeRd}{If @TRUE, certain Rd markup symbols are escaped.} # \item{collapse}{If @TRUE, each argument is returned as a single string, # otherwise split up into a vector of strings as far as possible.} # \item{...}{Not used.} # } # # \value{ # Returns a @list of @character strings. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("argsToString", "Rdoc", function(static, fcn, escapeRd=FALSE, collapse=TRUE, ...) { a <- args(fcn) # Nothing to do? if (is.null(a)) { return("[primitive function]") } # Sanity check if (typeof(a) != "closure") { throw("Expected closure but found something else: ", typeof(a)) } args <- formals(a) argsNames <- names(args) res <- list() for (kk in seq_along(args)) { arg <- args[kk] argName <- argsNames[kk] s <- argName argDefault <- arg[[1L]] if (!missing(argDefault)) { argDefault <- deparse(argDefault, width.cutoff=20L) argDefault <- trim(argDefault) # Escape '%' (which is a comment in Rd format)? if (escapeRd) { argDefault <- gsub("\\%", "\\\\%", argDefault) } if (collapse) { argDefault <- paste(argDefault, collapse=" ") s <- paste(s, "=", argDefault, sep="", collapse="") } else { s <- c(s, "=", argDefault) } } res <- c(res, list(s)) } res }, private=TRUE, static=TRUE) # argsToString() ###########################################################################/** # @RdocMethod getRdTitle # # @title "Extracts the title string of a Rd file" # # \description{ # @get "title" corresponding the the specified method of the specified class. # } # # @synopsis # # \arguments{ # \item{method}{The method to be search for.} # \item{class}{The class the method belongs to.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getRdTitle", "Rdoc", function(this, class, method, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tools_fetchRdDB <- get("fetchRdDB", mode="function", envir=getNamespace("tools"), inherits=FALSE) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # e s c a p e N a m e ( ) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - escapeName <- function(name) { name <- gsub("\\#", "POUND", name) name <- gsub("\\$", "DOLLAR", name) name <- gsub("\\%", "PERCENT", name) name <- gsub("\\&", "AND", name) name <- gsub("\\~", "TILDE", name) name <- gsub("\\_", "UNDERSCORE", name) name <- gsub("\\^", "POWER", name) name <- gsub("\\\\", "BACKSLASH", name) name <- gsub("\\{", "LCURLY", name) name <- gsub("\\}", "RCURLY", name) name <- gsub("<-", "< -", name) name } # escapeName() title <- NULL # Search for the file ..Rd in the man/ directory name <- createName.Rdoc(NULL, getName(class), method, escape=FALSE) name <- escapeName(name) rdName <- Rdoc$escapeRdFilename(name) rdFile <- paste(rdName, "Rd", sep=".") url <- file.path(getManPath(this), rdFile) if (file.exists(url)) { src <- paste(readLines(url, warn=FALSE), collapse="\n") # Search for \title{...} in the Rd source titlePos <- regexpr("\\title\\{[^\\}]*}", src) if (titlePos == -1) { warning(paste("Could not find a \\title{} definition in the Rd file for ", method, " in ", getName(class), ". Will search in loaded packages.", sep="")) "" } else { title <- trim(substring(src, first=titlePos+6, last=titlePos+attr(titlePos, "match.length")-2)) } } else { warning(paste("The Rd file for ", method, " in ", getName(class), " could not be found. Will search in loaded packages.", sep="")) } if (is.null(title)) { methodName <- paste(method, ".", getName(class), sep="") packageName <- Rdoc$getPackageNameOf(methodName, mode="function") if (length(packageName) == 1) { if (compareVersion(as.character(getRversion()), "2.10.0") >= 0) { # R v2.10.0 and newer path <- system.file("help", package=packageName) filebase <- file.path(path, packageName) tryCatch({ entry <- tools_fetchRdDB(filebase, key=methodName) tags <- lapply(entry, FUN=attr, "Rd_tag") idx <- which(tags == "\\title") if (length(idx) > 1) { idx <- idx[1] } if (length(idx) == 1) { entry <- entry[[idx]] entry <- entry[[1]] title <- entry[1] } }, error = function(ex) { warning(as.character(ex)) }) } else { package <- Package(packageName) tryCatch({ contents <- getContents(package) pos <- which(contents[,"Entry"] == name) if (length(pos) == 0) { warning(paste("Reverted to the CONTENTS file of package '", packageName, "', but found not matching entry: ", name, sep="")) } else if (length(pos) > 2) { warning(paste("Found more than one matching entry in the CONTENTS file of package '", packageName, "'. Using the first one only: ", name, sep="")) pos <- pos[1] } if (length(pos) != 0) { title <- as.character(contents[pos, "Description"]) attr(title, "package") <- packageName } }, error=function(ex) { warning(as.character(ex)) }) } } } title }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod getPackageNameOf # # @title "Gets the package of a method or an object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{objectName}{An method or object name (@character string).} # \item{mode}{Mode of object (@character string).} # \item{unique}{If @TRUE, only the first matching package is returned if # more than one is found.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getPackageNameOf", "Rdoc", function(static, objectName, mode="any", unique=TRUE, ...) { # Search all namespaces that are *attached* pkgs <- grep("^package:", search(), value=TRUE) pkgs <- gsub("^package:", "", pkgs) found <- sapply(pkgs, FUN=function(pkg) { exists(objectName, mode=mode, envir=asNamespace(pkg)) }) package <- names(found)[found] if (length(package) == 1L) return(package) if (length(package) > 1L && unique) { warning("Found more than one occurance of '", objectName, "' among the attached namespaces. Will only return the first one: ", paste(sQuote(package), collapse=", ")) return(package[1L]) } # If not found, then search any other namespace *loaded* pkgs <- setdiff(loadedNamespaces(), pkgs) found <- sapply(pkgs, FUN=function(pkg) { exists(objectName, mode=mode, envir=asNamespace(pkg)) }) package <- names(found)[found] if (length(package) == 1L) return(package) if (length(package) > 1L && unique) { warning("Found more than one occurance of '", objectName, "' among the loaded namespaces. Will only return the first one: ", paste(sQuote(package), collapse=", ")) return(package[1L]) } character(0L) }, private=TRUE, static=TRUE) ###########################################################################/** # @RdocMethod check # # @title "Checks the compiled Rd files" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{manPath}{The path to the Rd files (@character string).} # \item{verbose}{If @TRUE, extra information is outputted.} # \item{...}{Not used.} # } # # \value{ # Returns a printable object, which, if non-empty will show the errors. # } # # \details{ # Internally the \code{tools} package is used. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("check", "Rdoc", function(this, manPath=getManPath(this), verbose=FALSE, ...) { # file paths with trailing '/' are not recognized! /HB 2004-10-13 manPath <- gsub("/$", "", manPath) if (verbose) cat("Checking Rd files in '", manPath, "'...\n", sep="") if (compareVersion(as.character(getRversion()), "2.10.0") >= 0) { # For R (>= 2.10.0) pathnames <- list.files(pattern="[.]Rd$", path=manPath, full.names=TRUE) res <- NULL for (kk in seq_along(pathnames)) { pathname <- pathnames[kk] res <- tools::checkRd(pathname) } } else { # For R (< 2.10.0) tools_check_Rd_files_in_man_dir <- get("check_Rd_files_in_man_dir", mode="function", envir=getNamespace("tools"), inherits=FALSE) res <- tools_check_Rd_files_in_man_dir(manPath) if (length(res$files_with_surely_bad_Rd) > 0) { throw("Syntax error in Rd file(s): ", paste(res$files_with_surely_bad_Rd, collapse=", ")) } if (length(res$files_with_likely_bad_Rd) > 0) { print(res$files_with_likely_bad_Rd) throw("Syntax error in Rd file(s): ", paste(res$files_with_surely_bad_Rd, collapse=", ")) } } if (verbose) cat("Checking Rd files in '", manPath, "'...done\n", sep="") res }) ###########################################################################/** # @RdocMethod isVisible # # @title "Checks if a member is visible given its modifiers" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{modifiers}{A @character string of modifiers.} # \item{visibilities}{A @character string of visibility flags.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the modifiers are equal or higher than the visibility # flags, otherwise @FALSE. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("isVisible", "Rdoc", function(static, modifiers, visibilities, ...) { if (is.element("deprecated", modifiers) && !is.element("deprecated", visibilities)) return(FALSE) if (is.element("trial", modifiers) && !is.element("trial", visibilities)) return(FALSE) levels <- c("private", "protected", "public") modifiers <- intersect(modifiers, levels) if (length(modifiers) == 0) return(TRUE) visibilities <- intersect(visibilities, levels) if (length(visibilities) == 0) return(TRUE) modifiers <- factor(modifiers, levels=levels) visibilities <- factor(visibilities, levels=levels) any(as.integer(visibilities) <= as.integer(modifiers)) }, static=TRUE, protected=TRUE) # isVisible() R.oo/R/040.setConstructorS3.R0000644000176200001440000001504013563564136015200 0ustar liggesusers###########################################################################/** # @RdocDefault setConstructorS3 # # @title "Defines a class in S3/UseMethod style" # # \description{ # Defines a class in R.oo/S3 style. # What this function currently does is simply creating a constructor # function for the class. # } # # @synopsis # # \arguments{ # \item{name}{The name of the class.} # \item{definition}{The constructor definition. \emph{Note: The constructor # must be able to be called with no arguments, i.e. use default values # for all arguments or make sure you use \code{missing()} or similar!}} # \item{static}{If @TRUE this class is defined to be static, # otherwise not. Currently this has no effect expect as an indicator.} # \item{abstract}{If @TRUE this class is defined to be abstract, # otherwise not. Currently this has no effect expect as an indicator.} # \item{private}{If @TRUE this class is defined to be private.} # \item{protected}{If @TRUE this class is defined to be protected.} # \item{export}{A @logical setting attribute \code{"export"}.} # \item{trial}{If @TRUE this class is defined to be a trial class, # otherwise not. A trial class is a class that is introduced to be # tried out and it might be modified, replaced or even removed in a # future release. Some people prefer to call trial versions, beta # version. Currently this has no effect expect as an indicator.} # \item{deprecated}{If @TRUE this class is defined to be deprecated, # otherwise not. Currently this has no effect expect as an indicator.} # \item{envir}{The environment for where the class (constructor function) # should be stored.} # \item{enforceRCC}{If @TRUE, only class names following the R Coding # Convention is accepted. If the RCC is violated an RccViolationException # is thrown.} # \item{...}{Not used.} # # Note: If a constructor is not declared to be private nor protected, it # will be declared to be public. # } # # \section{A constructor must be callable without arguments}{ # The requirement that a constructor function should be callable without # arguments (e.g. \code{MyConstructor()}) is because that call is used # to create the static instance of a class. The reason for this is that # a static instance of the class is created automatically when the # constructor is called \emph{the first time} (only), that is, # when the first of object of that class is created. # All classes have to have a static instance. # # To make a constructor callable without arguments, one can either make # sure all arguments have default values or one can test for missing # arguments using \code{missing()}. # For instance the following definition is \emph{not} correct: # \code{setConstructorS3("Foo", function(x) extend(Object(), "Foo", x=x))} # whereas this one is # \code{setConstructorS3("Foo", function(x=NA) extend(Object(), "Foo", x=x))} # } # # \section{Code validation}{ # If argument \code{enforceRCC} is @TRUE, # the class name is validated so it starts with a letter and it # also gives a @warning if its first letter is \emph{not} capital. The # reason for this is to enforce a naming convention that names classes # with upper-case initial letters and methods with lower-case initial # letters (this is also the case in for instance Java). # } # # \examples{\dontrun{For a complete example see help(Object).}} # # \seealso{ # To define a method see @see "R.methodsS3::setMethodS3". # For information about the R Coding Conventions, see # @see "RccViolationException". # For a thorough example of how to use this method see @see "Object". # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("setConstructorS3", "default", function(name, definition, private=FALSE, protected=FALSE, export=TRUE, static=FALSE, abstract=FALSE, trial=FALSE, deprecated=FALSE, envir=parent.frame(), enforceRCC=TRUE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Assert that RCC naming conventions are followed. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (enforceRCC) { # Assert that the class name is a valid class name. firstLetter <- substring(name, 1,1) if (!is.element(tolower(firstLetter), letters)) throw(RccViolationException("Class names must begin with a letter: ", name)) # Check first letter if (firstLetter == tolower(firstLetter)) throw(RccViolationException("Class names should be nouns starting with a capital letter: ", name)) # Check if name contains . (period) if (regexpr("\\.", name) != -1) throw(RccViolationException("Class names must not contain . (period): ", name)) } # Check for forbidden names. ns <- getNamespace("R.methodsS3") R.methodsS3_R.KEYWORDS <- get("R.KEYWORDS", envir=ns) if (is.element(name, R.methodsS3_R.KEYWORDS)) throw(RccViolationException("Class names must not be same as a reserved keyword in R: ", name)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set up the modifiers # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (private) protection="private" else if (protected) protection="protected" else protection="public" # Create the modifiers modifiers <- protection if (static == TRUE) modifiers <- c(modifiers, "static") if (abstract == TRUE) modifiers <- c(modifiers, "abstract") if (deprecated == TRUE) modifiers <- c(modifiers, "deprecated") if (trial == TRUE) modifiers <- c(modifiers, "trial") modifiers <- c(modifiers, "class") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Create the constructor function (by default in the parent frame) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Create expr <- substitute({ ns <- getNamespace("R.oo") if (exists("Class", mode="function", envir=ns, inherits=FALSE)) { R.oo_Class <- get("Class", mode="function", envir=ns, inherits=FALSE) fcn <- R.oo_Class(name, definition) rm(list="R.oo_Class") } else { # Only used for/by R.oo itself. fcn <- Class(name, definition) } rm(list="ns") attr(fcn, "export") <- export attr(fcn, "modifiers") <- modifiers }, list(fcn=as.name(name), name=name, definition=definition, export=export, modifiers=modifiers) ) # Assign retValue <- eval(expr, envir=envir) invisible() }) # setConstructorS3() R.oo/R/InternalErrorException.R0000644000176200001440000000702313563564136016076 0ustar liggesusers###########################################################################/** # @RdocClass InternalErrorException # # @title "InternalErrorException represents internal errors" # # \description{ # @classhierarchy # # @get "title" that are likely to be due to implementation errors done by # the author of a specific package and not because the user made an error. # Errors that are due to unexpected input to functions etc falls under # this error type. # } # # @synopsis # # \arguments{ # \item{...}{Any arguments accepted by @see "Exception"}. # \item{package}{The name (@character string) of the package where the # error exists. Can also be a @see "Package" object. If @NULL, the # source of the error is assumed to be unknown.} # } # # \section{Fields and Methods}{ # @allmethods # } # # @author # # \seealso{ # For detailed information about exceptions see @see "Exception". # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setConstructorS3("InternalErrorException", function(..., package=NULL) { if (!is.null(package) && !inherits(package, "Package")) { package <- Package(as.character(package)) } extend(Exception(...), "InternalErrorException", .package=package ) }) ###########################################################################/** # @RdocMethod getPackage # # @title "Gets the suspicious package likely to contain an error" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @see "Package" object. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getPackage", "InternalErrorException", function(this, ...) { this$.package }) ###########################################################################/** # @RdocMethod getMessage # # @title "Gets the message of the exception" # # \description{ # @get "title" and adds a message that clarifies that the error is likely # due to an internal error and not due to the user. It also gives information # how to contact the maintainer or author of the suspicious package. This # information is retrieved from the DESCRIPTION file of the package. To help # the package developer, information about the current version of R, the # current version of the package etc are also returned so the user can # easily cut'n'paste that information into a bug report. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getMessage", "InternalErrorException", function(this, ...) { msg <- getMessage.Exception(this) msg <- paste(msg, " This error is likely to be due to an internal error", sep="") pkg <- getPackage(this) if (!is.null(pkg)) { msg <- paste(msg, " related to package ", getName(pkg), " v", getVersion(pkg), ". Please report this problem to the maintainer ", getMaintainer(pkg), " or the author ", getAuthor(pkg), " of that package", sep="") } R.oo <- Package("R.oo") msg <- paste(msg, ". Do not forget to report that you are using R v", getVersion(Package("base")), " on a ", R.Version()$platform, " platform together with R.oo v", getVersion(R.oo), ".", sep="") msg }) R.oo/R/050.Object.R0000644000176200001440000017103513563564136013147 0ustar liggesusers###########################################################################/** # @RdocClass Object # # @title "The root class that every class must inherit from" # # \description{ # R.oo\cr # \bold{Class Object}\cr # # public class \bold{Object}\cr # # \code{Object} is the root class of all other classes. All classes # \emph{must} extends this class, directly or indirectly, which means # that they all will inherit the methods in this class. # } # # @synopsis # # \arguments{ # \item{core}{The core value of each \emph{reference} referring to the # Object. By default, this is just the smallest possible \R object, but # there are situations where it is useful to have another kind of core, # which is the case with the Class class. # \emph{Note that this value belongs to the reference variable # and not to the Object, which means it can not be referenced.}} # \item{finalize}{If @TRUE, method @seemethod "finalize" will # be called on this Object when it is garbage collected.} # } # # \section{Fields and Methods}{ # @allmethods # } # # \section{Defining static fields}{ # To define a static field of an Object class, use a private field # \code{<.field>} and then create a virtual field \code{} by # defining methods \code{get()} and \code{set()}. # These methods should retrieve and assign the value of the field # \code{<.field>} of the \emph{static} instance of the class. The # second example below shows how to do this. The example modifies # also the static field already in the constructor, which is something # that otherwise may be tricky. # } # # \examples{ # @include "../incl/Person.Rex" # # @include "../incl/StaticFields.Rex" # } # # @author # # \references{ # [1] @include "../incl/BengtssonH_2003.bib.Rdoc" \cr # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setConstructorS3("Object", Object) ###########################################################################/** # @RdocMethod as.character # # @title "Gets a character string representing the object" # # \description{ # @get "title". In the class Object, # this method simply returns the class name and the hashCode() value # of the object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string representation of the Object. By default it # is "\{class name\}: \{hash code\}". # } # # \examples{ # obj <- Object() # as.character(obj) # "Object: 0x000000000ab6a7a8" # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("as.character", "Object", function(x, ...) { # To please R CMD check this <- x addr <- getInternalAddress(this, format="hexstring") paste(class(this)[1], ": ", addr, sep="") }) # as.character() ###########################################################################/** # @RdocMethod getInstantiationTime # # @title "Gets the time when the object was instantiated" # # \description{ # @get "title" (created) as a POSIXt object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a POSIXt object, which extends class POSIXct. # } # # \details{ # The instantiation time stamp is set when the object is created, and # only of option \code{"R.oo::BasicObject/instantiationTime"} is @TRUE. # } # # \examples{ # oopts <- options("R.oo::Object/instantiationTime"=TRUE) # obj <- Object() # print(getInstantiationTime(obj)) # options(oopts) # } # # \seealso{ # For more about time formats and POSIX see @see "base::DateTimeClasses". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getInstantiationTime", "Object", function(this, ...) { time <- attr(this, "...instantiationTime") if (!is.null(time)) return(time) # Backward compatibility (due to a SPELLING ERROR in an earlier version) time <- attr(this, "...instanciationTime") NULL }) ###########################################################################/** # @RdocMethod clone # # @title "Clones an Object" # # \description{ # Creates an identical copy of the object and returns a reference to the # new object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # A reference to the new object. # } # # \examples{ # o1 <- Object() # o2 <- clone(o1) # # print(equals(o1, o2)) # } # # \details{ # Please note that no constructors are called during the creation of the # clone and neither is any static class code called. # } # # \seealso{ # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setGenericS3("clone", overwrite = TRUE) setMethodS3("clone", "Object", function(this, ...) { # Copy the reference. clone <- this # Create a new environment, i.e. a new Object. clone.env <- new.env() attr(clone, ".env") <- clone.env # Copy all variables in the environment. this.env <- attr(this, ".env") fields <- getFields(this, private=TRUE) for (field in fields) { value <- get(field, envir=this.env, inherits=FALSE) # The following line must be included to do nothing, but the effect # is that it fools the lazy evaluation (?) to create a true copy of # the object. If this is not done, it won't be a true clone even if # the value is assigned to another environment. Example: # b <- clone(a) # b$matrix[1,1] <- 2 # will otherwise also change a$matrix[1,1]. /HB 021023 attr(value, "R.oo::.clone.Object") <- NULL assign(field, value, envir=clone.env) } clone }) ###########################################################################/** # @RdocMethod equals # # @title "Compares an object with another" # # \description{ # @get "title" and returns @TRUE if they are equal. # The equal property must be # # 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be @TRUE. # # 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is @TRUE if and only # if \code{equals(o2,o1)} is @TRUE. # # 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is @TRUE and # \code{equals(o2,o3)} is @TRUE, then \code{equals(o1,o3)} should # be @TRUE. # # 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same # result on multiple invocations as long as nothing has changed. # # 6) \code{equals(o1,}@NULL\code{)} should return @FALSE, unless # \code{o1} is also @NULL. # # By default, the method returns @TRUE if and only if the two # references compared refer to the same @Object, i.e. # \code{( !is.null(obj) && (hashCode(this) == hashCode(obj)) )}. # } # # @synopsis # # \arguments{ # \item{other}{The other object this @Object should be compared to.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the Object's are equal, otherwise @FALSE. # } # # \examples{ # o1 <- Object() # o2 <- clone(o1) # equals(o1, o1) # TRUE # equals(o1, o2) # FALSE # } # # \seealso{ # @seemethod "hashCode". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("equals", "Object", function(this, other, ...) { ( !is.null(other) && (hashCode(this) == hashCode(other)) ) }) ###########################################################################/** # @RdocMethod finalize # # @title "Finalizer methods called when object is clean out" # # \description{ # Finalizer methods are called just the moment before the object is # about to be deleted by the garbage collector. # # \bold{If creating a custom \code{finalize()} method for a subclass # in a package, then it needs to be exported in the NAMESPACE of # that package. If not, it will not be found nor called and # there will be no error message.} # # \bold{A finalizer method should never be called explicitly!} # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # @examples "../incl/Object.finalize.Rex" # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("finalize", "Object", function(this, ...) { }) ###########################################################################/** # @RdocMethod hashCode # # @title "Gets a hash code for the Object" # # \description{ # @get "title". This makes it possible to put any @Object in a hash table. # # The hash code returned must: # # 1) be \emph{consistent}, i.e. \code{hashCode(obj)} should return the same # value on multiple invocations as long as nothing has changed. # # 2) tell same same thing as \code{equals()}, if \code{equals(o1,o2)} is # @TRUE, then \code{hashCode(o1) == hashCode(o2)} should also be # @TRUE. # # Note that if \code{equals(o1,o2)} is @FALSE, \code{hashCode(o1)} # \code{hashCode(o2)} may be \emph{either} equal or non-equal. # # By default, the method returns the internal memory address where the # Object is located. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @double. # } # # \examples{ # obj <- Object() # hashCode(obj) # 26979608 # } # # @author # # \seealso{ # @seemethod "equals" # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("hashCode", "Object", function(this, ...) { getInternalAddress(this, format="numeric") }) # hashCode() ###########################################################################/** # @RdocMethod getInternalAddress # # @title "Gets the memory location where the Object resides" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{format}{A @character string specifying what format to return.} # \item{...}{Not used.} # } # # \value{ # The address is returned as a @numeric integer if # \code{format == "numeric"}, and as a @character string if # \code{format == "hexstring"}. # } # # \examples{ # obj <- Object() # getInternalAddress(obj, format="numeric") # 179742632 # getInternalAddress(obj, format="hexstring") # "0x000000000ab6a7a8" # } # # @author # # \seealso{ # \code{\link[=getName.environment]{getName()}}. # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getInternalAddress", "Object", function(this, format=c("numeric", "hexstring"), ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hexStringToDouble <- function(hex) { hexDigits <- unlist(strsplit("0123456789ABCDEF", "")) digits16 <- unlist(strsplit(toupper(hex), "")) digits10 <- match(digits16, hexDigits) - 1 bases10 <- rev(16^(seq_along(digits10)-1)) sum(digits10 * bases10) } hexStringToInt <- function(hex) { as.integer(hexStringToDouble(hex)) } # Argument 'format': format <- match.arg(format) pointer <- getName(attr(this, ".env")) if (format == "numeric") { pointer <- gsub("0x", "", pointer) pointer <- hexStringToDouble(pointer) } pointer }, private=TRUE) # getInternalAddress() ###########################################################################/** # @RdocMethod print # # @title "Prints an Object" # # \description{ # For all objects of class @see "Object", this method will print the # value of \code{as.character()} of the object. Note that this function is # not called if the argument is not an object of class @Object. # } # # @synopsis # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @see "base::print.default" # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("print", "Object", function(x, ...) { print(as.character(x)) }) # print() ########################################################################/** # @RdocMethod attachLocally # # @title "Attaches an Object locally to an environment" # # @synopsis # # \description{ # @get "title". By default, the fields of the Object are attached to # the parent frame, that is, the calling environment. # } # # \arguments{ # \item{private}{If @TRUE, private fields are included, otherwise not. # This is only effective if \code{fields==NULL}.} # \item{fields}{A @character @vector specifying elements to be copied. # If @NULL, all elements are considered.} # \item{excludeFields}{A @character @vector specifying elements not to # be copied. This has higher priority than \code{fields}.} # \item{overwrite}{If @FALSE, fields that already exists will not be # copied.} # \item{envir}{The @environment where fields are copied to.} # \item{...}{Not used.} # } # # \value{ # Returns (invisibly) a @character @vector of the fields copied. # } # # @examples "../incl/attachLocally.Object.Rex" # # @author # # \seealso{ # @seemethod attach # @seeclass # } # # @keyword "utilities" # @keyword "programming" #*/######################################################################### setMethodS3("attachLocally", "Object", function(this, private=FALSE, fields=NULL, excludeFields=NULL, overwrite=TRUE, envir=parent.frame(), ...) { if (is.null(fields)) { fields <- getFields(this, private=private) } fields <- setdiff(fields, excludeFields) attachedFields <- c() for (field in fields) { if (overwrite || !hasField(this, field)) { assign(field, this[[field]], envir=envir) attachedFields <- c(attachedFields, field) } } invisible(attachedFields) }) ###########################################################################/** # @RdocMethod attach # # @title "Attaches an Object to the R search path" # # \description{ # Attach the members of an Object to the \R search path. # # If trying to attach the same Object twice without detaching it in between, # a @warning will be generated and nothing will be done. # } # # @synopsis # # \arguments{ # \item{private}{If @TRUE, private fields will also be attached, # otherwise not.} # \item{pos}{The position at in search path where the Object should be # inserted.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the @Object was attached, otherwise @FALSE. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seemethod "detach" and @see "base::attach", @see "base::detach". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("attach", "Object", function(this, private=FALSE, pos=2, ...) { # To please R CMD check attachX <- base::attach attachName <- as.character.Object(this) if (is.element(attachName, search())) { warning(paste("Object is already attached:", attachName)) return(invisible(FALSE)) } envir <- attr(this, ".env") attachX(list(), name=attachName, pos=pos) members <- ls(envir=envir, all.names=private) for (member in members) { assign(member, get(member, envir=envir), pos=pos) } return(invisible(TRUE)) }) # attach() ###########################################################################/** # @RdocMethod detach # # @title "Detach an Object from the R search path" # # \description{ # Detach, from the \R search path, an Object that has previously been # attached. If the Object was not attached, a @warning will be generated # and nothing will be done. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the Object was detached, otherwise @FALSE. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seemethod "attach" and @see "base::attach", @see "base::detach". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("detach", "Object", function(this, ...) { attachName <- as.character.Object(this) if (!is.element(attachName, search())) { warning(paste("Object is not attached:", attachName)) return(invisible(FALSE)) } pos <- which(search() == attachName) if (length(pos) == 1L) detach(pos=pos) return(invisible(TRUE)) }) # detach() ###########################################################################/** # @RdocMethod save # # @title "Saves an Object to a file or a connection" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{file}{Filename or @connection to which the Object should be saved. # If @NULL, the Object will be save to a file named # "\{class name\}.\{memory location\}.RData", e.g. "Object.26979608.RData".} # \item{path}{The path where the file should be saved.} # \item{compress}{If @TRUE, the file is compressed to, otherwise not.} # \item{...}{Other arguments accepted by \code{save()} in the base package.} # \item{safe}{If @TRUE and \code{file} is a file, then, in order to lower # the risk for incomplete files, the object is first written to a # temporary file, which is then renamed to the final name.} # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seemethod "load" and @see "base::save", @see "base::load". # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{IO} #*/########################################################################### setMethodS3("save", "Object", function(this, file=NULL, path=NULL, compress=TRUE, ..., safe=TRUE) { if (is.null(file)) { file <- sprintf("%s.%d.RData", class(this)[1], getInternalAddress(this, format="numeric")) } # Saving to a file? saveToFile <- (!inherits(file, "connection")) if (saveToFile) { if (!is.null(path) && path != "") { # 1. Remove any '/' or '\' at the end of the path string. path <- gsub("[/\\]*$", "", path) # 2. Add a '/' to the end. if (regexpr("/$", path) == -1) path <- paste(path, "/", sep="") # 3. Paste the path and the file together. file <- as.character(file) file <- paste(path, file, sep="") } } # Write to a temporary file? if (safe && saveToFile) { # Final pathname pathname <- file # Temporary pathname pathnameT <- sprintf("%s.tmp", pathname) if (file.exists(pathnameT)) { throw("Cannot save to file. Temporary file already exists: ", pathnameT) } # Write to a temporary file file <- pathnameT on.exit({ if (!is.null(pathnameT) && file.exists(pathnameT)) { file.remove(pathnameT) } }, add=TRUE) } # For some unknown reason is save.default() adding the variables # 'exp', 'object', 'row' and 'value' to environment of this object. # /HB 031020 saveLoadReference <- this res <- base::save(saveLoadReference, file=file, ..., compress=compress) # Rename temporary file? if (safe && saveToFile) { file.rename(pathnameT, pathname) if (!file.exists(pathname) || file.exists(pathnameT)) { throw("Failed to rename temporary file: ", pathnameT, " -> ", pathname) } pathnameT <- NULL file <- pathname } invisible(res) }) # save() ###########################################################################/** # @RdocMethod load # # @title "Static method to load an Object from a file or a connection" # # \description{ # @get "title", which previously have been saved using \code{save()} of # class Object. # } # # @synopsis # # \arguments{ # \item{file}{Filename or @connection from where to read the Object.} # \item{path}{The path where the file exists.} # \item{...}{Not used.} # } # # \value{ # Returns a reference to the loaded Object. # } # # \details{ # Please note that no constructors are called when an Object is loaded # and neither is any static class code called. # } # # \section{Type control}{ # Typically this static method is called as \code{$load(...)} # where \code{} is any Object class. When an Object has been # loaded, it is verified that it inherits from \code{}. If it # does not, an exception is thrown. Thus, \code{Object$load(...)} will # load any Object, but \code{MyClass$load(...)} will only load an Object # that inherits from MyClass. If loaded object is not of correct class, # an exception is thrown. # } # # \section{Troubleshooting}{ # Due to a bug, likely in \R itself, one can not specify the \code{file} # argument by its name, i.e. \code{Object$load(file="foo.RData")} will # not work, but \code{Object$load("foo.RData")} work just fine. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seemethod "save" and # @see "base::save", @see "base::load". # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{IO} #*/########################################################################### setMethodS3("load", "Object", function(static, file, path=NULL, ...) { if (!inherits(file, "connection")) { if (!is.null(path) && path != "") { # 1. Remove any '/' or '\' at the end of the path string. path <- gsub("[/\\]*$", "", path) # 2. Add a '/' to the end. if (regexpr("/$", path) == -1) path <- paste(path, "/", sep="") # 3. Paste the path and the file together. file <- as.character(file) file <- paste(path, file, sep="") } } # load.default() recognized gzip'ed files too. saveLoadReference <- NULL; # To please R CMD check R v2.6.0 vars <- load.default(file=file) if (!is.element("saveLoadReference", vars)) throw("The file does not contain an R.oo Object: ", file) object <- saveLoadReference # Assert that the loaded object inherits from the same class as the # static object used to call this method. if (!inherits(object, class(static)[1])) { throw("Loaded an Object from file, but it does not inherit from ", class(static)[1], " as expected: ", paste(class(object), collapse=", ")) } object }, static=TRUE) # load() ###########################################################################/** # @RdocMethod objectSize # # @title "Gets the size of the Object in bytes" # # \description{ # @get "title" by summing the sizes of all its # members. For this reason, the size of memory the Object actually # allocates might vary slightly. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @integer specifying the size of the object in number of bytes. # } # # \examples{ # obj <- Object() # obj$x <- 1:100 # obj$y <- 100:1 # objectSize(obj) # 856 # } # # @author # # \seealso{ # To clear fields that are declared \code{cached}, # see @seemethod "clearCache". # @see "utils::object.size". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("objectSize", "Object", function(this, ...) { envir <- attr(this, ".env") members <- ls(envir=envir, all.names=TRUE) totalSize <- 0 for (member in members) { size <- eval(substitute(object.size(member), list(member=as.name(member))), envir=envir) totalSize <- totalSize + size } totalSize }) # objectSize() ###########################################################################/** # @RdocMethod getStaticInstance # # @title "Gets the static instance of this objects class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a reference to an @Object. # } # # \examples{ # ex <- Exception("Oops!") # obj <- getStaticInstance(ex) # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getStaticInstance", "Object", function(this, ...) { className <- class(this)[1L] # WAS: clazz <- get(className) # (a) Search namespace of package specified by internal field # '...package' of the Object environment. This field is # set by the constructor. Since it was introduced in # R.oo v1.14.0, it is not guaranteed to exist. envir <- getEnvironment(this) package <- envir$...package if (!is.null(package)) { ## As long as package supports R (< 2.14.0) if (!exists("requireNamespace", envir=baseenv(), inherits=TRUE)) { requireNamespace <- function(package, quietly=TRUE, ...) { tryCatch({ suppressPackageStartupMessages({ loadNamespace(package, ...) }) TRUE }, error = function(ex) FALSE) } } # Check if namespace can be retrieved. This may not possible if # for instance an Object is loaded from disk and the package name # has changed since it was last saved. if (requireNamespace(package, quietly=TRUE)) { ns <- getNamespace(package) clazz <- .getClassByName(className, where="ns", envir=ns, mustExist=FALSE) if (!is.null(clazz)) { static <- getStaticInstance(clazz) return(static) } } } # (b) Search all loaded namespaces clazz <- .getClassByName(className, where=c("ns*", "search"), mustExist=FALSE) if (!is.null(clazz)) { static <- getStaticInstance(clazz) return(static) } # (c) Search parent environment clazz <- .getClassByName(className, where="ns", envir=parent.frame(2L), mustExist=FALSE) if (!is.null(clazz)) { static <- getStaticInstance(clazz) return(static) } stop("Cannot get static instance. Failed to locate Class object for class '", className, "'.") }, protected=TRUE) # getStaticInstance() ###########################################################################/** # @RdocMethod getFields # @aliasmethod names # # @title "Returns the field names of an Object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{private}{If @TRUE, private fields will also be returned, # otherwise only public fields are returned.} # \item{...}{Not used.} # } # # \value{ # Returns a @character @vector of field names. # } # # \examples{ # obj <- Object() # obj$x <- 1:100 # obj$y <- 100:1 # getFields(obj) # # \dontrun{ # gives: # # [1] "x" "y" # } # } # # @author # # \seealso{ # To check if a field exists or not, see @seemethod "hasField". # For more extensive information about the fields in an Object see # @seemethod "ll". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getFields", "Object", function(this, private=FALSE, ...) { envir <- attr(this, ".env") ls(envir=envir, all.names=private) }) # getFields() setMethodS3("names", "Object", function(x, ...) { getFields(x, ...) }, private=TRUE) # names() ###########################################################################/** # @RdocMethod hasField # # @title "Checks if a field exists or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{field}{@vector of fields to be checked if they exists or not.} # \item{...}{Not used.} # } # # \value{ # Returns a @logical @vector indicating for each field if it exists or not. # } # # \examples{ # obj <- Object() # obj$x <- 1:100 # obj$y <- 100:1 # hasField(obj, c("x", "a", "b", "y")) # # \dontrun{ # gives: # # [1] TRUE FALSE FALSE TRUE # } # } # # @author # # \seealso{ # To get the fields of an Object, see @seemethod "getFields". # For more extensive information about the fields in an Object see # @seemethod "ll". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("hasField", "Object", function(this, field, ...) { !is.na(match(field, getFields(this, private=TRUE))) }) # hasField() ###########################################################################/** # @RdocMethod ll # # @title "Generates a list of informative properties of all members of an Object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Any arguments accepted by the underlying function \code{ll()}.} # } # # \value{ # Returns a @data.frame containing information about all the members. # } # # \examples{ # obj <- Object() # obj$x <- 1:100 # obj$y <- 100:1 # ll(obj) # # \dontrun{ # gives: # # member data.class dimension objectSize # 1 x numeric 100 424 # 2 y numeric 100 424 # } # } # # @author # # \seealso{ # @see "ll.default". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("ll", "Object", function(this, ...) { ll(..., envir=attr(this, ".env")) }) # ll() ###########################################################################/** # @RdocMethod staticCode # # @title "Method that will be call each time a new instance of a class is created" # # \description{ # @get "title". # # By extending this method it is possible to have static code that is called # each time a new instance of a class is created. # } # # @synopsis # # \arguments{ # \item{static}{The static instance of this class.} # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # \details{ # The method \code{extend()} in the Object class will call this method just # before returning and it will pass the static instance of the class as a # reference. Note that method should never be called explicitly. # # Any value returned by this method will be ignored. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("staticCode", "Object", function(static, ...) { # Note that this code will never be called when a "pure" # Object is created, but for instances of all other # class staticCode() will be called. }, private=TRUE) ###########################################################################/** # @RdocMethod extend # # @title "Extends another class" # # \description{ # via a mechanism known as "parasitic inheritance". # Simply speaking this method "extends another class". What is actually # happening is that it creates an instance of class name \code{...className}, # by taking another Object instance and add \code{...className} to the class # list and also add all the named values in @... as fields to the # new instance. # # The method should be used by the constructor of a class and nowhere else. # } # # @synopsis # # \arguments{ # \item{...className}{The name of new class.} # \item{...}{Named values representing the fields of the new instance.} # \item{...fields}{An optional named @list of fields. This makes it possible # to specify a set of fields using a @list object.} # \item{...envir}{An @environment.} # \item{...finalize}{ # A @logical controlling whether method @seemethod "finalize" should # be called on the @see Object when it is garbage collected or not. # If @TRUE, it will be called. If @FALSE, it will not be called. # If @NA, it will be called according to argument \code{finalize} # of the @see Object constructor. # } # } # # \value{ # Returns an Object of class \code{className}. # } # # \details{ # The reason for the strange name of argument \code{"...className"} is that # if one tries to set a field with a name that is a prefix of the name of # this arguments and one at the same time does not specify the name of this # argument one would run into strange errors. For instance, try # \code{extend(Object(), "MyClass", ...c=0)}. # } # # \section{Field modifiers}{ # It is possible to specify modifiers to some of the fields. Currently it # is only the \code{cached} modifier that is recognized. A field that is # cached will be assigned @NULL when @seemethod "clearCache" is called. # To specify a modifier, append a comma separated list of modifiers followed # by a colon, e.g. "cached:foo". # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### if (is.element("R.oo", search())) { rm(list="extend", pos="R.oo"); # To avoid warning about renaming existing extend() } setMethodS3("extend", "Object", function(this, ...className, ..., ...fields=NULL, ...envir=parent.frame(), ...finalize=NA) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - parseModifiers <- function(args, ...) { names <- names(args) pattern <- "([abcdefghijklmnopqrstuvwxyz ]*):(.*)$" modifiers <- rep("", length(names)) idx <- grep(pattern, names) modifiers[idx] <- gsub(pattern, "\\1", names[idx]) modifiers <- strsplit(modifiers, split=" ") modifiers <- lapply(modifiers, gsub, pattern=" *", replacement="") # Get the real names names[idx] <- gsub("[abcdefghijklmnopqrstuvwxyz ]*:", "", names[idx]) names(args) <- names # Set modifier attributes mods <- list() for (type in c("cached")) { mods[[type]] <- names[modifiers == type] } attr(args, "modifiers") <- mods args } # parseModifiers() # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Main # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # The environment of 'this' Object this.env <- attr(this, ".env") fields <- c(list(...), ...fields) # Identify and renamed fields that have modifiers in their names fields <- parseModifiers(fields) names <- names(fields) for (ii in seq_along(fields)) { name <- names[ii] if (is.null(name) || nchar(name) == 0) { callNames <- names(sys.call()) callNames <- callNames[nchar(callNames) > 0] matchNames <- paste("^", callNames, sep="") for (jj in seq_along(matchNames)) { if (regexpr(matchNames[jj], "...className") != -1) { className <- sys.call()[[3]] throw("Could not set field of class (probably called ", className, ") because the field name is a prefix to the argument name ", "\"...className\": ", callNames[jj]) } } # for (jj ...) throw("Missing name of field #", ii, " in class definition: ", ...className) } assign(name, fields[[ii]], envir=this.env) } # for (ii ...) # Set class class(this) <- unique(c(...className, class(this))) # Should the Object be finalized? finalize <- TRUE if (exists("...finalize", envir=this.env, inherits=FALSE)) { finalize <- get("...finalize", finalize, envir=this.env, inherits=FALSE) finalize <- isTRUE(finalize) } # Override by extend(..., ...finalize=TRUE/FALSE)? if (!is.na(...finalize)) finalize <- isTRUE(...finalize) if (finalize) { # Note, we have to re-register the finalizer here and not in Object(), # because here the reference variable 'this' will have the correct # class attribute, which it does not in Object(). finalizer <- .makeObjectFinalizer(this, reloadRoo=TRUE) onexit <- getOption("R.oo::Object/finalizeOnExit", FALSE) reg.finalizer(this.env, finalizer, onexit=onexit) } # extend(..., ...finalize=FALSE) should always remove any # previously registered finalizers. if (!is.na(...finalize) && !isTRUE(...finalize)) { # Unregister finalizer (by registering a dummy one) reg.finalizer(this.env, f=function(...) {}) } # Finally, create the static instance? if (!is.element("Class", ...className)) { static <- getStaticInstance(this, envir=...envir) if (!is.null(static)) { staticCode(static) } } # Record field modifiers # Get the field modifiers (always a list) modifiers <- attr(fields, "modifiers") # Append already existing modifiers? if (exists("...modifiers", envir=this.env, inherits=FALSE)) { modifiersT <- get("...modifiers", envir=this.env, inherits=FALSE) for (key in names(modifiersT)) { modifiers[[key]] <- c(modifiers[[key]], modifiersT[[key]]) } } # Drop duplicated modifier entries and sort modifiers <- lapply(modifiers, FUN=function(mods) { sort(unique(mods)) }) # Record modifiers assign("...modifiers", modifiers, envir=this.env) this }) # extend() ###########################################################################/** # @RdocMethod $ # @aliasmethod [[ # # @title "Makes the fields and methods of an Object accessible via the \$ and the [[ operator" # # \description{ # Makes the fields and methods of an Object accessible via the \code{$} # operator. This method is never called explicitly, but through an indirect # usage of the \code{$} operator, e.g. \code{obj$name} or # \code{obj$getValue()}. # # 1) This method will first search for a \code{get()} method, e.g. if # name has the value \code{"age"}, a \code{getAge()} will be looked for. # If such a method exists it will be called with the Object as the first # and only argument, e.g. \code{getAge(this)}. # # A \code{get()} is only looked for if \code{} is not a private # field. A private field is a name \emph{beginning} with a \code{.} # (period). The rational for this naming convention is to be consistent # with how @see "base::ls" works, which will not list such members # by default. # # 2) If no such method exists, first then, this method will look a field in # the Object can has the name \code{name}. # # 3) If such neither exists, a method with name \code{name} will be # searched for and returned. # # 4) Otherwise, a static field will be looked for. # # 5) If no fields or methods are found at all, @NULL is returned. # } # # \usage{ # \method{$}{Object}(this, name) # \method{[[}{Object}(this, name, exact=TRUE) # } # # \arguments{ # \item{name}{The name of the field or method to be accessed.} # } # # \value{ # Returns the value of a field or a method (@function). # If no such field or method exists, @NULL is returned. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("$", "Object", function(this, name) { .subset2Internal(this, name=name, exact=TRUE) }) setMethodS3("[[", "Object", function(this, name, exact=TRUE) { .subset2Internal(this, name=name, exact=exact) }) setMethodS3(".subset2Internal", "Object", function(this, name, exact=TRUE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .getStaticInstance <- function(this, static=NULL) { if (!is.null(static)) return(static) getStaticInstance(this) } # .getStaticInstance() memberAccessorOrder <- attr(this, ".memberAccessorOrder") if (is.null(memberAccessorOrder)) { memberAccessorOrder <- c(1L, 2L, 3L, 4L, 5L) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # (a) Check if there is a cache lookup available. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - envir <- attr(this, ".env") cacheName <- paste("...$.lookup", name, sep=".") if (!is.null(envir) && exists(cacheName, envir=envir, inherits=FALSE)) { envirCache <- envir lookup <- get(cacheName, envir=envirCache, inherits=FALSE) if (identical(attr(lookup, "memberAccessorOrder"), memberAccessorOrder)) { if (lookup == 1L) { # Still to be figured out how to do! /HB 2003-01-18 # memberAccessorOrder <- attr(lookup, "possibilities") } else if (lookup == 2L) { envir2 <- envir return( get(name, envir=envir2) ) } else if (lookup == 3L) { return( attr(this, name) ) } else if (lookup == 4L) { fcn <- attr(lookup, "fcn") if (!is.null(fcn)) { return(fcn) } # Backward compatibility for Object:s saved with R.oo < 1.10.0, # which used deprecated attr(lookup, "method"). The below code # will NULL the 'lookup' and force an updated. } else if (lookup == 5L) { return( get(name, envir=attr(lookup, "static.envir")) ) } } # if (identical(attr(lookup, ...))) lookup <- NULL } else { lookup <- NULL } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # (b) Otherwise search # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static <- NULL for (memberAccessor in memberAccessorOrder) { if (memberAccessor == 1L) { if (is.null(attr(this, "disableGetMethods"))) { firstChar <- substr(name, start=1L, stop=1L) # Do not try to access private fields using a get() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! # Is it a private field? if (!identical(firstChar, ".")) { # Field names can not contain spaces... if (regexpr(" ", name) == -1L) { # 1. Is there a get() method? capitalizedName <- name substr(capitalizedName, start=1L, stop=1L) <- toupper(firstChar) getMethodNames <- paste("get", capitalizedName, ".", class(this), sep="") static <- .getStaticInstance(this, static=static) envirS <- environment(static) for (getMethodName in getMethodNames) { method <- .getS3Method(getMethodName, envir=envirS, mustExist=FALSE) if (!is.null(method)) { ref <- this attr(ref, "disableGetMethods") <- TRUE # For caching purposes, if the field is trying to be # accessed, we do not want to call get() again! If # is not a virtual field, the it has to be a real field, an # attribute, a static field etc. We do not know in advance, # but we know it is nothing we already tried, hence lookup <- memberAccessor attr(lookup, "memberAccessorOrder") <- memberAccessorOrder pos <- which(memberAccessorOrder == memberAccessor) attr(lookup, "possibilities") <- memberAccessorOrder[-(1:pos)] assign(cacheName, lookup, envir=envir) return(method(ref)) } } # for (...) } # if ("no space in the name") } # if ("is private field") } # if (is.null(attr(this, "disableGetMethods"))) } else if (memberAccessor == 2L) { # 2. Is it a field? # For static method calls, e.g. Object$load, 'this' has no # environment assigned and therefore, for now, no static # fields. if (!is.null(envir) && exists(name, envir=envir, inherits=FALSE)) { lookup <- memberAccessor attr(lookup, "memberAccessorOrder") <- memberAccessorOrder assign(cacheName, lookup, envir=envir) envirStatic <- envir return(get(name, envir=envirStatic, inherits=FALSE)) } } else if (memberAccessor == 3L) { # 3. Is it an attribute field (slot)? if (is.element(name, names(attributes(this)))) { lookup <- memberAccessor attr(lookup, "memberAccessorOrder") <- memberAccessorOrder assign(cacheName, lookup, envir=envir) return(attr(this, name)) } } else if (memberAccessor == 4L) { # 4. Is it a static S3 method? static <- .getStaticInstance(this, static=static) envirS <- environment(static) methodNames <- paste(name, class(this), sep=".") for (methodName in methodNames) { method <- .getS3Method(methodName, envir=envirS, mustExist=FALSE) if (!is.null(method)) { # Using explicit UseMethod() code code <- sprintf("function(...) \"%s\"(this, ...)", name) fcn <- eval(base::parse(text=code)) ## environment(fcn) <- environment(method) lookup <- memberAccessor attr(lookup, "memberAccessorOrder") <- memberAccessorOrder attr(lookup, "fcn") <- fcn assign(cacheName, lookup, envir=envir) return(fcn) } } } else if (memberAccessor == 5L) { # 5. Finally, if nothing is found, it might be that it is a static field static <- .getStaticInstance(this, static=static) static.envir <- attr(static, ".env") # For static method calls, e.g. Object$load, 'this' has no # environment assigned and therefore, for now, no static # fields. if (!is.null(static.envir) && exists(name, envir=static.envir, inherits=FALSE)) { lookup <- memberAccessor attr(lookup, "memberAccessorOrder") <- memberAccessorOrder attr(lookup, "static.envir") <- static.envir assign(cacheName, lookup, envir=envir) return(get(name, envir=static.envir, inherits=FALSE)) } } } # for (memberAccessor in memberAccessorOrder) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # (c) If not found, return NULL. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lookup <- -1L attr(lookup, "memberAccessorOrder") <- memberAccessorOrder assign(cacheName, lookup, envir=envir) NULL }, private=TRUE) # .subset2Internal() ###########################################################################/** # @RdocMethod $<- # @aliasmethod [[<- # # @title "Makes the fields and methods of an Object assignable via the \$<- and the [[<- operator" # # \description{ # Makes the fields and methods of an Object assignable via the \code{$<-} # operator. This method is never called explicitly, but through an indirect # usage of the \code{$<-} operator, e.g. \code{obj$name <- "foo"}. # # 1) This method will first search for a \code{set()} method, e.g. if # name has the value \code{"age"}, a \code{setAge()} will be looked for. # If such a method exists it will be called with the Object as the first # argument and \code{value} as the second, e.g. \code{setAge(this, value)}. # # A \code{set()} is only looked for if \code{} is a non-private # field. A private field is a name \emph{beginning} with a \code{.} (period). # The rational for this naming convention is to be consistent # with how @see "base::ls" works, which will not list such members # by default. # Moreover, excluding private fields for the search of a \code{set()} # will decrease the overhead for such field. # # 2) If no such method exists the \code{value} will be assigned to an # existing field named \code{name}, if such exists. # # 3) Otherwise, the value will be assigned to a static field, # if such exists. # # 4) In all other case, the value is assigned to a new field. # # Because any \code{set()} is called first, it is possible to # \emph{encapsulate} (hide away) fields with certain names or to put # restrictions to what values can be assigned to them. # } # # \usage{ # \method{$}{Object}(this, name) <- value # \method{[[}{Object}(this, name) <- value # } # # \arguments{ # \item{name}{The name of the \code{set()} method or the name of # the field to be assigned the new value.} # \item{value}{The value to be assigned.} # } # # \value{ # Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. # } # # \examples{\dontrun{For a complete example see help(Object).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("$<-", "Object", function(this, name, value) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .getStaticInstance <- function(this, static=NULL) { if (!is.null(static)) return(static) getStaticInstance(this) } # .getStaticInstance() memberAccessorOrder <- attr(this, ".memberAccessorOrder") if (is.null(memberAccessorOrder)) { memberAccessorOrder <- c(1,2,3,4,5) } static <- NULL for (memberAccessor in memberAccessorOrder) { if (memberAccessor == 1) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Search for a set() method # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (is.null(attr(this, "disableSetMethods"))) { firstChar <- substr(name, 1,1) # Do not try to access private fields using a set() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! # Is it a private field? if (!identical(firstChar, ".")) { # Field names can not contain spaces... if (regexpr(" ", name) == -1) { # 1. Is it a set() method? capitalizedName <- name substr(capitalizedName,1,1) <- toupper(firstChar) setMethodNames <- paste("set", capitalizedName, ".", class(this), sep="") static <- .getStaticInstance(this, static=static) envirS <- environment(static) for (setMethodName in setMethodNames) { method <- .getS3Method(setMethodName, envir=envirS, mustExist=FALSE) if (!is.null(method)) { ref <- this attr(ref, "disableSetMethods") <- TRUE method(ref, value) return(invisible(this)) } } } # if ("no space in the name") } # if ("is private field") } # if (is.null(attr(this, "disableSetMethods"))) } else if (memberAccessor == 2) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Search for a field # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 2. If there exists a field, assign the value to that field. envir <- attr(this, ".env") if (exists(name, envir=envir, inherits=FALSE)) { assign(name, value, envir=envir) return(invisible(this)) } } else if (memberAccessor == 3) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Search for a attribute. /Should this be removed? # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 3. If there exists an attribute field, assign the value to that field. if (is.element(name, names(attributes(this)))) { attr(this, name) <- value return(invisible(this)) } } else if (memberAccessor == 4) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Search for a static field # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 4. If not, it might be that it is a static field static <- .getStaticInstance(this, static=static) static.envir <- attr(static, ".env") # For static method calls, e.g. Object$load, 'this' has no # environment assigned and therefore, for now, no static # fields. if (!is.null(static.envir) && exists(name, envir=static.envir, inherits=FALSE)) { assign(name, value, envir=static.envir) return(invisible(this)) } } else if (memberAccessor == 5) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Create a new field # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 5. Otherwise, assign the value to a new field. assign(name, value, envir=envir) return(invisible(this)) } } # for (memberAccessor in memberAccessorOrder) invisible(this) }) # $<-() setMethodS3("[[<-", "Object", function(this, name, value) { ## (1) R.oo (>= 0.47 && <= 1.21.0) [2002-10-23 -- 2016-10-30]: ## ## Using UseMethod("$<-") will fail in R (>= 3.6.0) with: ## _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_=true ## _R_S3_METHOD_LOOKUP_USE_TOPENV_AS_DEFENV_=true ## Exactly like that, both need to be TRUE. ## ## Example from aroma.cn R CMD checks: ## *** S3 method lookup problem *** ## [1] "$<-" ## ## ## Error in UseMethod("$<-") : ## no applicable method for '$<-' applied to an object of ## class "c('CopyNumberRegions', 'Object')" ## Calls: +.CopyNumberRegions -> [[<- -> [[<-.Object ## Execution halted ## ## ## (2) R.oo (<= 0.46) [prior to 2002-10-14]: ## ## `$<-`(this, name, value) ## ## This approach does not work, because the `name` argument will ## carry the value "name", not the value of argument 'name'. ## TESTS: tests/Object.R and tests/BasicObject.R test for this. ## ## ## (3) R.oo (>= 1.22.0) [since 2018-04-21]: ## ## Using do.call() works around the problem in (2). do.call(`$<-`, args = list(this, name, value)) }) # "[[<-"() ###########################################################################/** # @RdocMethod isReferable # # @title "Checks if the object is referable or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @logical value, which by default is @TRUE for all @Object's. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("isReferable", "Object", function(this, ...) { TRUE }, private=TRUE) # isReferable() ###########################################################################/** # @RdocMethod novirtual # # @title "Returns a reference to the same Object with virtual fields turned off" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @Object. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("novirtual", "Object", function(this, ...) { attr(this, "disableGetMethods") <- TRUE attr(this, "disableSetMethods") <- TRUE this }, private=TRUE) setMethodS3("callSuperMethodS3", "default", function(this, methodName, ..., nbrOfClassesAbove=1) { if (nbrOfClassesAbove < 0) { throw("Argument 'nbrOfClassesAbove' is negative.") } classes <- class(this) nbrOfClassesAbove <- min(nbrOfClassesAbove, length(classes)) classes <- classes[-seq_len(nbrOfClassesAbove)] if (length(classes) == 0) { methods <- methodName } else { methods <- c(paste(methodName, classes, sep="."), methodName) } availableMethods <- c(methods(methodName), methodName) for (method in methods) { if (is.element(method, availableMethods)) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(method, mode="function")) { return(do.call(method, args=list(this, ...))) } } } throw("No applicable methods '", methodName, "' available among the superclasses: ", classes) }, private=TRUE) ###########################################################################/** # @RdocMethod newInstance # # @title "Creates a new instance of the same class as this object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Arguments passed to the constructor of the corresponding # @see "Object" class.} # } # # \value{ # Returns a reference to an instance of @see "Object" or a subclass thereof. # } # # @author # # \seealso{ # @see "newInstance.Class". # @see "newInstance.BasicObject". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("newInstance", "Object", function(this, ...) { # Creates a new instance of the same class clazz <- Class$forName(class(this)[1]) newInstance(clazz, ...) }, private=TRUE) ###########################################################################/** # @RdocMethod getEnvironment # # @title "Gets the environment of this object" # # \description{ # @get "title". # This is the environment where the members of the Object are stored. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @environment. # } # # \examples{ # ll(R.oo) # ll(envir=getEnvironment(R.oo)) # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getEnvironment", "Object", function(fun, ...) { # To please R CMD check this <- fun attr(this, ".env") }, protected=TRUE) ###########################################################################/** # @RdocMethod clearLookupCache # # @title "Clear internal fields used for faster lookup" # # \description{ # @get "title" by removing these fields. # This method is called whenever @seemethod "clearCache" is called on the # object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns itself (invisible). # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("clearLookupCache", "Object", function(this, ...) { env <- this$.env names <- ls(envir=env, pattern="^...\\$.lookup", all.names=TRUE) rm(list=names, envir=env) invisible(this) }, protected=TRUE) ###########################################################################/** # @RdocMethod clearCache # # @title "Clear fields that are defined to have cached values" # # \description{ # @get "title" by assigning @NULL to these fields. # } # # @synopsis # # \arguments{ # \item{recursive}{If @TRUE, the same method is called also on all # fields that are @see "Object":s. Circular dependencies can exists.} # \item{gc}{If @TRUE, the garbage collector is called, otherwise not.} # \item{...}{Not used.} # } # # \value{ # Returns itself (invisible). # } # # @examples "../incl/gc.clearCache.Rex" # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("clearCache", "Object", function(this, recursive=TRUE, gc=FALSE, ...) { env <- attr(this, ".env") fields <- getFieldModifier(this, "cached") for (field in fields) { # Or remove them? assign(field, NULL, envir=env) } this <- clearLookupCache(this) if (recursive) { # Make sure that this object has not already been called # earlier in the same clear-cache request. if (!exists("...clearCache", envir=env, inherits=FALSE)) { assign("...clearCache", TRUE, envir=env) on.exit(rm(list="...clearCache", envir=env)) fields <- getFields(this, private=TRUE) for (field in fields) { object <- get(field, envir=env, inherits=FALSE) if (inherits(object, "Object")) { clearCache(object, recursive=TRUE, gc=FALSE) } } } } # Run the garbage collector? if (gc) base::gc() invisible(this) }) ###########################################################################/** # @RdocMethod getFieldModifiers # @aliasmethod getFieldModifier # # @title "Gets all types of field modifiers" # # \description{ # @get "title", if any. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a named @list. # } # # @author # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getFieldModifiers", "Object", function(this, ...) { env <- attr(this, ".env") if (!exists("...modifiers", envir=env, inherits=FALSE)) { return(list()) } get("...modifiers", envir=env, inherits=FALSE) }, protected=TRUE) setMethodS3("getFieldModifier", "Object", function(this, name, ...) { getFieldModifiers(this, ...)[[name]] }, protected=TRUE) setMethodS3(".DollarNames", "Object", function(x, pattern="") { ns <- getNamespace("utils") if (exists("findMatches", mode="function", envir=ns)) { findMatches <- get("findMatches", mode="function", envir=ns) } else { findMatches <- function(pattern, values) { grep(pattern, values, value=TRUE) } } findMatches(pattern, names(x)) }, appendVarArgs=FALSE, private=TRUE) R.oo/R/RdocException.R0000644000176200001440000000430713563564136014201 0ustar liggesusers###########################################################################/** # @RdocClass RdocException # # @title "RdocException are thrown by the Rdoc compiler" # # \description{ # @classhierarchy # # @get "title" when it fails to generate a Rd file from an Rdoc comment. # } # # @synopsis # # \arguments{ # \item{...}{Any arguments accepted by @Exception}. # \item{source}{Object specifying the source where the Rdoc error occurred. # This is commonly a filename @character string.}. # } # # \section{Fields and Methods}{ # @allmethods # } # # @author # # \seealso{ # For detailed information about exceptions see @Exception. # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setConstructorS3("RdocException", function(..., source=NULL) { extend(Exception(...), "RdocException", .source = source ) }) ###########################################################################/** # @RdocMethod as.character # # \title{Gets a character string representing of the RdocException} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("as.character", "RdocException", function(x, ...) { # To please R CMD check this <- x paste("[", getWhen(this), "] ", class(this)[1L], " in ", getSource(this), ": ", getMessage(this), sep = "") }) ###########################################################################/** # @RdocMethod getSource # # \title{Gets the source of the exception} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns the source. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getSource", "RdocException", function(x, ...) { x$.source }) R.oo/R/compileRdoc.R0000644000176200001440000000532413327450457013671 0ustar liggesusers###########################################################################/** # @RdocFunction compileRdoc # # @title "Compiles the Rdoc help comments in a package" # # \description{ # @get "title" by parsing the source code files and writes Rd help files. # } # # @synopsis # # \arguments{ # \item{pkgname}{A @character string specifying the package name. # If @NULL, the package name is inferred from the DESCRIPTION file # that is automatically search for in the subdirectories.} # \item{path}{A @character string specifying the path of the # package source directory.} # \item{...}{Additional arguments passed to \code{Rdoc\$compile()}.} # \item{verbose}{If @TRUE, verbose output is printed, otherwise not.} # } # # \value{ # Returns nothing. # } # # \details{ # To compile all Rdoc comments in a package 'PkgA' that is located # under the current working directory (e.g. \code{PkgA/R/*.R}) from # the system command line, do: # \preformatted{ # Rscript -e R.oo::compileRdoc() # } # } # # @author # # \seealso{ # See the @see "Rdoc" class. # } # # @keyword documentation # @keyword IO # @keyword internal #*/########################################################################### compileRdoc <- function(pkgname=NULL, path=pkgname, ..., verbose=TRUE) { require("R.oo") || stop("Package not loaded: R.oo") # Infer package name from DESCRIPTION? if (is.null(pkgname)) { dirs <- list.files() dirs <- dirs[file_test("-d", dirs)] pathnames <- file.path(dirs, "DESCRIPTION") pathnames <- pathnames[file_test("-f", pathnames)] if (length(pathnames) == 0L) { throw("Failed to infer package name, since no */DESCRIPTION file was found.") } if (length(pathnames) > 1L) { throw("Failed to infer unique package name, because more than one */DESCRIPTION file was found: ", paste(sQuote(pathnames), collapse=", ")) } pathname <- pathnames[1L] pi <- read.dcf(file=pathname) pkgname <- pi[,"Package", drop=TRUE] if (length(pkgname) == 0L) { throw("Failed to infer package name. No 'Package' was listed in ", sQuote(pathname), ".") } if (length(pkgname) > 1L) { throw("Failed to infer package name. More than one 'Package' were listed in ", sQuote(pathname), ": ", paste(sQuote(pkgname), collapse=", ")) } } if (is.null(path)) { path <- pkgname } if (!file_test("-d", path)) { throw("No such package directory: ", path) } pathR <- file.path(path, "R") if (!file_test("-d", pathR)) { throw("No such package R/ directory: ", pathR) } require(pkgname, character.only=TRUE) || throw("Package not loaded: ", pkgname) opwd <- setwd(pathR) on.exit(setwd(opwd)) Rdoc$compile(..., verbose=verbose) } # compileRdoc() R.oo/R/abort.R0000644000176200001440000000465513563564136012550 0ustar liggesusers## covr: skip=all ###########################################################################/** # @RdocDefault abort # @alias abort.condition # # @title "Aborts the current expression call" # # \description{ # @get "title" and returns to the top level prompt/browser # \emph{without signaling a condition}. # } # # @synopsis # # \arguments{ # \item{...}{(optional) Objects coerced to @character and pasted together without a separator, or a @condition object. If no object are given, no message is printed.} # \item{call.}{If @TRUE, the call is added to the message, otherwise not.} # \item{domain}{Used to translate the message (see @see "base::gettext"). If @NA, messages will not be translated.} # } # # \value{ # Returns nothing. # } # # \details{ # There are still cases where one can "catch" the abort and undo it, cf. [1]. # } # # \examples{\dontrun{ # @include "../incl/abort.Rex" # }} # # @author # # \seealso{ # @see "throw". # @see "base::stop". # Internally, @see "base::invokeRestart"\code{("abort")} is utilized. # } # # \references{ # [1] R-devel thread '', Sept 11, 2012, # \url{https://stat.ethz.ch/pipermail/r-devel/2012-September/064838.html}.\cr # } # # @keyword error # @keyword internal #*/########################################################################### setMethodS3("abort", "condition", function(cond, ..., call.=TRUE, domain=NULL) { message <- conditionMessage(cond) call <- conditionCall(cond) if (is.null(call)) { msg <- sprintf("%s", .makeMessage("Abort", domain=domain)) } else { call <- deparse(call) msg <- sprintf("%s %s", .makeMessage("Abort in", domain=domain), call) } msg <- sprintf("%s: %s\n", msg, message) cat(msg, file=stderr()) abort() }) setMethodS3("abort", "default", function(..., call.=TRUE, domain=NULL) { args <- list(...) if (nargs() > 0) { message <- .makeMessage(..., domain=domain) nframe <- sys.nframe() if (nframe <= 2) call. <- FALSE if (call.) { call <- sys.call(which=nframe-2L) if (is.null(call)) { msg <- sprintf("%s", .makeMessage("Abort", domain=domain)) } else { call <- deparse(call) msg <- sprintf("%s %s", .makeMessage("Abort in", domain=domain), call) } msg <- sprintf("%s: %s\n", msg, message) } else { msg <- sprintf("%s: %s\n", .makeMessage("Abort", domain=domain), message) } cat(msg, file=stderr()) } # Now abort R. invokeRestart("abort") }) R.oo/R/throw.default.R0000644000176200001440000000307513563564136014222 0ustar liggesusers###########################################################################/** # @RdocDefault throw # # @title "Throws an Exception" # # \description{ # Throws an exception similar to \code{stop()}, but with support for # @see "Exception" classes. The first argument (\code{object}) is by # default pasted together with other arguments (@...) and with separator # \code{sep=""}. For instance, to throw an exception, write # # \code{throw("Value out of range: ", value, ".")}. # # which is short for # # \code{throw(Exception("Value out of range: ", value, "."))}. # # Note that \code{throw()} can be defined for classes inheriting # @see "Exception", which can then be caught (or not) # using \code{\link[base:conditions]{tryCatch}()}. # } # # @synopsis # # \arguments{ # \item{...}{One or several strings that are concatenated and collapsed # into on message string.} # } # # \value{ # Returns nothing. # } # # \examples{ # rbern <- function(n=1, prob=1/2) { # if (prob < 0 || prob > 1) # throw("Argument 'prob' is out of range: ", prob) # rbinom(n=n, size=1, prob=prob) # } # # rbern(10, 0.4) # # [1] 0 1 0 0 0 1 0 0 1 0 # tryCatch(rbern(10, 10*0.4), # error=function(ex) {} # ) # } # # @author # # \seealso{ # See the @see "Exception" class for more detailed information. # } # # \keyword{error} #*/########################################################################### setMethodS3("throw", "default", function(...) { throw(Exception(...)) }, overwrite=TRUE, conflict="quiet") setGenericS3("throw", overwrite=TRUE, force=TRUE) R.oo/R/006.fixVarArgs.R0000644000176200001440000000231313563564136014006 0ustar liggesusers# Added '...' to some base functions. These will later be # turned into default functions by setMethodS3(). # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Methods in 'base' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # USED TO DO: attach <- appendVarArgs(attach) attach <- function(...) UseMethod("attach") setMethodS3("attach", "default", function(...) { base::attach(...) }) # USED TO DO: detach <- appendVarArgs(attach) detach <- function(...) UseMethod("detach") setMethodS3("detach", "default", function(...) { base::detach(...) }) # USED TO DO: load <- appendVarArgs(load) load <- function(...) UseMethod("load") setMethodS3("load", "default", function(..., envir=parent.frame()) { base::load(..., envir=envir) }) # USED TO DO: save <- appendVarArgs(load) save <- function(...) UseMethod("save") setMethodS3("save", "default", function(..., envir=parent.frame()) { base::save(..., envir=envir) }) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Methods in 'methods' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - getClasses <- appendVarArgs(getClasses) getMethods <- appendVarArgs(getMethods) R.oo/R/Exception.R0000644000176200001440000003532713563564136013377 0ustar liggesusers###########################################################################/** # @RdocClass Exception # # \title{The Exception class to be thrown and caught} # # \description{ # @classhierarchy # # Creates an Exception that can be thrown and caught. The \code{Exception} # class is the root class of all other \code{Exception} classes. # } # # @synopsis # # \arguments{ # \item{...}{One or several strings, which will be concatenated and contain # informative message about the exception.} # \item{sep}{The string to used for concatenating several strings.} # \item{collapse}{The string to used collapse vectors together.} # } # # \section{Fields and Methods}{ # @allmethods # } # # @examples "../incl/Exception.Rex" # # @author # # \seealso{ # See also \code{\link[base:conditions]{tryCatch}()} (and @see "base::try"). # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setConstructorS3("Exception", function(..., sep="", collapse=", ") { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sys.functions <- function(parents) { functions <- list() for (kk in seq_along(parents)) { parent <- parents[kk] functions[[kk]] <- sys.function(which=kk) } functions } # sys.functions() fcnPathname <- function(call) { res <- attr(call, "srcref") if (is.null(res)) return("") res <- attr(res, "srcfile") res$filename } # fcnPathname() fcnName <- function(call) { code <- deparse(call[1]) # code <- grep("^function\\(", code, value=TRUE) if (length(code) == 0) return("") code <- code[1] code <- gsub("\\(.*", "", code) code } # fcnName() fcnBody <- function(fcn) { paste(deparse(fcn), collapse="\n") } # fcnBody() # "Each [...] function evaluation has a tuple, # (call, function definition, evaluation environment), # coupled to it, which can be retrieved via sys.{call,function,frame}()." # Source: help("sys.parent", package="base") calls <- sys.calls() parents <- sys.parents() functions <- sys.functions(parents) stackTrace <- list() for (kk in seq_along(calls)) { call <- calls[[kk]] fcn <- functions[[kk]] name <- fcnName(call) body <- fcnBody(fcn) envir <- environment(fcn) envirName <- environmentName(envir) pathname <- fcnPathname(call) trace <- list( call=call, name=name, body=body, envir=envirName, pathname=pathname ) stackTrace[[kk]] <- trace } # for (kk ...) rm(list=c("calls", "parents", "functions")) # The new class is Exception, but for convenience it should also # derive from 'try-error', which is used by try() etc. extend(Object(), c("Exception", "simpleError", "error", "condition", "try-error"), .msg = paste(..., sep=sep, collapse=collapse), .when = Sys.time(), .stackTrace = stackTrace ) }) ###########################################################################/** # @RdocMethod as.character # # \title{Gets a character string representing of the Exception} # # \description{ # @get "title". # By default the format is: "[\{POSIX date string\}] \{class name\}: \{msg\}". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("as.character", "Exception", function(x, ...) { # To please R CMD check this <- x paste("[", getWhen(this), "] ", class(this)[1], ": ", getMessage(this), sep="") }) ###########################################################################/** # @RdocMethod print # # \title{Prints the Exception} # # \description{ # @get "title". By default the \code{as.character()} representation plus # the stack trace is printed. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{Returns nothing.} # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seemethod "as.character". # @seemethod "getStackTrace". # @seemethod "printStackTrace". # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("print", "Exception", function(x, ...) { cat(getStackTraceString(x, ...)) }) ###########################################################################/** # @RdocMethod getWhen # # \title{Gets the time when the Exception was created} # # \description{ # Gets the time, as a POSIX object, when the Exception was created. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a POSIX time object. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getWhen", "Exception", function(this, ...) { this$.when }) ###########################################################################/** # @RdocMethod getMessage # # @title "Gets the message of the Exception" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getMessage", "Exception", function(this, ...) { this$.msg }) ###########################################################################/** # @RdocMethod throw # # \title{Throws an Exception that can be caught} # # \description{ # Throws an Exception that can be caught by \code{tryCatch()}. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # See also \code{\link[base:conditions]{tryCatch}()}. # This method overrides (and is fully backward compatible with) the one # defined in the \pkg{R.methodsS3} package. # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("throw", "Exception", function(this, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Record this Exception # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Exception$.lastException <- this # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Signal the exception as a condition # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - signalCondition(this) # Question: Are there ways to catch the above signals, and then via # some revoking mechanism continue below?!? /HB 2012-03-05 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # If not caught by any handlers, output message containing the stack trace # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Output an error message containing the stacktrace msg <- getStackTraceString(this, ...) cat(msg, file=stderr()) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # ...and *abort* # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Alt 1: Abort the current evaluation, but unfortunately abort() # is not guaranteed to not be "caught", cf. help("abort"). # abort() # Alt 2: An alternative is to call stop() again, which will resignal # a condition and then abort. The resignaled condition should not # really be caught by anything, because if so, it would have been # caught by the above signaling. This is based on the assumption # that it is not possible to continue after the above signal, # iff it is caught. /HB 2012-03-05 cond <- simpleCondition(getMessage(this)) class(cond) <- "condition" stop(cond) }, overwrite=TRUE, conflict="quiet") ###########################################################################/** # @RdocMethod getLastException # # \title{Static method to get the last Exception thrown} # # \description{ # Static method to get the last Exception created. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @see "Exception" object. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seeclass # See also \code{\link[base:conditions]{tryCatch}()}. # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getLastException", "Exception", function(this, ...) { Exception$.lastException }, static=TRUE) ###########################################################################/** # @RdocMethod getStackTrace # # \title{Gets the stack trace saved when the exception was created} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @list containing the stack trace. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seemethod "printStackTrace". # \code{\link[utils:debugger]{dump.frames}()}. # \code{\link[base:conditions]{tryCatch}()}. # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getStackTrace", "Exception", function(this, cleanup=getOption("R.oo::Exception/getStackTrace/args/cleanup", TRUE), ...) { stackTrace <- this$.stackTrace names(stackTrace) <- seq_along(stackTrace) # Remove "uninformative" steps, e.g. tryCatch() if (cleanup) { # (a) Drop anything before doTryCatch() names <- sapply(stackTrace, FUN=function(x) x$name) idxs <- which(is.element(names, c("doTryCatch"))) if (length(idxs) > 0) { idx <- idxs[length(idxs)] keep <- seq(from=idx+1L, to=length(stackTrace)) stackTrace <- stackTrace[keep] } # (b) Drop anything after throw() names <- sapply(stackTrace, FUN=function(x) x$name) idxs <- which(is.element(names, "throw")) if (length(idxs) > 0) { idx <- idxs[1L] keep <- seq_len(idx-1L) stackTrace <- stackTrace[keep] } } stackTrace <- rev(stackTrace) stackTrace }) ###########################################################################/** # @RdocMethod getCalls # @aliasmethod getCall # # \title{Gets the active calls saved when the exception was created} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an unnamed @list with @language elements. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seemethod "getStackTrace". # \code{\link[utils:debugger]{sys.calls}()}. # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getCalls", "Exception", function(this, ...) { stackTrace <- getStackTrace(this, ...) calls <- lapply(stackTrace, FUN=function(x) x$call) calls }) setMethodS3("getCall", "Exception", function(x, which=1L, ...) { # To please R CMD check (R >= 2.14.0) this <- x calls <- getCalls(this, ...) if (length(calls) == 0) { return(NULL) } calls[[which]] }) ###########################################################################/** # @RdocMethod getStackTraceString # # \title{Gets the stack trace as a string} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \seealso{ # @seemethod "getStackTrace". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getStackTraceString", "Exception", function(this, ..., details=TRUE) { head <- sprintf("%s\n", as.character(this)) stackTrace <- getStackTrace(this, ...) if (length(stackTrace) == 0) { return(head) } calls <- sapply(stackTrace, FUN=function(trace) trace$call) res <- character(length=length(calls)) for (kk in seq_along(calls)) { call <- calls[[kk]] rows <- deparse(call) if (details) { prefix1 <- sprintf(" at #%02d. ", as.integer(names(calls)[kk])) } else { prefix1 <- " at " } prefixT <- paste(rep(" ", times=nchar(prefix1)), collapse="") prefix <- rep(prefixT, times=length(rows)) prefix[1] <- prefix1 rows <- sprintf("%s%s", prefix, rows) res[kk] <- paste(rows, collapse="\n") } # for (kk ...) if (details) { locs <- sapply(stackTrace, FUN=function(trace) { name <- trace$name envir <- trace$envir s <- sprintf("%s()", name) if (envir == "") { s <- sprintf("%s is local of the calling function", s) } else { s <- sprintf("%s is in environment '%s'", s, envir) } s }) res <- sprintf("%s\n - %s", res, locs) pathnames <- sapply(stackTrace, FUN=function(trace) { trace$pathname }) pathnamesT <- sprintf("\n - originating from '%s'", pathnames) pathnamesT[nchar(pathnames) == 0] <- "" res <- sprintf("%s%s", res, pathnamesT) res <- sprintf("%s\n", res) } # if (details) res <- paste(res, collapse="\n") if (details) { res <- sprintf("%s\n%s\n", head, res) } else { res <- sprintf("%s%s\n", head, res) } res }, private=TRUE) ###########################################################################/** # @RdocMethod printStackTrace # # \title{Prints the stack trace saved when the exception was created} # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seemethod "getStackTrace". # \code{\link[base:conditions]{tryCatch}()}. # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("printStackTrace", "Exception", function(this, ...) { cat(getStackTraceString(this, ...)) }) R.oo/R/extend.default.R0000644000176200001440000000273113327450457014342 0ustar liggesusers###########################################################################/** # @RdocDefault extend # # @title "Extends a object" # # \description{ # via a mechanism known as "parasitic inheritance". # Simply speaking this method "extends" the class of an object. What is actually # happening is that it creates an instance of class name \code{...className}, # by taking another object and add \code{...className} to the class # list and also add all the named values in @... as attributes. # # The method should be used by the constructor of a class and nowhere else. # } # # @synopsis # # \arguments{ # \item{this}{Object to be extended.} # \item{...className}{The name of new class.} # \item{...}{Attribute fields of the new class.} # } # # \value{ # Returns an object of class \code{...className}. # } # # @author # # @examples "../incl/extend.default.Rex" # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("extend", "default", function(this, ...className, ...) { # Add class '...className' to the class vector class(this) <- unique(c(...className, class(this))) # Add attributes args <- list(...) names <- names(args) for (kk in seq_along(args)) { name <- names[kk] if (name == "class") throw("Trying to set class attribute: ", as.character(this)) arg <- args[[kk]] attr(this, name) <- arg } # Return modified object this }, conflict="quiet") R.oo/R/equals.default.R0000644000176200001440000000255013327450457014344 0ustar liggesusers###########################################################################/** # @RdocDefault equals # # @title "Compares an object with another" # # \description{ # @get "title" and returns @TRUE if they are equal. # The equal property must be # # 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be @TRUE. # # 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is @TRUE if and only # if \code{equals(o2,o1)} is @TRUE. # # 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is @TRUE and # \code{equals(o2,o3)} is @TRUE, then \code{equals(o1,o3)} should # be @TRUE. # # 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same # result on multiple invocations as long as nothing has changed. # # 6) \code{equals(o1,}@NULL\code{)} should return @FALSE, unless # \code{o1} is also @NULL. # # By default @see "base::identical" is used. # } # # @synopsis # # \arguments{ # \item{object, other}{Objects to be compared.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the objects are equal, otherwise @FALSE. # } # # @author # # \seealso{ # @see "base::identical". # } # # @keyword attribute # @keyword utilities # @keyword internal #*/########################################################################### setMethodS3("equals", "default", function(object, other, ...) { (is.null(object) && is.null(other)) || identical(object, other) }) R.oo/R/trim.R0000644000176200001440000000124513327450457012402 0ustar liggesusers###########################################################################/** # @RdocDefault trim # # @title "Converts to a string and removes leading and trailing whitespace" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{object}{A @vector of \R objects to be trimmed.} # \item{...}{Not used.} # } # # \value{ # Returns a @vector of @character strings. # } # # @author # # @keyword character # @keyword internal #*/########################################################################### setMethodS3("trim", "default", function(object, ...) { s <- sub("^[\t\n\f\r ]*", "", as.character(object)) s <- sub("[\t\n\f\r ]*$", "", s) s }) R.oo/R/999.NonDocumentedObjects.R0000644000176200001440000000705213563564136016040 0ustar liggesusers###########################################################################/** # @RdocDocumentation "Non-documented objects" # # % The BasicObject class # @alias getInstanciationTime.default # @alias isReferable # # % The Class class # @alias forName # @alias getDetails # @alias getKnownSubclasses # @alias getMethods # @alias getMethods.default # @alias getName # @alias getPackage # @alias getStaticInstance # @alias getSuperclasses # @alias isAbstract # @alias isBeingCreated # @alias isDeprecated # @alias isPrivate # @alias isProtected # @alias isPublic # @alias isStatic # @alias newInstance # # % The Exception class # @alias getCalls # @alias getCall # @alias getLastException # @alias getMessage # @alias getStackTrace # @alias getStackTraceString # @alias getWhen # @alias printStackTrace # # % The Object class # @alias attach # @alias attach.default # @alias attachLocally # @alias clone # @alias clearLookupCache # @alias clearCache # @alias detach # @alias detach.default # @alias finalize # @alias getFields # @alias getInstanciationTime # @alias getInstanciationTime.default # @alias getInstantiationTime # @alias getInternalAddress # @alias getFieldModifier # @alias getFieldModifiers # @alias hasField # @alias load # @alias load.default # @alias novirtual # @alias registerFinalizer # @alias save # @alias save.default # @alias staticCode # # % The Package class # @alias getAuthor # @alias getBundle # @alias getBundlePackages # @alias getChangeLog # @alias getClasses # @alias getClasses.default # @alias getContribUrl # @alias getContents # @alias getDataPath # @alias getDate # @alias getDescription # @alias getDescriptionFile # @alias getDevelUrl # @alias getDocPath # @alias getEnvironment # @alias getExamplePath # @alias getHistory # @alias getHowToCite # @alias getLicense # @alias getMaintainer # @alias getManPath # @alias getNews # @alias getPath # @alias getPosition # @alias getTitle # @alias getUrl # @alias getVersion # @alias isLoaded # @alias isOlderThan # @alias showChangeLog # @alias showContents # @alias showDescriptionFile # @alias showHistory # @alias showHowToCite # @alias showNews # @alias startupMessage # @alias unload # # % The RccViolationException class # @alias getRccUrl # # % The Rdoc class # @alias argsToString # @alias check # @alias compile # @alias createManPath # @alias createName # @alias declaration # @alias escapeRdFilename # @alias getClassS4Usage # @alias getKeywords # @alias getNameFormat # @alias getObject # @alias getObject.Rdoc # @alias getPackageNameOf # @alias getRdDeclaration # @alias getRdHierarchy # @alias getRdMethods # @alias getRdTitle # @alias getUsage # @alias hierarchy # @alias isKeyword # @alias isVisible # @alias methodsInheritedFrom # @alias setManPath # @alias setNameFormat # # % The RdocException class # @alias getSource # # % Trial functions # @alias callSuperMethodS3 # @alias callSuperMethodS3.default # # % Deprecated functions # @alias setClassS3 # @alias setClassS3.default # @alias getClass.BasicObject # @alias getClass.default # # \description{ # This page contains aliases for all "non-documented" objects that # \code{R CMD check} detects in this package. # # Almost all of them are \emph{generic} functions that have specific # document for the corresponding method coupled to a specific class. # Other functions are re-defined by \code{setMethodS3()} to # \emph{default} methods. Neither of these two classes are non-documented # in reality. # The rest are deprecated methods. # } # # @author # # @keyword internal #*/########################################################################### R.oo/R/ASCII.R0000644000176200001440000001354313327450457012263 0ustar liggesusers#########################################################################/** # @RdocObject ASCII # # @alias ASCII.BEL # @alias ASCII.BS # @alias ASCII.HT # @alias ASCII.LF # @alias ASCII.FF # @alias ASCII.CR # @alias ASCII.SO # @alias ASCII.SI # @alias ASCII.DC1 # @alias ASCII.DC3 # @alias ASCII.ESC # # @title "8-bit ASCII table" # # \description{ # ASCII is the 8-bit ASCII table with ASCII characters from 0-255. # } # # \examples{ # ch <- ASCII[65+1]; # ch == "A" # } # # @author # # \seealso{ # @see charToInt # @see intToChar # } # # @keyword character # @keyword internal #*/######################################################################### ASCII <- c( "","\001","\002","\003","\004","\005","\006","\007", # 000-007 "\010","\011","\012","\013","\014","\015","\016","\017", # 010-017 "\020","\021","\022","\023","\024","\025","\026","\027", # 020-027 "\030","\031","\032","\033","\034","\035","\036","\037", # 030-037 "\040","\041","\042","\043","\044","\045","\046","\047", # 040-047 "\050","\051","\052","\053","\054","\055","\056","\057", # 050-057 "\060","\061","\062","\063","\064","\065","\066","\067", # 060-067 "\070","\071","\072","\073","\074","\075","\076","\077", # 070-077 "\100","\101","\102","\103","\104","\105","\106","\107", # 100-107 "\110","\111","\112","\113","\114","\115","\116","\117", # 110-117 "\120","\121","\122","\123","\124","\125","\126","\127", # 120-127 "\130","\131","\132","\133","\134","\135","\136","\137", # 130-137 "\140","\141","\142","\143","\144","\145","\146","\147", # 140-147 "\150","\151","\152","\153","\154","\155","\156","\157", # 150-157 "\160","\161","\162","\163","\164","\165","\166","\167", # 160-167 "\170","\171","\172","\173","\174","\175","\176","\177", # 170-177 "\200","\201","\202","\203","\204","\205","\206","\207", # 200-207 "\210","\211","\212","\213","\214","\215","\216","\217", # 210-217 "\220","\221","\222","\223","\224","\225","\226","\227", # 220-227 "\230","\231","\232","\233","\234","\235","\236","\237", # 230-237 "\240","\241","\242","\243","\244","\245","\246","\247", # 240-247 "\250","\251","\252","\253","\254","\255","\256","\257", # 250-257 "\260","\261","\262","\263","\264","\265","\266","\267", # 260-267 "\270","\271","\272","\273","\274","\275","\276","\277", # 270-277 "\300","\301","\302","\303","\304","\305","\306","\307", # 300-307 "\310","\311","\312","\313","\314","\315","\316","\317", # 310-317 "\320","\321","\322","\323","\324","\325","\326","\327", # 320-327 "\330","\331","\332","\333","\334","\335","\336","\337", # 330-337 "\340","\341","\342","\343","\344","\345","\346","\347", # 340-347 "\350","\351","\352","\353","\354","\355","\356","\357", # 350-357 "\360","\361","\362","\363","\364","\365","\366","\367", # 360-367 "\370","\371","\372","\373","\374","\375","\376","\377" # 370-377 ) # We removed ASCII 0x00, because it represents an empty string in # R v2.7.0 (and maybe some earlier version) and in R v2.8.0 we will get # a warning. However, for backward compatibility we will still use it # for version prior to R v2.7.0. See also email from Brian Ripley # on 2008-04-23 on this problem. if (compareVersion(as.character(getRversion()), "2.7.0") < 0) { ASCII[1] <- eval(parse(text="\"\\000\"")) } # Alternatively one can do like this. Idea by Peter Dalgaard, # Dept. of Biostatistics, University of Copenhagen, Denmark. # ASCII <- c("\000", sapply(1:255, function(i) parse(text=paste("\"\\", # structure(i,class="octmode"), "\"", sep=""))[[1]]) ) # Some special ASCII characters. ASCII.BEL <- "\007" ASCII.BS <- "\010" ASCII.HT <- "\011" ASCII.LF <- "\012" ASCII.FF <- "\014" ASCII.CR <- "\015" ASCII.SO <- "\016" ASCII.SI <- "\017" ASCII.DC1 <- "\021" ASCII.DC3 <- "\023" ASCII.ESC <- "\033" #########################################################################/** # @RdocDefault charToInt # # @title "Converts a vector of ASCII characters into a vector of integers" # # \description{ # Converts a @vector of ASCII @characters to a equal length vector of ASCII # @integers. # } # # @synopsis # # \arguments{ # \item{ch}{A @character @vector.} # \item{...}{Not used.} # } # # \value{ # Returns an ASCII @integer @vector. # } # # @author # # \examples{ # i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 # ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" # } # # \seealso{ # @see intToChar # @see "base::utf8Conversion". # @see "base::rawConversion" # } # # @keyword character # @keyword internal #*/######################################################################### setMethodS3("charToInt", "default", function(ch, ...) { match(ch, ASCII) - 1L }) #########################################################################/** # @RdocDefault intToChar # # @title "Converts a vector of integers into a vector of ASCII characters" # # \description{ # Converts a vector of ASCII integers to a equal length vector of ASCII # characters. To make sure that all values in the input vector are in # the range [0,255], the input vector is taken modulo 256. # } # # @synopsis # # \arguments{ # \item{i}{An @integer @vector.} # \item{...}{Not used.} # } # # \value{ # Returns an ASCII @character @vector. # } # # @author # # \examples{ # i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 # ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" # } # # \seealso{ # @see "base::utf8Conversion". # @see charToInt # } # # @keyword character # @keyword internal #*/######################################################################### setMethodS3("intToChar", "default", function(i, ...) { ASCII[i %% 256 + 1] }) R.oo/R/objectSize.default.R0000644000176200001440000000140413327450457015150 0ustar liggesusers###########################################################################/** # @RdocDefault objectSize # # @title "Gets the size of the object in bytes" # # \description{ # @get "title". # This method is just a wrapper for @see "utils::object.size". # } # # @synopsis # # \arguments{ # \item{...}{Arguments passed to @see "utils::object.size".} # } # # \value{ # Returns an @integer. # } # # @author # # \seealso{ # Internally @see "utils::object.size". # } # # \keyword{attribute} # \keyword{utilities} #*/########################################################################### setMethodS3("objectSize", "default", function(...) { args <- list(...) args$.scannedEnvs <- NULL ## Used by objectSize() for environment do.call(object.size, args=args) }) R.oo/R/030.ObjectClassFunctions.R0000644000176200001440000000434713327450457016023 0ustar liggesusers############################################################################ # This source code file contains constructor and function definitions that # are used for loading this package only. ############################################################################ # To please R CMD check attachX <- base::attach attachX(list( Object = function(core=NA, finalize=TRUE) { # Create a new environment and wrap it up as a private field of a list. this <- core this.env <- new.env() attr(this, ".env") <- this.env class(this) <- "Object" if (getOption("R.oo::Object/instantiationTime", FALSE)) { attr(this, "...instantiationTime", Sys.time()) } finalizer <- function(env) { # Nothing needed to be done in this temporary finalizer factory, # because it is only utilized by this very package and none of # the classes in this package created Object:s that needs to be # finalized. } # finalizer() # Should this Object be finalized? if (finalize) { onexit <- getOption("R.oo::Object/finalizeOnExit", FALSE) reg.finalizer(this.env, finalizer, onexit=onexit) } assign("...finalize", finalize, envir=this.env, inherits=FALSE) this }, extend = function(this, ...className, ..., ...finalize=TRUE) { fields <- list(...) names <- names(fields) this.env <- attr(this, ".env") for (name in names) assign(name, fields[[name]], envir=this.env) class(this) <- c(...className, class(this)) # Override this (=unregister finalizer) according to argument # '...finalize' of extend()? if (!is.na(...finalize) && !isTRUE(...finalize)) { # Unregister finalizer (by registering a dummy one) reg.finalizer(this.env, f=function(...) {}) } this }, Class = function(name=NULL, constructor=NULL) { if (is.null(name)) { constructor <- NA } else if (!is.function(constructor)) { throw("Argument 'constructor' must be a function: ", mode(constructor)) } # This is an example where one wants to have the core of an Object to not # be NA, but something else. this <- extend(Object(constructor), "Class", .staticInstance = NULL ) this } ), name="R.oo") # Cleanup rm(list="attachX") R.oo/R/ll.default.R0000644000176200001440000002152513563564136013466 0ustar liggesusers###########################################################################/** # @RdocDefault ll # # @title "Generates a list of informative properties of all members of an environment" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{pattern}{Regular expression pattern specifying which members to # return. If \code{".*"}, all names are matched.} # \item{...}{A named @vector of format \code{functionName=value}, where # \code{functionName()} will be called on each member found. If the # result matches the \code{value}, the member is returned, otherwise # not.} # \item{private}{If @TRUE, also private members, i.e. members with # a name starting with a @. (period), will be listed, otherwise not.} # \item{properties}{Names of properties to be returned. There must exist # a @function with the same name, because it will be called. This way # one can extract any type of property by defining new methods.} # \item{sortBy}{Name or index of column (property) to be sorted by. # If @NULL, the objects are listed in the order they are found.} # \item{decreasing}{A @logical indicating whether the sorting should # be done in increasing or decreasing order.} # \item{envir}{An @environment, a search path index or a name of a package # to be scanned.} # } # # \value{ # Returns a @data.frame containing information about all the members. # } # # \section{Default properties returned}{ # It is possible to set the default value of argument \code{properties} # by setting option \code{"R.oo::ll/properties"}, e.g. # \code{options("R.oo::ll/properties"=c("data.class", "dimension"))}. # If this option is not set when the package is loaded, it is set to # \code{c("data.class", "dimension", "objectSize")}. # } # # \examples{ # \dontrun{ # To list all objects in .GlobalEnv: # > ll() # member data.class dimension objectSize # 1 *tmp* Person 1 428 # 2 as.character.Person function NULL 1208 # 3 country character 1 44 # 4 equals.Person function NULL 2324 # 5 filename character 1 84 # 6 getAge function NULL 372 # 7 getAge.Person function NULL 612 # 8 getName.Person function NULL 628 # 9 hashCode.Person function NULL 1196 # 10 last.warning list 1 192 # 11 obj Person 1 428 # 12 Person Class NULL 2292 # 13 setAge function NULL 372 # 14 setAge.Person function NULL 2088 # 15 setName function NULL 372 # 16 setName.Person function NULL 760 # 17 staticCode.Person function NULL 2372 # # To list all functions in the methods package: # ll(mode="function", envir="methods") # # To list all numeric and character object in the base package: # ll(mode=c("numeric", "character"), envir="base") # # To list all objects in the base package greater than 40kb: # subset(ll(envir="base"), objectSize > 40000) # } # } # # @author # # \seealso{ # @see "utils::ls.str" and @see "ll.Object". # } # # \keyword{utilities} #*/########################################################################### setMethodS3("ll", "default", function(pattern=".*", ..., private=FALSE, properties=getOption("R.oo::ll/properties", c("data.class", "dimension", "objectSize")), sortBy=NULL, decreasing=FALSE, envir=parent.frame()) { # AD HOC: Workaround to make sure property functions can be found. # This is because they are currently search for via the global # environment. /HB 2013-07-11 require("R.oo") || throw("Package not loaded: R.oo") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Validate arguments # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Argument 'envir': if (is.numeric(envir)) { envir <- as.environment(envir) } else if (is.character(envir)) { search <- gsub("^package:", "", search()) pos <- which(search == envir) envir <- as.environment(pos) } members <- ls(envir=envir, all.names=private) # Any members at all? if (length(members) == 0L) return(data.frame()) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Keep members whose names match the pattern # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (!is.null(pattern)) { matches <- regexpr(pattern, members) members <- members[matches != -1L] if (length(members) == 0L) return(data.frame()) } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Filter out members that to not match the search criteria according to "...". # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - args <- list(...) if (length(args) > 0L) { # Precreate a function to filter out members to be returned names <- names(args) expr <- NULL for (kk in seq_along(args)) { value <- args[[kk]] if (is.null(value)) { e <- substitute(is.null(fcn(..object)), list(fcn=as.name(names[kk]))) } else { e <- substitute(is.element(fcn(..object), value), list(fcn=as.name(names[kk]), value=value)) } if (is.null(expr)) { expr <- e } else { expr <- substitute(expr && e, list(expr=expr, e=e)) } } # for (kk ...) # expr <- substitute(filter <- function(name) { # eval(substitute(expr, list(..object=as.name(name))), envir=envir) # }, list(expr=expr, envir=envir)) # Now, create the filter() function # eval(expr) # Replaces the above construct. filter <- eval(substitute({ function(name) { ..object <- get(name, envir=envir) eval(expr, envir=envir) } }, list(expr=expr))) # Filter out members keep <- c() for (member in members) { # Keep the member or not? if (filter(member)) keep <- c(keep, member) } if (length(keep) == 0L) return(data.frame()) members <- keep } if (length(properties) == 0L || identical(properties, "")) return(data.frame(member=members)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Generate a data frame row by row where each row contains the name of the # member and the properties as character strings. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Precreate a function returning a row in the resulting data frame expr <- expression() for (property in properties) { e <- substitute({ ..exp <- substitute(propertyFcn(object), list(propertyFcn=as.name(property), object=..object)) ..value <- eval(..exp, envir=globalenv()) if (is.null(..value)) { ..value <- "NULL" } else if (is.vector(..value) && length(..value) > 1L) { ..value <- sprintf("c(%s)", paste(..value, collapse=",")) } else if (is.list(..value)) { ..value <- unlist(..value) } if (length(..value) > 0L) { ..value <- ..value[1L] } }, list(property=property)) expr <- substitute({expr; e; ..row <- cbind(..row, ..value);}, list(expr=expr,e=e)) } df <- NULL for (member in members) { if (is.element(member, c("..."))) { dfRow <- c(member, rep(NA_character_, times=length(properties))) dfRow <- as.list(dfRow) } else { rowExpr <- substitute({ ..row <- list(name) ..object <- get(name, envir=envir) expr }, list(name=member, member=as.name(member), expr=expr)) dfRow <- eval(rowExpr) } if (is.null(df)) { df <- dfRow } else { for (kk in seq_along(df)) { df[[kk]] <- c(df[[kk]], dfRow[[kk]]) } } } attributes(df) <- NULL names(df) <- c("member", properties) df <- as.data.frame(df) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Sort data frame? # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (!is.null(sortBy)) { if (is.numeric(sortBy)) pos <- sortBy else pos <- pmatch(sortBy, colnames(df)) if (is.na(pos) || pos > ncol(df)) throw("The column to sort by does not exist: ", sortBy) by <- df[,pos] # We know that the first column always contains character strings... if (pos > 1L) { sortBy <- colnames(df)[pos] # Figure out the data type of the sort column dummy <- eval(substitute(property(2), list(property=as.name(sortBy)))) mode(by) <- mode(dummy) } # Finally, sort the result table df <- df[order(by, decreasing=decreasing),] } as.data.frame(df) }) # ll.default() R.oo/R/typeOfClass.R0000644000176200001440000000266413327450457013671 0ustar liggesusers###########################################################################/** # @RdocDefault typeOfClass # # @title "Gets the type of a class (S3 or S4)" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{object}{The object to be checks.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string \code{"S3"}, \code{"S3-Object"} or \code{"S4"}, # or @NA if neither. # } # # @author # # \keyword{character} #*/########################################################################### setMethodS3("typeOfClass", "default", function(object, ...) { if (is.null(object)) return(NA_character_) if (inherits(object, "classRepresentation")) return("S4") if (is.character(object)) { if (isClass(object)) { if (inherits(object, "oldClass")) return("S3") return("S4") } # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (!exists(object, mode="function")) return(NA_character_) object <- get(object, mode="function") } if (is.function(object) && inherits(object, "Class")) return("S3-Object") return(NA_character_) }) ############################################################################ # 2013-10-08 # o Now returning NA_character_ instead of NA. # 2005-02-15 # o Added arguments '...' in order to match any generic functions. ############################################################################ R.oo/R/getNnnByName.R0000644000176200001440000000374113327450457013757 0ustar liggesusers.getFunctionByName <- function(name, where=c("ns", "search", "ns*"), envir=NULL, callEnvir=as.environment(-1L), class="function", mustExist=TRUE, ...) { # Backward compatibility (ignore where="ns*" if explicitly disabled) if (!getOption("R.oo::Class/searchNamespaces", TRUE)) { where <- setdiff(where, "ns*") } # Ignore where = "ns" if 'envir' was not specified if (is.null(envir)) { where <- setdiff(where, "ns") } # Search each 'where'... for (kk in seq_along(where)) { whereKK <- where[kk] # (a) Search a specific environment? # (which should be a namespace of package) if (whereKK == "ns") { if (exists(name, mode="function", envir=envir, inherits=TRUE)) { res <- get(name, mode="function", envir=envir, inherits=TRUE) if (inherits(res, class)) return(res) } } # (b) Search globally? if (whereKK == "search") { envirT <- callEnvir if (exists(name, mode="function", envir=envirT, inherits=TRUE)) { res <- get(name, mode="function", envir=envirT, inherits=TRUE) if (inherits(res, class)) return(res) } } # (c) Search all loaded namespaces? if (whereKK == "ns*") { for (pkg in loadedNamespaces()) { envirT <- getNamespace(pkg) if (exists(name, mode="function", envir=envirT, inherits=TRUE)) { res <- get(name, mode="function", envir=envirT, inherits=TRUE) if (inherits(res, class)) return(res) } } } } # for (kk in ...) if (mustExist) { # Don't use throw() here, because it may result in an endless loop # if Exception is not found. /HB 2012-11-23 stop(sprintf("INTERNAL ERROR: No such %s: %s", class, name)) } # Not found NULL } # .getFunctionByName() .getS3Method <- function(name, ...) { .getFunctionByName(name, class="function", ..., callEnvir=as.environment(-1L)) } .getClassByName <- function(name, ...) { .getFunctionByName(name, class="Class", ..., callEnvir=as.environment(-1L)) } R.oo/R/020.makeObjectFinalizer,private.R0000644000176200001440000002156513327450457017315 0ustar liggesusers###########################################################################/** # @RdocFunction .makeObjectFinalizer # # @title "Creates a standalone finalizer function for Object" # # \description{ # @get "title", which assumes only that the \pkg{base} package is available. # } # # @synopsis # # \arguments{ # \item{this}{The @Object to be finalized.} # \item{reloadRoo}{If @TRUE, the finalizer will try to temporary # reload the \pkg{R.oo} package if not loaded.} # } # # \value{ # Returns a @function that can be passed to @see "base::reg.finalizer". # } # # \details{ # The created finalizer is reentrant. # This is always the case when the \pkg{R.oo} package is already # loaded when the finalizer is called. # It is also always the case on R v2.15.2 Patched r61487 and beyond. # In other cases, the finalizer inspects the call stack # (via @see "sys.calls") to check whether @see "base::parse" # has been called or not. If it is on the call stack, it indicates # that @see "base::parse" triggered the garbage collection, and # the \pkg{R.oo} package will \emph{not} be reloaded in order to # avoid risking @see "base::parse" being called again. # } # # @keyword internal #*/########################################################################### .makeObjectFinalizer <- function(this, reloadRoo=TRUE) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - getObjectInfo <- function(this) { env <- attr(this, ".env") if (is.null(env)) return(NA_character_) # base::environmentName() was added to R v2.5.0 if (exists("environmentName", mode="function", envir=getNamespace("base"), inherits=FALSE)) { name <- environmentName(env) } else { name <- "" } if (name == "") { # Cannot assume 'utils' is loaded name <- utils::capture.output(print.default(env)) name <- name[1L]; # Just in case name <- gsub("[<]*environment:[ ]*([^>]*)[>]", "\\1", name) } className <- class(this)[1L] name <- paste(className, ": ", name, sep="") # More debug information if (className == "Package") { name <- sprintf("%s {.name='%s'}", name, env$.name) } name } # getObjectInfo() isLibraryReentrant <- function() { getRversion2 <- function() { rVer <- R.version[c("major", "minor", "status", "svn rev")] names(rVer)[3:4] <- c("patched", "rev") rVer$patched <- ifelse(identical(rVer$patched, "Patched"), 1L, 0L) rVer$rev <- ifelse(is.null(rVer$rev), 0L, rVer$rev) rVer <- lapply(rVer, FUN=as.numeric) rVer } # getRversion2() rVer <- getRversion2() if (rVer$major >= 3) return(TRUE) if (rVer$major < 2) return(FALSE) if (rVer$minor >= 15.3) return(TRUE) if (rVer$minor < 15.2) return(FALSE) if (rVer$patched < 1) return(FALSE) if (rVer$rev < 61487) return(FALSE) TRUE } # isLibraryReentrant() isParseCalled <- function() { calls <- sys.calls() if (length(calls) == 0L) return(FALSE) for (kk in seq_along(calls)) { call <- calls[[kk]] name <- call[[1L]] if (!is.symbol(name)) next if (name == "do.call") { name <- call[[2L]] if (!is.symbol(name)) next name <- as.character(name) } if (name == "parse") { return(TRUE) } } # for (kk ...) FALSE } # isParseCalled() isLibraryActive <- function() { # Just in case the below won't work one day due to R updates... tryCatch({ # Identify the environment/frame of interest by making sure # it at least contains all the arguments of source(). argsToFind <- names(formals(base::library)) # Scan the call frames/environments backwards... srcfileList <- list() for (ff in sys.nframe():0) { env <- sys.frame(ff) # Does the environment look like a library() environment? exist <- sapply(argsToFind, FUN=exists, envir=env, inherits=FALSE) if (!all(exist)) { # Nope, then skip to the next one next } return(TRUE) } # for (ff ...) }, error = function() {}) FALSE } # isLibraryActive() isRooLoading <- function() { for (n in sys.nframe():1) { env <- sys.frame(n) if (exists("__NameSpacesLoading__", envir=env, inherits=FALSE)) { pkgs <- get("__NameSpacesLoading__", envir=env, inherits=FALSE) if (is.element("R.oo", pkgs)) return(TRUE) } } # for (n ...) FALSE } # isRooLoading() isRooLoaded <- function() { is.element("R.oo", loadedNamespaces()) } # isRooLoaded() # NOTE: The finalizer() depends on the 'this' object. # /HB 2011-04-02 # Note, R.oo might be detached when this is called! If so, reload # it, this will be our best chance to run the correct finalizer(), # which might be in a subclass of a different package that is still # loaded. finalizer <- function(env) { debug <- FALSE if (debug) message(sprintf("finalizer(): reloadRoo=%s", reloadRoo)) if (debug) message(paste(capture.output(print(sessionInfo())), collapse="\n")) # Classes for which it is known that finalizer() does nothing if (is.element(class(this)[1L], c("Object", "Class", "Package"))) { return() } # Do nothing if R.oo is being loaded if (isRooLoading()) return() # Is R.oo::finalize() available? if (isRooLoaded()) { if (debug) message(sprintf("finalizer(): Call finalize()...")) R.oo::finalize(this) if (debug) message(sprintf("finalizer(): Call finalize()...done")) return() } # Nothing to do? if (!reloadRoo) return() warning(sprintf("Object was not be finalize():d properly because the R.oo package was not loaded: %s", getObjectInfo(this))) return() # Skip the finalizer()? genv <- globalenv() if (exists("...R.oo::skipFinalizer", envir=genv, inherits=FALSE)) { if (debug) message(sprintf("Skipping finalizer().")) return() } # Skip because library() is active? if (isLibraryActive()) { warning(sprintf("Detected finalization of Object while library() is working on attaching a package and the R.oo package is not loaded. This is most likely due to a *temporary* Object allocated in .onLoad()/.onAttach(), which is not allowed. Finalization of Object will *not* be skipped: %s", getObjectInfo(this))) return() } # Check if base::library() is reentrant... if (!isLibraryReentrant()) { # If not, check if base::parse() triggered the garbage collection # and/or has been called, because then we must not call library(), # because it will in turn call parse() potentially causing R to # crash. if (isParseCalled()) { warning("Object may not be finalize():d properly because the R.oo package was not loaded and will not be reloaded, because if done it may crash R (running version of R is prior to R v2.15.2 Patched r61487 and the garbage collection was triggered by base::parse()): ", getObjectInfo(this)) return() } } warnMsg <- "" # (1) Load the 'R.oo' package if (debug) message(sprintf("finalizer(): Reloaded R.oo...")) suppressMessages({ warnMsg <- suppressWarnings({ loadNamespace("R.oo") }) }) if (debug) message(sprintf("finalizer(): Reloading R.oo...done")) if (is.character(warnMsg)) { warnMsg <- sprintf(" (with warning %s)", warnMsg) } else { warnMsg <- "" } # For unknown reasons R.oo might not have been loaded. if (!isRooLoaded()) { warning(sprintf("Object may not be finalize():d properly because the R.oo package failed to reload%s: %s", warnMsg, getObjectInfo(this))) return() } # Make sure to unload R.oo at the end on.exit(unloadNamespace("R.oo")) if (debug) message(sprintf("finalizer(): Call finalize()...")) R.oo::finalize(this) if (debug) message(sprintf("finalizer(): Call finalize()...done")) # NOTE! Before unloading R.oo again, we have to make sure the Object:s # allocated by R.oo itself (e.g. an Package object), will not reload # R.oo again when being garbage collected, resulting in an endless # loop. We do this by creating a dummy finalize() function, detach # R.oo, call garbage collect to clean out all R.oo's objects, and # then remove the dummy finalize() function. # (2) Put a dummy finalize() function on the search path. if (!exists("...R.oo::skipFinalizer", envir=genv, inherits=FALSE)) { assign("...R.oo::skipFinalizer", TRUE, envir=genv, inherits=FALSE) on.exit({ rm(list="...R.oo::skipFinalizer", envir=genv, inherits=FALSE) }, add=TRUE) } # (4) Force all R.oo's Object:s to be finalize():ed. if (debug) message(sprintf("finalizer(): Calling base::gc()")) base::gc() if (debug) message(sprintf("finalizer(): done")) } # finalizer() return(finalizer) } # .makeObjectFinalizer() R.oo/R/objectSize.environment.R0000644000176200001440000000277013327450457016077 0ustar liggesusers###########################################################################/** # @set "class=environment" # @RdocMethod objectSize # # @title "Gets the size of an environment in bytes" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{envir}{An @see "base::environment".} # \item{...}{Arguments passed to @see "base::ls".} # } # # \value{ # Returns an @integer. # } # # @author # # \seealso{ # Internally @see "utils::object.size" is used. # } # # \keyword{attribute} # \keyword{utilities} #*/########################################################################### setMethodS3("objectSize", "environment", function(envir, ...) { ## Keep track of already scanned environments ## in order to avoid endless recursion. args <- list(...) .scannedEnvs <- args$.scannedEnvs if (is.null(.scannedEnvs)) .scannedEnvs <- list() alreadyScanned <- function(envir) { if (!is.environment(envir)) return(FALSE) for (env in .scannedEnvs) { if (identical(env, envir)) return(TRUE) } FALSE } ## Get all objects in the environment args <- list(envir=envir, all.names=TRUE, ...) args$.scannedEnvs <- NULL names <- do.call(ls, args=args) # Nothing to do? if (length(names) == 0L) return(0) ## Avoid scanning the current environment again .scannedEnvs <- c(.scannedEnvs, envir) size <- 0 for (name in names) { obj <- envir[[name]] if (!alreadyScanned(obj)) { size <- size + objectSize(obj, .scannedEnvs=.scannedEnvs) } } size }) R.oo/R/RccViolationException.R0000644000176200001440000000667313621422240015676 0ustar liggesusers###########################################################################/** # @RdocClass RccViolationException # # @title "An RccViolationException indicates a violation of the R Coding Conventions (RCC)" # # \description{ # @classhierarchy # # @get "title". # It is generated by \code{setConstructorS3()} and \code{setMethodS3()}. # It is \emph{not} meant to be caught, but instead the source code that # violates the RCC should be fixed. For more information about RCC, see # references below. # } # # @synopsis # # \arguments{ # \item{...}{Any arguments accepted by the constructor of Exception, i.e. # one or several @character strings, which will be concatenated and # contain informative message about why the RCC was violated.} # } # # \section{Fields and Methods}{ # @allmethods # } # # \details{ # Since it is not possible to assert that the RCC is followed during the # parsing of the source code, but first only when the source code is # actually executed. # } # # \examples{ # \dontrun{ # setConstructorS3("myClass", function() { extends(Object(), .value=0) }) # setMethodS3("MyMethod", "myClass", function(this) { "Hullo!" }) # } # } # # @author # # \seealso{ # See also @see "base::try" and \code{\link[base:conditions]{tryCatch}()}. # For detailed information about exceptions see @see "Exception". # The R Coding Conventions (RCC) can be found at # \url{@eval "RccViolationException$getRccUrl()"}. # } # # @keyword programming # @keyword methods # @keyword error # @keyword internal #*/########################################################################### setConstructorS3("RccViolationException", function(...) { extend(Exception(...), c("RccViolationException") ) }) ###########################################################################/** # @RdocMethod as.character # # @title "Gets a string representing of the RCC violation" # # \description{ # @get "title" of format "[\{POSIX date string\}] \{class name\}: \{msg\}, cf. @eval "RccViolationException$getRccUrl()"". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("as.character", "RccViolationException", function(x, ...) { # To please R CMD check this <- x paste("[", getWhen(this), "] ", class(this)[1L], ": ", getMessage(this), ", cf. ", getRccUrl(this), sep="") }) ###########################################################################/** # @RdocMethod getRccUrl # # @title "Static method to get a URL where the RCC can be found" # # \description{ # Static method to get a URL where one can find details about the # R Code Convention (RCC). # Currently the URL is \url{@eval "RccViolationException$getRccUrl()"}. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(RccViolationException).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getRccUrl", "RccViolationException", function(this, ...) { "https://aroma-project.org/developers/RCC/" }, static=TRUE) R.oo/R/000.R0000644000176200001440000000031313327450457011721 0ustar liggesusers## Look for existing generic functions also in imported namespaces. ## This will affect whether setGenericS3() creates a generic function ## or not. options("R.methodsS3:checkImports:setGenericS3"=TRUE) R.oo/R/hashCode.R0000644000176200001440000000406013327450457013143 0ustar liggesusers###########################################################################/** # @RdocDefault hashCode # # @title "Gets an integer hashcoded for R objects" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{object}{A @vector or @list of \R objects.} # \item{...}{Not used.} # } # # \value{ # Returns a @vector of @integer's. # } # # \details{ # A @character string is converted into a hashcode following Java # conventions by # \code{s[1]*31^(n-1) + s[2]*31^(n-2) + ... + s[n]} # using integer arithmetic, where \code{s[i]} is the \code{i}:th character # of the string, \code{n} is the length of the string. The hash value of # the empty string is zero. # # For all other objects, by default \code{as.integer()} is called. # } # # @author # # @keyword programming # @keyword methods # @keyword internal #*/########################################################################### setMethodS3("hashCode", "default", function(object, ...) { asInt.Java <- function(x) { Integer.MIN.VALUE <- -2147483648 Integer.MAX.VALUE <- 2147483647 Integer.RANGE <- Integer.MAX.VALUE-Integer.MIN.VALUE + 1 x <- (x-Integer.MIN.VALUE) %% Integer.RANGE + Integer.MIN.VALUE as.integer(x) } hashCode <- c() for (obj in object) { if (is.character(obj)) { # The hashcode for a character string is computed as # # s[1]*31^(n-1) + s[2]*31^(n-2) + ... + s[n] # # using int arithmetic, where s[i] is the i:th character of the # string, n is the length of the string. The hash value of the # empty string is zero. s <- obj n <- nchar(s) if (n == 0) { hashCode <- c(hashCode, as.integer(0)) } else { s <- unlist(strsplit(as.character(s), NULL)) s <- charToInt(s) hashC <- 0 for (k in 1:n) hashC <- hashC + s[k]*31^(n-k) # Convert into range of Java int. hashCode <- c(hashCode, asInt.Java(hashC)) } } else { hashCode <- c(hashCode, as.integer(obj)) } } hashCode }) # hashCode.default() R.oo/R/dimension.default.R0000644000176200001440000000226013327450457015035 0ustar liggesusers###########################################################################/** # @RdocDefault dimension # # @title "Gets the dimension of the object" # # \description{ # Gets the dimension of the object similar to what \code{dim()} does, # but instead of @NULL it will return the length of a vector. # If a function is passed, @NULL is returned. # } # # @synopsis # # \arguments{ # \item{object}{The object for which the dimension should be obtained.} # \item{...}{Not used.} # } # # \value{ # Returns an @integer @vector or @NULL. # } # # \examples{ # dimension(matrix(1:100, ncol=10)) # 10 10 # dimension(1:14) # 14 # dimension(data.frame(a=1:10, b=10:1)) # 10 2 # dimension(print) # NULL # } # # @author # # \seealso{ # @see "ll.default". # @see "base::dim" and @see "base::length". # } # # @keyword attribute # @keyword utilities # @keyword internal #*/########################################################################### setMethodS3("dimension", "default", function(object, ...) { if (is.function(object)) return(NULL) size <- dim(object) if (is.null(size)) size <- length(object) as.integer(size) }) R.oo/R/Package.R0000644000176200001440000010364513701657463012773 0ustar liggesusers##########################################################################/** # @RdocClass Package # # @title "The Package class provides methods for accessing package information" # # \description{ # @classhierarchy # # Creates a Package that can be thrown and caught. The \code{Package} # class is the root class of all other \code{Package} classes. # } # # @synopsis # # \arguments{ # \item{name}{Name of the package.} # } # # \section{Fields and Methods}{ # @allmethods # } # # \examples{\dontrun{@include "../incl/Package.Rex"}} # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setConstructorS3("Package", function(name=NULL) { libPath <- NULL version <- NULL if (!is.null(name)) { tryCatch({ package <- packageDescription(name) version <- as.character(package$Version) libPath <- dirname(system.file(package=name)) }, warning = function(warn) { # installed.packages() may be slow()! packages <- as.data.frame(installed.packages()) idxs <- (packages$Package == name) if(!any(idxs)) { throw("Package is not installed: ", name) } packages <- packages[idxs,,drop=FALSE] libPath <<- as.character(packages$LibPath) if (length(libPath) > 1) { warning(paste("Multiple installations of package '", name, "' was found. Using the first. Paths to all installations: ", paste(libPath, collapse=", "), sep="")) libPath <<- libPath[1] } libPath <<- gsub("/$", "", libPath) version <<- as.character(packages$Version[1]) }) } extend(Object(), "Package", .name = name, .version = version, .libPath = libPath, .inBundle = NULL, .bundlePackages = NULL ) }) #########################################################################/** # @RdocMethod as.character # # @title "Gets a string representation of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{print(R.oo)} # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("as.character", "Package", function(x, ...) { # To please R CMD check this <- x s <- paste(class(this)[1L], ": ", getName(this), " v", getVersion(this), sep="") date <- getDate(this) if (!is.na(date)) s <- paste(s, " (", getDate(this), ")", sep="") pos <- getPosition(this) if (pos != -1) s <- paste(s, " is loaded (pos=", pos, ").", sep="") else s <- paste(s, ".") s <- paste(s, " Title: ", getTitle(this), ".", sep="") # Do not call getBundle() here; it can be very slow! # bundle <- getBundle(this) # if (!is.null(bundle)) # s <- paste(s, " It is part of bundle ", bundle, " (", paste(getBundlePackages(this), collapse=", "), ").", sep="") url <- getUrl(this) if (!is.null(url)) s <- paste(s, " The official webpage is ", url, " and the", sep="") else s <- paste(s, " The", sep="") s <- paste(s, " maintainer is ", getMaintainer(this), ".", sep="") s <- paste(s, " The package is installed in ", getPath(this), ".", sep="") license <- getLicense(this) if (!is.null(license)) s <- paste(s, " License: ", license, ".", sep="") s <- paste(s, " Description: ", getDescription(this), sep="") s <- paste(s, " Type showNews(", getName(this), ") for package history, and ?", getName(this), " for help.", sep="") s }) #########################################################################/** # @RdocMethod getName # # @title "Gets the name of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getName", "Package", function(this, ...) { this$.name }) #########################################################################/** # @RdocMethod getContents # # @title "Gets the contents of this package" # # \description{ # @get "title", i.e. the parsed \code{CONTENTS} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @data.frame. # } # # @author # # \seealso{ # @see "base::dcf". # @seeclass # } #*/######################################################################### setMethodS3("getContents", "Package", function(this, fields=NULL, ...) { pathname <- system.file("CONTENTS", package=this$.name) if (!file.exists(pathname)) throw("CONTENTS file missing for package '", this$.name, "': ", pathname) # DCF format == Debian Control File format contents <- read.dcf(file=pathname, fields=fields) contents <- as.data.frame(contents) contents }, protected=TRUE) #########################################################################/** # @RdocMethod showContents # # @title "Show the CONTENTS file of this package" # # \description{ # @get "title". # If the \code{CONTENTS} file does not exist, an exception is thrown. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("showContents", "Package", function(this, ...) { path <- getPath(this) files <- list.files(path=path) file <- files[tolower(files) == "contents"] if (length(file) == 0) throw("CONTENTS file for package ", getName(this), " does not exist.") pathname <- file.path(path, file) file.show(pathname, ...) }, protected=TRUE) #########################################################################/** # @RdocMethod getDescriptionFile # # @title "Gets the description file of this package" # # \description{ # @get "title", i.e. the parsed \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{fields}{A @vector of @character strings of fields to be returned. # If @NULL, all available fields are returned.} # \item{...}{Not used.} # } # # \value{ # Returns named @vector of @character strings. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDescriptionFile", "Package", function(this, fields=NULL, ...) { unlist(packageDescription(this$.name, fields=fields)) }, protected=TRUE) #########################################################################/** # @RdocMethod showDescriptionFile # # @title "Show the DESCRIPTION file of this package" # # \description{ # @get "title". # If the \code{DESCRIPTION} file does not exist, an exception is thrown. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("showDescriptionFile", "Package", function(this, ...) { path <- getPath(this) files <- list.files(path=path) file <- files[tolower(files) == "description"] if (length(file) == 0) throw("DESCRIPTION file for package ", getName(this), " does not exist.") pathname <- file.path(path, file) file.show(pathname, ...) }) #########################################################################/** # @RdocMethod getPath # # @title "Gets the library (system) path to this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getPath", "Package", function(this, ...) { file.path(this$.libPath, getName(this), "") }) #########################################################################/** # @RdocMethod getVersion # # @title "Gets the version of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # @seemethod "isOlderThan". # } #*/######################################################################### setMethodS3("getVersion", "Package", function(this, ...) { this$.version }) #########################################################################/** # @RdocMethod isOlderThan # # @title "Checks if the package is older than a given version" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{version}{A @character string specifying a version to compare with.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the version of the package is less than the # specified version. # } # # @author # # \seealso{ # @seeclass # @seemethod "getVersion". # } #*/######################################################################### setMethodS3("isOlderThan", "Package", function(this, version, ...) { res <- compareVersion(getVersion(this), version) (res < 0) }) #########################################################################/** # @RdocMethod getDataPath # # @title "Gets the path to the data (data/) directory of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDataPath", "Package", function(this, ...) { file.path(this$.libPath, getName(this), "data", "") }) #########################################################################/** # @RdocMethod getDocPath # # @title "Gets the path to the accompanying documentation (doc/) directory of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # print(list.files(getDocPath(R.oo))) # explicit call, or # print(list.files(R.oo$docPath)) # as a virtual field # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDocPath", "Package", function(this, ...) { file.path(this$.libPath, getName(this), "doc", "") }) #########################################################################/** # @RdocMethod getExamplePath # # @title "Gets the path to the example (R-ex/) directory of this package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getExamplePath", "Package", function(this, ...) { file.path(this$.libPath, getName(this), "R-ex", "") }) #########################################################################/** # @RdocMethod getDate # # @title "Gets the date when package was build" # # \description{ # Checks if the package is loaded onto the search path or not. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # @TRUE if the packages has been loaded, otherwise @FALSE. # } # # \examples{ # pkg <- Package("base") # print(isLoaded(pkg)) # TRUE # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDate", "Package", function(this, ...) { date <- getDescriptionFile(this, fields=c("Date", "Date/Publication")) date <- unname(unlist(date, use.names=FALSE)) date <- date[!is.na(date)] date[1] }) #########################################################################/** # @RdocMethod getDescription # # @title "Gets the description of the package" # # \description{ # @get "title". Not to be mixed up with @seemethod "getDescriptionFile". # } # # @synopsis # # \arguments{ # \item{replaceNewlines}{If a @character string, all newline characters # are replaced with this string. Otherwise not.} # \item{...}{Not used.} # } # # \value{ # A @character string. # } # # \examples{ # pkg <- Package("base") # print(getDescription(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDescription", "Package", function(this, replaceNewlines=" ", ...) { value <- getDescriptionFile(this, fields="Description") if (is.character(replaceNewlines)) value <- gsub("[\r\n]", replaceNewlines, value) value }) #########################################################################/** # @RdocMethod getPosition # # @title "Gets the search path position of the package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # An @integer. # } # # \examples{ # pkg <- Package("base") # print(getPosition(pkg)) # } # # @author # # \seealso{ # @seemethod "getEnvironment". # @see "base::search". # @seeclass # } #*/######################################################################### setMethodS3("getPosition", "Package", function(this, ...) { queries <- paste(sep="", "^package:", getName(this), "$") res <- c() for (query in queries) { pos <- which(regexpr(query, search()) != -1) if (length(pos) == 0) pos <- -1 res <- c(res, pos) } res }) #########################################################################/** # @RdocMethod getEnvironment # # @title "Gets the environment of a loaded package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @environment, or @NULL if the package was not loaded. # } # # @author # # \seealso{ # @seemethod "getPosition". # @seeclass # } #*/######################################################################### setMethodS3("getEnvironment", "Package", function(this, ...) { pos.to.env(getPosition(this)) }) #########################################################################/** # @RdocMethod isLoaded # # @title "Checks if the package is installed on the search path or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # @TRUE if the packages has been loaded, otherwise @FALSE. # } # # \examples{ # pkg <- Package("base") # print(isLoaded(pkg)) # TRUE # } # # @author # # \seealso{ # @seemethod "load". # @see "base::search". # @seeclass # } #*/######################################################################### setMethodS3("isLoaded", "Package", function(this, ...) { (getPosition(this) != -1) }) #########################################################################/** # @RdocMethod load # # @title "Loads a package" # # \description{ # @get "title". This is an alternative way to use \code{library()} to # load a package. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # @TRUE if the packages is loaded, otherwise @FALSE. # } # # \examples{ # pkg <- Package("base") # print(load(pkg)) # } # # @author # # \seealso{ # @seemethod "unload". # @seemethod "isLoaded". # @see "base::search". # @seeclass # } #*/######################################################################### setMethodS3("load", "Package", function(this, ...) { .library <- library # To please R CMD check .library(package=getName(this), character.only=TRUE) isLoaded(this) }) #########################################################################/** # @RdocMethod unload # # @title "Unloads a package" # # \description{ # @get "title". This is an alternative way to use \code{detach()} to # unload a package. # If the package is not loaded, it will quietly return. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{ # @include "../incl/Package.unload.Rex" # }} # # @author # # \seealso{ # @seemethod "load". # @seemethod "isLoaded". # @see "base::search". # @seeclass # } #*/######################################################################### setMethodS3("unload", "Package", function(this, ...) { name <- paste("package:", getName(this), sep="") pos <- which(name == search()) if (length(pos) == 1L) detach(pos=pos) }) #########################################################################/** # @RdocMethod ll # # @title "Generates a list of informative properties of all members of the package" # # \description{ # @get "title". # # If the package is not loaded, it will be loaded, the members will be # retrieved and then the package will be unloaded again. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @data.frame. # } # # \details{ # Note the difference from the default definition of \code{ll()} as # inherited from the @Object class. Here \code{ll()} has been # redefined to list the members of the package, i.e. the members in # the environment on search path that belongs to the package, whereas # the original usage was to list the members of the Object. However, # since the internal members of Package object is not of interest we # decided on this definition instead. # } # # \examples{ # \dontrun{ll(R.oo)} # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("ll", "Package", function(this, envir=pos.to.env(getPosition(this)), ...) { isLoaded <- isLoaded(this) if (!isLoaded) load(this) ll <- ll(..., envir=envir) if (!isLoaded) unload(this) ll }) #########################################################################/** # @RdocMethod getClasses # # @title "Gets all classes of a package" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character @vector of class names. # } # # \examples{ # pkg <- Package("R.oo") # print(getClasses(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getClasses", "Package", function(this, ...) { pkgname <- getName(this) ns <- getNamespace(pkgname) names <- ls(envir=ns, all.names=FALSE) classes <- c() for (name in names) { object <- .getFunctionByName(name, where=c("ns", "search"), envir=ns, class="Class", mustExist=FALSE) if (inherits(object, "Class")) classes <- c(classes, name) } classes }, protected=TRUE, dontWarn="base") #########################################################################/** # @RdocMethod getUrl # # @title "Gets the URL of this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # pkg <- Package("R.oo") # print(getUrl(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getUrl", "Package", function(this, ...) { getDescriptionFile(this, fields="URL") }) #########################################################################/** # @RdocMethod getContribUrl # # @title "Gets the URL(s) from where this package can be installed" # # \description{ # @get "title" by first looking for comma or semicolon separated URLs # at the optional \code{ContribURL} line in the \code{DESCRIPTION} file # of the package. If no such line exists, \code{getUrl()} is used. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a vector of @character strings. # } # # \examples{ # pkg <- Package("R.oo") # print(getContribUrl(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getContribUrl", "Package", function(this, ...) { urls <- getDescriptionFile(this, fields="ContribURL") if (is.null(urls) || is.na(urls)) { urls <- getDescriptionFile(this, fields="URL") if (is.null(urls) || is.na(urls)) { return(NA_character_) } } urls <- strsplit(urls, "[,;]")[[1]] urls <- gsub("^[ \t]*", "", urls) urls <- gsub("[ \t]*$", "", urls) urls }, private=TRUE) #########################################################################/** # @RdocMethod getDevelUrl # # @title "Gets the URL(s) from where the developers version of this package can be installed" # # \description{ # @get "title" by looking for comma or semicolon separated URLs # at the optional \code{DevelURL} line in the \code{DESCRIPTION} file # of the package. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a vector of @character strings. # } # # \examples{ # pkg <- Package("R.oo") # print(getDevelUrl(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getDevelUrl", "Package", function(this, ...) { urls <- getDescriptionFile(this, fields="DevelURL") if (is.null(urls) || is.na(urls)) { return(NA_character_) } urls <- strsplit(urls, "[,;]")[[1]] urls <- gsub("^[ \t]*", "", urls) urls <- gsub("[ \t]*$", "", urls) urls }, private=TRUE) #########################################################################/** # @RdocMethod getMaintainer # # @title "Gets the Maintainer of this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{as}{A @character string specifying the return format.} # \item{include}{A @character @vector specifying which person fields # to include if returning a @character string.} # \item{...}{Optional arguments passed to @see "utils::format.person".} # } # # \value{ # Returns a @character string or a @see "utils::person" object. # } # # \examples{ # pkg <- Package("R.oo") # print(getMaintainer(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getMaintainer", "Package", function(this, as=c("character", "person"), include=c("given", "family"), ...) { # Argument 'as': as <- match.arg(as) persons <- getDescriptionFile(this, fields=c("Authors@R", "Maintainer")) persons <- persons[!is.na(persons)] if (length(persons) == 0L) { return(NA_character_) } persons <- persons[1L] key <- names(persons)[1L] # Parse? if (key == "Authors@R") { personsP <- eval(parse(text=persons)) # Find creators isCreator <- sapply(personsP, FUN=function(p) is.element("cre", p$role)) if (any(isCreator)) { personsP <- personsP[isCreator] } persons <- format(personsP, include=include, ...) } else { personsP <- NULL } if (as == "character") { return(persons) } if (is.null(personsP)) { personsP <- as.person(persons) } personsP }) #########################################################################/** # @RdocMethod getAuthor # # @title "Gets the Author of this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{as}{A @character string specifying the return format.} # \item{include}{A @character @vector specifying which person fields # to include if returning a @character string.} # \item{...}{Optional arguments passed to @see "utils::format.person".} # } # # \value{ # Returns a @character string or a @see "utils::person" object. # } # # \examples{ # pkg <- Package("R.oo") # print(getAuthor(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getAuthor", "Package", function(this, as=c("character", "person"), include=c("given", "family"), ...) { # Argument 'as': as <- match.arg(as) persons <- getDescriptionFile(this, fields=c("Authors@R", "Author")) persons <- persons[!is.na(persons)] if (length(persons) == 0L) { return(NA_character_) } persons <- persons[1L] key <- names(persons)[1L] # Parse? if (key == "Authors@R") { personsP <- eval(parse(text=persons)) persons <- format(personsP, include=include, ...) } else { personsP <- NULL } if (as == "character") { return(persons) } if (is.null(personsP)) { personsP <- as.person(persons) } personsP }) #########################################################################/** # @RdocMethod getTitle # # @title "Gets the Title of this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # pkg <- Package("R.oo") # print(getTitle(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getTitle", "Package", function(this, ...) { getDescriptionFile(this, fields="Title") }) #########################################################################/** # @RdocMethod getLicense # # @title "Gets the License of this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # pkg <- Package("R.oo") # print(getLicense(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getLicense", "Package", function(this, ...) { getDescriptionFile(this, fields="License") }) #########################################################################/** # @RdocMethod getBundle # # @title "Gets the Bundle that this package might belong to" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # If the package is part of a bundle, the name of the bundle is returned. # Otherwise, @NULL is returned. # } # # \details{ # The first call to this method is normally slow because all installed # packages are scanned. The result of this first call is cached and # used as the return value for all subsequent calls, which are then much # faster. # } # # \examples{\donttest{ # pkg <- Package("R.oo") # print(getBundle(pkg)) # }} # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getBundle", "Package", function(this, ...) { if (is.null(this$.inBundle)) { # installed.packages() may be slow()! pkgs <- installed.packages() if (is.element("Bundle", colnames(pkgs))) { names <- pkgs[,"Package"] bundle <- pkgs[names == getName(this), "Bundle"] } else { bundle <- NA } this$.inBundle <- bundle } if (is.na(this$.inBundle)) { NULL } else { this$.inBundle } }, protected=TRUE) #########################################################################/** # @RdocMethod getBundlePackages # # @title "Gets the names of the other packages that is in the same bundle as this package" # # \description{ # @get "title" as specified by the \code{DESCRIPTION} file. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character @vector of package names or @NULL. # } # # \details{ # The first call to this method is normally slow because all installed # packages are scanned. The result of this first call is cached and # used as the return value for all subsequent calls, which are then much # faster. # } # # \examples{ # pkg <- Package("R.oo") # print(getBundle(pkg)) # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getBundlePackages", "Package", function(this, ...) { bundle <- getBundle(this) if (is.null(bundle)) return(NULL) if (is.null(this$.bundlePackages)) { pkgs <- installed.packages() bundles <- pkgs[,"Bundle"] incl <- !is.na(bundles) & (bundles == bundle) this$.bundlePackages <- pkgs[incl, "Package"] } this$.bundlePackages }, protected=TRUE) #########################################################################/** # @RdocMethod getChangeLog # @aliasmethod getNews # @aliasmethod getHistory # # @title "Gets the change log of this package" # # \description{ # @get "title", that is, (by default) the \code{NEWS} (then the # \code{HISTORY} and \code{ChangeLog}) file, which should is expected to # be located in the root directory of the package, # i.e. @seemethod "getPath". # } # # @synopsis # # \arguments{ # \item{filenames}{A @character @vector of (non-case sensitive) filenames # to be searched for.} # \item{newline}{The @character string to collapse lines in the file.} # \item{...}{Not used.} # } # # \value{ # Returns the complete contents of the change log file as a # @character string. If not found, @NULL is returned. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getChangeLog", "Package", function(this, filenames=c("NEWS", "HISTORY", "ChangeLog"), newline="\n", ...) { # Argument 'filenames': filenames <- as.character(filenames) filenames <- tolower(filenames) path <- getPath(this) files <- list.files(path=path) # Find change log files idx <- match(filenames, tolower(files)) idx <- idx[!is.na(idx)] files <- files[idx] if (length(files) == 0) return(NULL) # First file file <- files[1] pathname <- file.path(path, file) lines <- readLines(pathname) lines <- paste(lines, collapse=newline) lines }) setMethodS3("getHistory", "Package", function(this, ...) { getChangeLog(this, ...) }) setMethodS3("getNews", "Package", function(this, ...) { getChangeLog(this, ...) }) #########################################################################/** # @RdocMethod showChangeLog # @aliasmethod showHistory # @aliasmethod showNews # # @title "Show the change log of this package" # # \description{ # @get "title". # If the change log file does not exist, an exception is thrown. # } # # @synopsis # # \arguments{ # \item{filenames}{A @character @vector of (non-case sensitive) filenames # to be searched for.} # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seemethod "getChangeLog". # @seeclass # } #*/######################################################################### setMethodS3("showChangeLog", "Package", function(this, filenames=c("NEWS", "HISTORY", "ChangeLog"), ...) { # Argument 'filenames': filenames <- as.character(filenames) filenames <- tolower(filenames) path <- getPath(this) files <- list.files(path=path) # Find change log files idx <- match(filenames, tolower(files)) idx <- idx[!is.na(idx)] files <- files[idx] if (length(files) == 0) return(NULL) # First file file <- files[1] if (length(file) == 0) throw("NEWS/HISTORY/ChangeLog file for package ", getName(this), " does not exist.") pathname <- file.path(path, file) file.show(pathname, ...) }) setMethodS3("showHistory", "Package", function(this, ...) { showChangeLog(this, ...) }) setMethodS3("showNews", "Package", function(this, ...) { showChangeLog(this, ...) }) #########################################################################/** # @RdocMethod getHowToCite # # @title "Gets the citation of this package" # # \description{ # @get "title". # If text file \code{HOWTOCITE} exists in package root directory, # then its contents is retrieved, otherwise @see "utils::citation" # for the package is retrieved. # } # # @synopsis # # \arguments{ # \item{newline}{The @character string to collapse lines in the file.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("getHowToCite", "Package", function(this, newline="\n", ...) { if (file.exists(pathname <- file.path(getPath(this), "HOWTOCITE"))) { lines <- readLines(pathname) } else { db <- citation(package=getName(this)) lines <- format(db, style="textVersion") } lines <- paste(lines, collapse=newline) lines }, protected=TRUE) #########################################################################/** # @RdocMethod showHowToCite # # @title "Show the HOWTOCITE file of this package" # # \description{ # @get "title". See also @seemethod "getHowToCite". # If the \code{HOWTOCITE} file does not exist, an exception is thrown. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("showHowToCite", "Package", function(this, ...) { path <- getPath(this) files <- list.files(path=path) file <- files[tolower(files) == "howtocite"] if (length(file) == 0) throw("HOWTOCITE file for package ", getName(this), " does not exist.") pathname <- file.path(path, file) file.show(pathname) }, protected=TRUE) #########################################################################/** # @RdocMethod startupMessage # # @title "Generates a 'package successfully loaded' package startup message" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Additional arguments passed to # @see "R.methodsS3::pkgStartupMessage".} # } # # \value{ # Returns nothing. # } # # @author # # \seealso{ # @seeclass # } #*/######################################################################### setMethodS3("startupMessage", "Package", function(this, ...) { date <- getDate(this) if (is.na(date)) { msg <- sprintf("%s v%s successfully loaded. See ?%s for help.", getName(this), getVersion(this), getName(this)) } else { msg <- sprintf("%s v%s (%s) successfully loaded. See ?%s for help.", getName(this), getVersion(this), date, getName(this)) } pkgStartupMessage(msg, ...) }, protected=TRUE) R.oo/R/zzz.avoid_Object_clashes.R0000644000176200001440000000326613621421740016350 0ustar liggesusers## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## WORKAROUND for clashes between R.oo Object:s and Object:s ## unrelated to R.oo created by other packages. ## ## Package 'rJava': ## Some R.oo S3 methods for Object and Exception override ## the intended ones for rJava objects with class attributes ## containing these classes as well. ## See https://github.com/s-u/rJava/issues/60 ## ## Package 'arrow': ## `$<-.Object` causes problem for arrow:::as_arrow(). ## See https://github.com/HenrikBengtsson/R.oo/issues/21 ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .fixMethodS3 <- function(generic, class, expr=NULL, envir=parent.frame()) { method <- sprintf("%s.%s", generic, class) expr <- substitute(expr) f <- get(method, mode="function", envir=getNamespace("R.oo"), inherits=TRUE) if (is.null(expr)) { x <- as.symbol(names(formals(f)[1])) expr <- substitute( if(!.isRoo(x)) return(NextMethod()) , list(x=x)) } body(f) <- substitute({ a b }, list(a=expr, b=body(f))) attr(f, "S3class") <- class assign(method, f, envir=envir, inherits=TRUE) invisible(f) } ## .fixMethodS3() .isRoo <- function(x) is.environment(attr(x, ".env")) ## rJava .fixMethodS3("names", "Object") .fixMethodS3("$", "Object") .fixMethodS3("[[", "Object") .fixMethodS3("print", "Object") .fixMethodS3("print", "Exception") ## arrow .fixMethodS3("$<-", "Object") ## Some other, just in case .fixMethodS3("[[<-", "Object") .fixMethodS3("as.character", "Object") .fixMethodS3("clone", "Object") .fixMethodS3("extend", "Object") .fixMethodS3("ll", "Object") .fixMethodS3("names", "Object") .fixMethodS3("objectSize", "Object") .fixMethodS3("print", "Object") R.oo/R/BasicObject.R0000644000176200001440000005317113563564136013606 0ustar liggesusers###########################################################################/** # @RdocClass BasicObject # # @title "A root class like Object but without references" # # \description{ # R.oo\cr # \bold{Class BasicObject}\cr # # public class \bold{BasicObject}\cr # } # # @synopsis # # \arguments{ # \item{core}{The core value of the object.} # } # # \section{Fields and Methods}{ # @allmethods # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{internal} #*/########################################################################### setConstructorS3("BasicObject", function(core=NULL) { # Create a new environment and wrap it up as a private field of a list. if (is.null(core)) core <- NA this <- core class(this) <- unique(c("BasicObject", class(this))) if (getOption("R.oo::BasicObject/instantiationTime", FALSE)) { attr(this, "...instantiationTime") <- Sys.time() } this }) ###########################################################################/** # @RdocMethod isReferable # # @title "Checks if the object is referable or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @logical value, which by default is @TRUE for all # @see "BasicObject"'s. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("isReferable", "BasicObject", function(this, ...) { TRUE }) # isReferable() ###########################################################################/** # @RdocMethod as.character # # @title "Gets a character string representing the object" # # \description{ # @get "title". # } # # @synopsis # # \value{ # Returns a @character string representation of the object. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("as.character", "BasicObject", function(x, ...) { # To please R CMD check this <- x paste(class(this)[1L], ": ", getInstantiationTime(this), sep="") }) # as.character() ###########################################################################/** # @RdocMethod getInstantiationTime # # @title "Gets the time when the object was instantiated" # # \description{ # @get "title" (created) as a POSIXt object. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a POSIXt object, which extends class POSIXct. # } # # \details{ # The instantiation timestamp is set when the object is created, and # only of option \code{"R.oo::BasicObject/instantiationTime"} is @TRUE. # } # # \seealso{ # For more about time formats and POSIX see @see "base::DateTimeClasses". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getInstantiationTime", "BasicObject", function(this, ...) { time <- attr(this, "...instantiationTime") if (!is.null(time)) return(time) # Backward compatibility (due to a SPELLING ERROR in an earlier version) time <- attr(this, "...instanciationTime") NULL }) ###########################################################################/** # @RdocMethod hashCode # # @title "Gets a hash code for the object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @integer. # } # # @author # # \seealso{ # @seemethod "equals" # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("hashCode", "BasicObject", function(this, ...) { as.integer(getInstantiationTime(this)) }) ###########################################################################/** # @RdocMethod equals # # @title "Compares an object with another" # # \description{ # @get "title" and returns @TRUE if they are equal. # The equal property must be # # 1) \emph{reflexive}, i.e. \code{equals(o1,o1)} should be @TRUE. # # 2) \emph{symmetric}, i.e. \code{equals(o1,o2)} is @TRUE if and only # if \code{equals(o2,o1)} is @TRUE. # # 3) \emph{transitive}, i.e. \code{equals(o1,o2)} is @TRUE and # \code{equals(o2,o3)} is @TRUE, then \code{equals(o1,o3)} should # be @TRUE. # # 5) \emph{consistent}, i.e. \code{equals(o1,o2)} should return the same # result on multiple invocations as long as noting has changed. # # 6) \code{equals(o1,NULL)} should return @FALSE. # # By default, the method returns @TRUE if and only if the two # references compared refer to the same @see "BasicObject", i.e. # \code{( !is.null(obj) && (hashCode(this) == hashCode(obj)) )}. # } # # @synopsis # # \arguments{ # \item{other}{The other object this object should be compared to.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the objects are equal, otherwise @FALSE. # } # # \seealso{ # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("equals", "BasicObject", function(this, other, ...) { ( !is.null(other) && (hashCode(this) == hashCode(other)) ) }) ###########################################################################/** # @RdocMethod print # # @title "Prints an BasicObject" # # \description{ # For all objects of class @see "BasicObject", this method will print the # value of \code{as.character()} of the object. Note that this function is # not called if the argument is not an object of class @see "BasicObject". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # @author # # \seealso{ # @see "base::print.default" # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("print", "BasicObject", function(x, ...) { print(as.character(x)) }) # print() ###########################################################################/** # @RdocMethod objectSize # # @title "Gets the size of the BasicObject in bytes" # # \description{ # @get "title" by summing the sizes of all its members. For this reason, # the size of memory the BasicObject actually allocates might vary slightly. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an @integer specifying the size of the object in number of bytes. # } # # @author # # \seealso{ # @see "utils::object.size". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("objectSize", "BasicObject", function(this, ...) { object.size(this) }) # objectSize() ###########################################################################/** # @RdocMethod getFields # # @title "Returns the field names of an BasicObject" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{private}{If @TRUE, private fields will also be returned, # otherwise only public fields are returned.} # \item{...}{Not used.} # } # # \value{ # Returns a @character @vector of field names. # } # # @author # # \seealso{ # To check if a field exists or not, see @seemethod "hasField". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("getFields", "BasicObject", function(this, private=FALSE, ...) { members <- names(attributes(this)) if (!private) { isPrivate <- (regexpr("^[.].*", members) != -1) members <- members[!isPrivate] } members }) # getFields() ###########################################################################/** # @RdocMethod hasField # # @title "Checks if a field exists or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{field}{@vector of fields to be checked if they exists or not.} # \item{...}{Not used.} # } # # \value{ # Returns a @logical @vector indicating for each field if it exists or not. # } # # @author # # \seealso{ # To get the fields of an Object, see @seemethod "getFields". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("hasField", "BasicObject", function(this, field, ...) { !is.na(match(field, getFields(this, private=TRUE))) }) # hasFields() ###########################################################################/** # @RdocMethod attach # # @title "Attach an BasicObject to the R search path" # # \description{ # Attach the members of an BasicObject to the \R search path. # # If trying to attach the same BasicObject twice without detaching it # in between, a @warning will be generated and nothing will be done. # } # # @synopsis # # \arguments{ # \item{private}{If @TRUE, private fields will also be attached, # otherwise not.} # \item{pos}{The position at in search path where the BasicObject should be # inserted.} # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the @see "BasicObject" was attached, otherwise @FALSE. # } # # @author # # \seealso{ # @seemethod "detach" and @see "base::attach", @see "base::detach". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("attach", "BasicObject", function(this, private=FALSE, pos=2, ...) { # To please R CMD check attachX <- base::attach attachName <- as.character.BasicObject(this) if (is.element(attachName, search())) { warning(paste("Object is already attached:", attachName)) return(invisible(FALSE)) } if (is.list(this)) { attachX(unclass(this), name=attachName, pos=pos) } else { attachX(list(), name=attachName, pos=pos) } members <- names(attributes(this)) for (member in members) { assign(member, attr(this, member), pos=pos) } return(invisible(TRUE)) }) # attach() ###########################################################################/** # @RdocMethod detach # # @title "Detach an BasicObject from the R search path" # # \description{ # Detach, from the \R search path, an BasicObject that has previously been # attached. If the BasicObject was not attached, a @warning will be # generated and nothing will be done. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the BasicObject was detached, otherwise @FALSE. # } # # @author # # \seealso{ # @seemethod "attach" and @see "base::attach", @see "base::detach". # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("detach", "BasicObject", function(this, ...) { attachName <- as.character.BasicObject(this) if (!is.element(attachName, search())) { warning(paste("Object is not attached:", attachName)) return(invisible(FALSE)) } pos <- which(search() == attachName) if (length(pos) == 1L) detach(pos=pos) return(invisible(TRUE)) }) # detach() ###########################################################################/** # @RdocMethod extend # # @title "Extends another class" # # \description{ # via a mechanism known as "parasitic inheritance". # Simply speaking this method "extends another class". What is actually # happening is that it creates an instance of class name \code{...className}, # by taking another BasicObject instance and add \code{...className} to # the class list and also add all the named values in @... as fields to the # new instance. # # The method should be used by the constructor of a class and nowhere else. # } # # @synopsis # # \arguments{ # \item{...className}{The name of new class.} # \item{...}{Named values representing the fields of the new instance.} # } # # \value{ # Returns an BasicObject of class \code{className}. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("extend", "BasicObject", function(this, ...className, ...) { fields <- list(...) names <- names(fields) for (ii in seq_along(fields)) { name <- names[ii] if (is.null(name) || nchar(name) == 0) { callNames <- names(sys.call()) callNames <- callNames[nchar(callNames) > 0] matchNames <- paste("^", callNames, sep="") for (jj in seq_along(matchNames)) { if (regexpr(matchNames[jj], "...className") != -1) { className <- sys.call()[[3]] throw("Could not set field of class (probably called ", className, ") because the field name is a prefix to the argument name ", "\"...className\": ", callNames[jj]) } } # for (jj ...) throw("Missing name of field #", ii, " in class definition: ", ...className) } attr(this, name) <- fields[[ii]] } # for (ii ...) class(this) <- c(...className, class(this)) this }) # extend() ###########################################################################/** # @RdocMethod newInstance # # @title "Creates a new instance of the same class as this object" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Arguments passed to the constructor of the corresponding # @see "BasicObject" class.} # } # # \value{ # Returns a reference to an instance of @see "BasicObject" or a subclass thereof. # } # # @author # # \seealso{ # @see "newInstance.Object". # @see "newInstance.Class". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("newInstance", "BasicObject", function(this, ...) { # Creates a new instance of the same class clazz <- Class$forName(class(this)[1]) newInstance(clazz, ...) }, private=TRUE) ###########################################################################/** # @RdocMethod $ # @aliasmethod [[ # # @title "Makes the fields and methods of an BasicObject accessible via the \$ and the [[ operator" # # \description{ # @get "title". # } # # \usage{ # \method{$}{BasicObject}(this, name) # \method{[[}{BasicObject}(this, name, exact=TRUE) # } # # \arguments{ # \item{name}{The name of the field or method to be accessed.} # } # # \value{ # Returns the value of a field or a method (@function). # If no such field or method exists, @NULL is returned. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("$", "BasicObject", function(this, name) { memberAccessorOrder <- attr(this, ".memberAccessorOrder") if (is.null(memberAccessorOrder)) memberAccessorOrder <- c(1,2,3,4) for (memberAccessor in memberAccessorOrder) { if (memberAccessor == 1) { firstChar <- substr(name, 1,1) isPrivate <- identical(firstChar, ".") isField <- (regexpr(" ", name) != -1) # Do not try to access private fields using a get() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! if (!isField && !isPrivate && is.null(attr(this, "disableGetMethods"))) { # 1. Is it a get() method? getName <- paste(c("get", toupper(firstChar), substr(name,2,nchar(name))),collapse="") getMethodNames <- paste(getName, class(this), sep=".") for (getMethodName in getMethodNames) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(getMethodName, mode="function")) { ref <- this attr(ref, "disableGetMethods") <- TRUE return( get(getMethodName, mode="function")(ref) ) } } } } else if (memberAccessor == 2) { # 2. Is it a field? value <- attr(this, name) if (!is.null(value)) return(value) } else if (memberAccessor == 3) { # 3. Is it a static S3 method? methodNames <- paste(name, class(this), sep=".") for (methodName in methodNames) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(methodName, mode="function")) { # # Alt 1. Rather "obfuscated" code # method <- get(methodName, mode="function") # fcn <- function(...) method(this, ...) # Alt 3. Using explicit UseMethod() code code <- sprintf("function(...) \"%s\"(this, ...)", name) fcn <- eval(base::parse(text=code)) return(fcn) } } } } # for (memberAccessor in memberAccessorOrder) # 5. Otherwise, return NULL. NULL }) # $() setMethodS3("[[", "BasicObject", function(this, name, exact=TRUE) { .subset2Internal(this, name=name, exact=exact) }) setMethodS3(".subset2Internal", "BasicObject", function(this, name, exact=TRUE, ...) { memberAccessorOrder <- attr(this, ".memberAccessorOrder") if (is.null(memberAccessorOrder)) memberAccessorOrder <- c(1,2,3,4) for (memberAccessor in memberAccessorOrder) { if (memberAccessor == 1) { firstChar <- substr(name, 1,1) isPrivate <- identical(firstChar, ".") isField <- (regexpr(" ", name) != -1) # Do not try to access private fields using a get() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! if (!isField && !isPrivate && is.null(attr(this, "disableGetMethods"))) { # 1. Is it a get() method? getName <- paste(c("get", toupper(firstChar), substr(name,2,nchar(name))),collapse="") getMethodNames <- paste(getName, class(this), sep=".") for (getMethodName in getMethodNames) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(getMethodName, mode="function")) { ref <- this attr(ref, "disableGetMethods") <- TRUE return( get(getMethodName, mode="function")(ref) ) } } } } else if (memberAccessor == 2) { # 2. Is it a field? value <- attr(this, name) if (!is.null(value)) return(value) } else if (memberAccessor == 3) { # 3. Is it a method? methodNames <- paste(name, class(this), sep=".") for (methodName in methodNames) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(methodName, mode="function")) { method <- get(methodName, mode="function") return( function(...) method(this, ...) ) } } } } # for (memberAccessor in memberAccessorOrder) # 5. Otherwise, return NULL. NULL }, private=TRUE) # .subset2Internal() ###########################################################################/** # @RdocMethod $<- # @aliasmethod [[<- # # @title "Makes the fields and methods of an BasicObject assignable via the \$<- and the [[<- operator" # # \description{ # @get "title". # } # # \usage{ # \method{$}{BasicObject}(this, name) <- value # \method{[[}{BasicObject}(this, name) <- value # } # # \arguments{ # \item{name}{The name of the \preformatted{set()} method or the # name of the field to be assigned the new value.} # \item{value}{The value to be assigned.} # } # # \value{ # Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. # } # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} #*/########################################################################### setMethodS3("$<-", "BasicObject", function(this, name, value) { memberAccessorOrder <- attr(this, ".memberAccessorOrder") if (is.null(memberAccessorOrder)) memberAccessorOrder <- c(1,2,3,4) for (memberAccessor in memberAccessorOrder) { if (memberAccessor == 1) { # Do not try to access private fields using a set() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! firstChar <- substr(name, 1,1) isPrivate <- identical(firstChar, ".") isField <- (regexpr(" ", name) != -1) if (!isField && !isPrivate && is.null(attr(this, "disableSetMethods"))) { # 1. Is it a set() method? setName <- paste(c("set", toupper(firstChar), substr(name,2,nchar(name))),collapse="") setMethodNames <- paste(setName, class(this), sep=".") for (setMethodName in setMethodNames) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (exists(setMethodName, mode="function")) { ref <- this attr(ref, "disableSetMethods") <- TRUE this <- get(setMethodName, mode="function")(ref, value) attr(this, "disableSetMethods") <- NULL return(this) } } } } else if (memberAccessor == 2) { # 2. If there exists a field, assign the value to that field. if (!is.null(attr(this, name))) { attr(this, name) <- value return(this) } } else if (memberAccessor == 4) { # 4. Otherwise, assign the value to a new field. attr(this, name) <- value return(this) } } # for (memberAccessor in memberAccessorOrder) this }) # $<-() setMethodS3("[[<-", "BasicObject", function(this, name, value) { ## Must use do.call() here; see detailed comment for `[[<-.Object`. do.call(`$<-`, args = list(this, name, value)) }) # "[[<-"() setMethodS3(".DollarNames", "BasicObject", .DollarNames.Object, appendVarArgs=FALSE, private=TRUE) R.oo/R/Class.misc.R0000644000176200001440000001250413563564136013430 0ustar liggesusers###########################################################################/** # @set "class=Class" # # @RdocMethod getRdDeclaration # # @title "Gets the class declaration in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getRdDeclaration", "Class", function(this, ...) { s <- "public"; # visibility(this) if (isAbstract(this)) s <- paste(s, "abstract") if (isStatic(this)) s <- paste(s, "static") if (inherits(this, "Class")) s <- paste(s, "class") else throw(getName(this), " is neither a class nor an interface.") s <- paste(s, " \\bold{", getName(this), "}\\cr\n", sep="") links <- getSuperclasses(this) if (length(links) > 0) { name <- links[1] link <- name cls <- .getClassByName(name, mustExist=FALSE) if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) link <- paste("\\link{", link ,"}", sep="") else link <- paste("\\link[", pkg, "]{", link ,"}", sep="") if (isAbstract(cls)) link <- paste("\\emph{", link, "}", sep="") } paste("\\code{", link ,"}", sep="") s <- paste(s, "extends ", link, "\\cr\n", sep="") } s }, private=TRUE) ###########################################################################/** # @RdocMethod getRdMethods # # @title "Gets the methods of a class in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{visibilities}{A @character string specifying what types of methods # to return.} # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getRdMethods", "Class", function(class, visibilities=c("private", "protected", "public"), ...) { className <- getName(class) methods <- getMethods(class, private=TRUE); # Excludes empty classes! methods <- methods[[className]] methods <- names(methods) src <- "\\bold{Methods:}\\cr\n" tmpsrc <- "\\tabular{rll}{\n" count <- 0 for (method in methods) { fcnName <- paste(method, className, sep=".") fcn <- .getS3Method(fcnName) modifiers <- attr(fcn, "modifiers") if (Rdoc$isVisible(modifiers, visibilities)) { helpName <- Rdoc$createName(getName(class), method, escape=TRUE) label <- method title <- Rdoc$getRdTitle(class, method) package <- attr(title, "package") if (is.null(package)) package <- Rdoc$package # Is there a specific help document for this method or not? if (!is.null(title)) { link <- paste("\\link[", package, ":", helpName, "]{", label, "}", sep="") } else { link <- label } item <- paste(" \\tab \\code{", link, "} \\tab ", sep="") # Create the title if (!is.null(title)) { if (title != "") item <- paste(item, title, ".\\cr", sep="") } else { item <- paste(item, " -\\cr", sep="") } tmpsrc <- paste(tmpsrc, item, "\n", sep="") count <- count + 1 } # if(isVisible(...)) } tmpsrc <- paste(tmpsrc, "}\n", sep=""); # end of \tabular{rll} if (count == 0) src <- paste(src, "\\emph{No methods defined}.\n", sep="") else src <- paste(src, tmpsrc, sep="") src }, private=TRUE) ###########################################################################/** # @RdocMethod getRdHierarchy # # @title "Gets the class hierarchy in Rd format" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # @author # # \seealso{ # @seeclass # } # # @keyword documentation #*/########################################################################### setMethodS3("getRdHierarchy", "Class", function(this, ...) { package <- getPackage(this) s <- paste("Package: ", package, "\\cr\n") what <- if (inherits(this, "Class")) "Class" else "Interface" s <- paste(s, "\\bold{", what, " ", getName(this), "}\\cr\n\n", sep="") indent <- "" for (extend in rev(getSuperclasses(this))) { link <- sapply(extend, FUN=function(name) { # isAbstract <- FALSE link <- name cls <- .getClassByName(name, mustExist=FALSE) if (inherits(cls, "Class")) { pkg <- getPackage(cls) if (is.null(pkg)) { link <- paste("\\link{", link ,"}", sep="") } else { link <- paste("\\link[", pkg, "]{", link ,"}", sep="") } # if (isAbstract(cls)) { # link <- paste("\\emph{", link, "}", sep="") # isAbstract <- TRUE } paste("\\code{", link ,"}", sep="") }) if (indent == "") { s <- paste(s, link, "\\cr\n", sep="") indent <- "~~" } else { s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n", sep="") indent <- paste(indent, "~~~~~", sep="") } s <- paste(s, "\\code{", indent, "|}\\cr\n", sep="") } link <- paste("\\code{", getName(this), "}", sep="") if (isAbstract(this)) link <- paste("\\emph{", link, "}", sep="") s <- paste(s, "\\code{", indent, "+--}", link, "\\cr\n\n", sep="") s }, private=TRUE) R.oo/R/getConstructorS3.R0000644000176200001440000000166113327450457014664 0ustar liggesusers###########################################################################/** # @RdocDefault getConstructorS3 # # @title "Get a constructor method" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{name}{The name of the constructor function.} # \item{...}{Not used.} # } # # \seealso{ # @see "setConstructorS3". # @see "R.methodsS3::getMethodS3". # @see "R.methodsS3::isGenericS3". # } # # @author # # @keyword "programming" # @keyword "methods" #*/########################################################################### setMethodS3("getConstructorS3", "default", function(name, ...) { # TO DO/FIX ME: This part only works when packages are attached. # /HB 2013-10-08 if (!exists(name, mode="function")) { throw("No such function found: ", name) } fcn <- get(name, mode="function") if (isGenericS3(fcn)) { throw("The function found is an S3 generic function: ", name) } fcn }) R.oo/R/060.Class.R0000644000176200001440000011572713563564136013015 0ustar liggesusers###########################################################################/** # @RdocClass Class # # @title "The Class class describes an Object class" # # \description{ # @classhierarchy # # @get "title". # First of all, this class is most commonly used \emph{internally} and # neither the end user nor the programmer need to no about the class Class. # } # # @synopsis # # \arguments{ # \item{name}{Name of the class.} # \item{constructor}{Constructor (@function) of any Object class.} # } # # \section{Fields and Methods}{ # @allmethods # } # # \details{ # The class Class describes the Object class or one of its subclasses. # All classes and constructors created by \code{setConstructorS3()} will # be of class Class. Its methods provide ways of accessing static fields # and static methods. Its \emph{print()} method will print detailed # information about the class and its fields and methods. # } # # @author # # @keyword programming # @keyword methods #*/########################################################################### setConstructorS3("Class", Class) # Class() ###########################################################################/** # @RdocMethod as.character # # @title "Returns a short string describing the class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # print(as.character(Object)) # # # gives: "Class Object: no fields, 8 methods (no inherited)" # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("as.character", "Class", function(x, ...) { # To please R CMD check this <- x if (is.null(getStaticInstance(this))) return(as.character.Object(this)) fields <- getFields(this) nbrOfFields <- length(fields) methods <- getMethods(this, unique=TRUE) count <- unlist(lapply(methods, FUN=length)) names(count) <- names(methods) nbrOfMethods <- sum(count) count <- count[-1L] s <- paste(class(this)[1L], " ", getName(this), " has ", nbrOfFields, " field" , if (nbrOfFields != 1L) "s", " and ", nbrOfMethods, " method", if (nbrOfMethods != 1L) "s", sep="") if (length(count) > 0L) { isAre <- c("is", "are")[1L + (count != 1L)] isAre[1L] <- paste(isAre[1L], "implemented in") isAre[-1L] <- "in" s <- paste(sep="", s, " of which ", paste(paste(count, isAre, names(count)), collapse=", "), ".") } else { s <- paste(s, ".", sep="") } s }) # as.character() ###########################################################################/** # @RdocMethod print # # @title "Prints detailed information about the class and its fields and methods" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Arguments passed to @seemethod "getDetails".} # } # # \value{ # Returns nothing. # } # # \examples{ # print(Object) # } # # @author # # \seealso{ # @seemethod "getDetails" # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("print", "Class", function(x, ...) { cat(getDetails(x, ...)) }) # print() ###########################################################################/** # @RdocMethod getName # # @title "Gets the name of the class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # print(getName(Object)) # "Object" # print(getName(Class)) # "Class" # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getName", "Class", function(this, ...) { static <- getStaticInstance(this) class(static)[1L] }) # getName() ###########################################################################/** # @RdocMethod getSuperclasses # # @title "Gets the super classes of this class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @vector of @character strings. # } # # \examples{ # print(getSuperclasses(RccViolationException)) # \dontrun{ # returns # [1] "Exception" "try-error" "Object" # } # } # # @author # # \seealso{ # @see "base::class". # @seemethod "getKnownSubclasses". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getSuperclasses", "Class", function(this, ...) { class(getStaticInstance(this))[-1L] }) # getSuperclasses() ###########################################################################/** # @RdocMethod getKnownSubclasses # # @title "Gets all subclasses that are currently loaded" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @vector of @character strings. # } # # \examples{ # \dontrun{ # # Due to a bug in R CMD check (R v1.7.1) the MicroarrayData$read() call # # below will call getKnownSubclasses(), which will generate # # "Error in exists(objectName, mode = "function") : # # [2003-07-07 23:32:41] Exception: F used instead of FALSE" # # Note that the example still work, just not in R CMD check # # print(getKnownSubclasses(Exception)) # } # \dontrun{ # returns # [1] "Exception" "try-error" "Object" # } # } # # @author # # \seealso{ # @seemethod "getSuperclasses". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getKnownSubclasses", "Class", function(this, sort=TRUE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - getKnownSubclassesInEnvironment <- function(name, envir, ...) { # Get all objects objectNames <- ls(envir=envir) # Exclude itself (to avoid recursive calls) objectNames <- setdiff(objectNames, name) # Nothing to do? if (length(objectNames) == 0L) return(NULL) # Keep only functions that are Class objects keep <- suppressWarnings({ sapply(objectNames, FUN=function(objectName) { expr <- substitute({ tryCatch({ is.function(x) && inherits(x, "Class") }, error=function(ex) FALSE) }, list(x=as.name(objectName))) eval(expr, envir=envir) }) }) objectNames <- objectNames[keep] # Nothing to do? if (length(objectNames) == 0L) return(NULL) classes <- NULL for (objectName in objectNames) { clazz <- get(objectName, mode="function", envir=envir, inherits=FALSE) # Get all its super classes... extends <- getSuperclasses(clazz) # Does it extend this class? if (is.element(name, extends)) { classes <- c(classes, getName(clazz)) } } # for (objectName ...) classes } # getKnownSubclassesInEnvironment() name <- getName(this) classes <- c() ## # (a) Search loaded namespaces ## for (ns in loadedNamespaces()) { ## envir <- getNamespace(ns) ## classesT <- getKnownSubclassesInEnvironment(name, envir=envir) ## classes <- c(classes, classesT) ## } # (a) Search attached search paths for (pos in seq_along(search())) { envir <- as.environment(pos) classesT <- getKnownSubclassesInEnvironment(name, envir=envir) classes <- c(classes, classesT) } # Drop duplicates classes <- unique(classes) if (sort && length(classes) > 1L) classes <- sort(classes) classes }) ###########################################################################/** # @RdocMethod newInstance # # @title "Creates a new instance of this class" # # \description{ # @get "title". # Important: It should always be possible to create a new Object by # calling the constructor without arguments. # This method is simply calling the constructor method of the class. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a reference to an @see "Object". # } # # \examples{ # obj <- newInstance(Object, NA) # # # equivalent to # # obj <- Object(NA) # } # # @author # # \seealso{ # @see "newInstance.Object". # @see "newInstance.BasicObject". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("newInstance", "Class", function(this, ...) { this(...) }) # newInstance() ###########################################################################/** # @RdocMethod isAbstract # # @title "Checks if a class is abstract or not" # # \description{ # @get "title". A class is abstract if it has abstract methods. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is abstract, otherwise @FALSE. # } # # \examples{ # if (isAbstract(RccViolationException)) # throw("The class RccViolationException should NOT be abstract.") # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isAbstract", "Class", function(this, ...) { methods <- getMethods(this) methods <- unlist(methods) methods <- methods[nchar(methods) > 0L] for (method in methods) { mtd <- .getS3Method(method, envir=environment(this)) if (is.element("abstract", attr(mtd, "modifiers"))) return(TRUE) } FALSE }) ###########################################################################/** # @RdocMethod isStatic # # @title "Checks if a class is static or not" # # \description{ # @get "title". A class is static if it has static methods. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is static, otherwise @FALSE. # } # # \examples{ # if (!isStatic(RccViolationException)) # throw("RccViolationException should be static because Exception is.") # } # # @author # # \seealso{ # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isStatic", "Class", function(this, ...) { methods <- getMethods(this) methods <- unlist(methods) methods <- methods[nchar(methods) > 0L] for (method in methods) { mtd <- .getS3Method(method, envir=environment(this)) if (is.element("static", attr(mtd, "modifiers"))) return(TRUE) } FALSE }) ###########################################################################/** # @RdocMethod isPrivate # # @title "Checks if a class is defined private or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is private, otherwise @FALSE. # } # # \examples{ # if (isPrivate(RccViolationException)) # throw("The class RccViolationException should NOT be private.") # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isPrivate", "Class", function(this, ...) { is.element("private", attr(this, "modifiers")) }) ###########################################################################/** # @RdocMethod isProtected # # @title "Checks if a class is defined protected or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is protected, otherwise @FALSE. # } # # \examples{ # if (isProtected(RccViolationException)) # throw("The class RccViolationException should NOT be protected.") # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isProtected", "Class", function(this, ...) { is.element("protected", attr(this, "modifiers")) }) ###########################################################################/** # @RdocMethod isPublic # # @title "Checks if a class is defined public or not" # # \description{ # @get "title". A class is public if it is neither private nor protected. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is public, otherwise @FALSE. # } # # \examples{ # if (!isPublic(RccViolationException)) # throw("The class RccViolationException should be public.") # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isPublic", "Class", function(this, ...) { !isPrivate(this) && !isProtected(this) }) ###########################################################################/** # @RdocMethod isDeprecated # # @title "Checks if a class is deprecated or not" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if the class is deprecated, otherwise @FALSE. # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isDeprecated", "Class", function(this, ...) { is.element("deprecated", attr(this, "modifiers")) }) ###########################################################################/** # @RdocMethod forName # # @title "Gets a Class object by a name of a class" # # \description{ # @get "title". If no such class exists and exception is thrown. # } # # @synopsis # # \arguments{ # \item{...}{Optional arguments passed to internal lookup function.} # } # # \value{ # Returns a @see "Class". # } # # \examples{ # print(Class$forName("Exception")) # } # # @author # # \seealso{ # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("forName", "Class", function(static, name, ...) { .getClassByName(name, ..., mustExist=TRUE) }, static=TRUE) # forName() ###########################################################################/** # @RdocMethod getPackage # # @title "Gets the package to which the class belongs" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @see "Package". # } # # \examples{ # print(getPackage(Object)) # } # # @author # # \seealso{ # @see "Package". # @see "base::class". # @see "setConstructorS3". # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getPackage", "Class", function(this, ...) { name <- getName(this) pkgName <- NULL # (a) Search name spaces envirLast <- NULL envir <- environment(this) while (!identical(envir, globalenv()) && !identical(envir, envirLast)) { envirLast <- envir if (exists(name, mode="function", envir=envir, inherits=FALSE)) { res <- get(name, mode="function", envir=envir, inherits=FALSE) if (inherits(res, "Class")) { pkgName <- environmentName(envir) pkgName <- gsub("^package:", "", pkgName) return(pkgName) } } # Next envir <- parent.env(envir) } # while (...) # (b) Search attached ("loaded") packages packages <- search() for (pos in seq_along(packages)) { envir <- pos.to.env(pos) if (exists(name, mode="function", envir=envir, inherits=FALSE)) { res <- get(name, mode="function", envir=envir, inherits=FALSE) if (inherits(res, "Class")) { pkgName <- environmentName(envir) pkgName <- gsub("^package:", "", pkgName) return(pkgName) } } } # for (pos ...) NULL }) ###########################################################################/** # @RdocMethod getStaticInstance # # @title "Gets the static instance of this class" # # \description{ # @get "title". # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a reference to an @see "Object". # } # # \examples{ # obj <- getStaticInstance(Object) # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getStaticInstance", "Class", function(this, ...) { # First, make sure you have a reference to the actual Class object. if (!is.function(this)) { this <- .getClassByName(class(this)[1L], envir=environment(this)) } # If the static instance of this class is missing create one. envir <- attr(this, ".env") static <- get(".staticInstance", envir=envir) if (is.null(static)) { if (!exists(".isCreatingStaticInstance", envir=envir, inherits=FALSE)) { assign(".isCreatingStaticInstance", TRUE, envir=envir, inherits=FALSE) on.exit({ rm(list=".isCreatingStaticInstance", envir=envir) }, add=TRUE) constructor <- this static <- constructor() # Set the environment of the static instance to be the same # as the constructor function, i.e. the Class. environment(static) <- environment(this) assign(".staticInstance", static, envir=envir) } else { # Otherwise, just create a dummy instance in case any code is trying # to access it. static <- Object() # Set the environment of the static instance to be the same # as the constructor function, i.e. the Class. environment(static) <- environment(this) } } else { # BACKWARD PATCH: In case an old static object has been loaded # then it may not have the proper environment set. environment(static) <- environment(this) } static }) # getStaticInstance() ###########################################################################/** # @RdocMethod isBeingCreated # # @title "Checks if a class is currently being initiated initiated" # # \description{ # @get "title". # When extending a class for the first time, which is # typically done in a constructor, a static instance of the class is # created by calling the constructor without parameters. # This method provides a way to detect that second call inside the # constructor. # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns @TRUE if a static instance exists, otherwise @FALSE. # } # # @examples "../incl/isBeingCreated.Class.Rex" # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("isBeingCreated", "Class", function(this, ...) { # First, make sure you have a reference to the actual Class object. if (!is.function(this)) { this <- get(class(this)[1L], mode="function") if (!inherits(this, "Class")) throw("Not a Class object: ", class(this)[1L]) } # If the static instance of this class is missing create one. envir <- attr(this, ".env") staticInstance <- get(".staticInstance", envir=envir) if (!is.null(staticInstance)) return(FALSE) if (!exists(".isCreatingStaticInstance", envir=envir, inherits=FALSE)) return(FALSE) get(".isCreatingStaticInstance", envir=envir, inherits=FALSE) }) ###########################################################################/** # @RdocMethod getFields # # @title "Returns the field names of a class" # # \description{ # @get "title". # } # # \arguments{ # \item{private}{If @TRUE, private fields will also be returned, # otherwise only public fields are returned.} # \item{...}{Not used.} # } # # @synopsis # # \value{ # Returns a @character @vector of field names. # } # # \examples{ # print(getFields(Exception)) # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getFields", "Class", function(this, private=FALSE, ...) { static <- getStaticInstance(this) if (inherits(static, "Class")) { # Do not do a recursive call! class(static) <- setdiff(class(static), "Class") } getFields(static, private=private) }) # getFields() ###########################################################################/** # @RdocMethod getMethods # # @title "Returns the method names of class and its super classes" # # \description{ # @get "title" as a list. # } # # @synopsis # # \arguments{ # \item{private}{If @TRUE, private methods are also returned, # otherwise only public ones are returned.} # \item{deprecated}{If @TRUE, deprecated methods are also returned.} # \item{unqiue}{If @TRUE, only methods that are not implemented # in one of the subclasses are returned for each class.} # \item{...}{Not used.} # } # # \value{ # Returns a named @list of named @character strings. # } # # \examples{ # names <- getMethods(Exception) # print(names) # } # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getMethods", "Class", function(this, private=FALSE, deprecated=TRUE, unique=TRUE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - findS3MethodsByEnvironment <- function(classNames, envir, exclMods=NULL, res=list()) { # Get all objects names <- ls(envir=envir, all.names=private) # 1. Keep only names with a . (period), because the others cannot # be methods of an S3 class. names <- grep("\\.", names, value=TRUE) # 2. For each class find the methods belong to that class. for (className in classNames) { pattern <- paste("\\.", className, "$", sep="") namesT <- grep(pattern, names, value=TRUE) # Nothing todo? if (length(namesT) == 0L) next # For all methods identified, see which are functions isFunction <- sapply(namesT, FUN=exists, mode="function", envir=envir) isFunction <- unlist(isFunction, use.names=FALSE) namesT <- namesT[isFunction] names(namesT) <- gsub(pattern, "", namesT) # Nothing todo? if (length(namesT) == 0L) next # Keep only non-private methods? if (!is.null(exclMods)) { keep <- sapply(namesT, FUN=function(name) { fcn <- get(name, mode="function", envir=envir) modifiers <- attr(fcn, "modifiers") !any(is.element(exclMods, modifiers)) }) namesT <- namesT[keep] } # Nothing todo? if (length(namesT) == 0L) next namesT <- c(res[[className]], namesT) # Drop duplicates dups <- duplicated(namesT) namesT <- namesT[!dups] res[[className]] <- namesT } # for (className) res } # findS3MethodsByEnvironment() findS3Methods <- function(classNames, where=c("ns", "search")[-1L], envir=NULL, exclMods=NULL) { res <- list() # Nothing todo? if (length(classNames) == 0L) return(res) if (!is.null(envir)) { res <- findS3MethodsByEnvironment(classNames, envir=envir, exclMods=exclMods, res=res) } ## # (a) Search loaded namespaces ## if (is.element("ns", where)) { ## for (ns in loadedNamespaces()) { ## envir <- getNamespace(ns) ## res <- findS3MethodsByEnvironment(classNames, envir=envir, exclMods=exclMods, res=res) ## } ## } # (a) Search attached search paths if (is.element("search", where)) { for (pos in seq_along(search())) { envir <- as.environment(pos) res <- findS3MethodsByEnvironment(classNames, envir=envir, exclMods=exclMods, res=res) } } res } # findS3Methods() # Argument 'private': private <- as.logical(private) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Find all related S3 classes # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Exclude methods with certain modifiers? exclMods <- NULL if (!private) { exclMods <- c(exclMods, "private") } if (!deprecated) { exclMods <- c(exclMods, "deprecated") } # Scan for such methods static <- getStaticInstance(this) classNames <- class(static) envir <- environment(static) result <- findS3Methods(classNames, envir=envir, exclMods=exclMods) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Cleanup # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Keep only unique method names, regardless of Class? nClasses <- length(result) if (unique && nClasses >= 2L) { names <- lapply(result, FUN=names) for (kk in seq_len(nClasses-1L)) { # Nothing todo? if (length(names[[kk]]) == 0L) next for (ll in (kk+1L):nClasses) { # Nothing todo? if (length(names[[ll]]) == 0L) next uniqueNames <- setdiff(names[[ll]], names[[kk]]) unique <- match(uniqueNames, names[[ll]]) result[[ll]] <- result[[ll]][unique] names[[ll]] <- names[[ll]][unique] } # for (ll ...) } # for (kk ...) } } # if (unique) # Remove classes with no methods if (nClasses > 0L) { result <- result[sapply(result, FUN=function(x) (length(x) > 0L))] } result }, protected=TRUE, dontWarn="base") # getMethods() ###########################################################################/** # @RdocMethod argsToString # # @title "Gets the arguments of a function as a character string" # # \description{ # Gets the arguments (with default values) of a function as a character # string, which can be used for debugging purposes etc. # Used by: classinfo(). # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns a @character string. # } # # \examples{ # Class$argsToString(plot) # } # # \seealso{ # @seeclass # } # # @author # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("argsToString", "Class", function(this, fcn, ...) { a <- args(fcn) if (is.null(a)) return("[primitive function]") if (typeof(a) != "closure") throw("Expected closure but found something else.") args <- formals(a) argsNames <- names(args) res <- list() for (kk in seq_along(args)) { arg <- args[kk] argName <- argsNames[kk] s <- argName argDefault <- arg[[1L]] if (!missing(argDefault)) { if (is.character(argDefault)) { s <- paste(s, "=", "\"", argDefault, "\"", sep="", collapse="") } else if (is.null(argDefault)) { s <- paste(s, "=NULL", sep="", collapse="") } else if (is.language(argDefault)) { argDefault <- as.character(arg[1L]) s <- paste(s, "=", argDefault, sep="", collapse="") } else { s <- paste(s, "=", argDefault, sep="", collapse="") } } res <- c(res, list(s)) } res }, private=TRUE, static=TRUE) # argsToString ###########################################################################/** # @RdocMethod getDetails # # @title "Lists the fields and methods of a class" # # \description{ # @get "title" (or an object). # } # # @synopsis # # \arguments{ # \item{...}{Not used.} # } # # \value{ # Returns an invisible @character string of the class information. # } # # \examples{ # getDetails(Exception) # } # # @author # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("getDetails", "Class", function(this, private=FALSE, ...) { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Local functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # The class name # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class <- getName(this) s <- class # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # The super classes # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - superclasses <- getSuperclasses(this) if (length(superclasses) > 0L) { s <- paste(s, " extends ", paste(superclasses, collapse=", "), " {", sep="") } s <- paste(s, "\n", sep="") indent <- 2L indentStr <- paste(rep(" ", length.out=indent), collapse="") # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # The fields # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fields <- getFields(this, private=private) if (length(fields) > 0L) { modifiers <- rep("public", length.out=length(fields)) isPrivate <- (regexpr("^\\.", fields) != -1L) modifiers[isPrivate] <- "private" for (kk in seq_along(fields)) { s <- paste(s, indentStr, modifiers[kk], " ", fields[kk], "\n", sep="") } } ## formalsToString <- function(methodName, isConstructor=FALSE) { ## args <- argsToString(Class, method, argOffset) ## s <- paste(sep="", s, methodName, "(", args, ")\n") ## } ## formalsToString(...) methodsPerClass <- getMethods(this, private=private) if (length(methodsPerClass) > 0L) { envir <- environment(this) for (methods in methodsPerClass) { if (length(methods) > 0L) { methodNames <- names(methods) modifiers <- rep("public", length.out=length(methodNames)) isPrivate <- (regexpr("^\\.", methodNames) != -1L) modifiers[isPrivate] <- "private" for (kk in seq_along(methodNames)) { fcn <- .getS3Method(methods[kk], envir=envir, mustExist=TRUE) fcnModifiers <- attr(fcn, "modifiers") if (is.element("protected", fcnModifiers)) { modifiers[kk] <- "protected" } else if (is.element("private", fcnModifiers)) { modifiers[kk] <- "private" } if (is.element("public", fcnModifiers) || private == TRUE) { if (is.element("abstract", fcnModifiers)) modifiers[kk] <- paste(modifiers[kk], " ", "abstract", sep="") if (is.element("static", fcnModifiers)) modifiers[kk] <- paste(modifiers[kk], " ", "static", sep="") s <- paste(s, indentStr, modifiers[kk], " ", methodNames[kk], "(", sep="") args <- paste(argsToString(Class, fcn)[-1L], collapse=", ") s <- paste(s, args, ")\n", sep="") } } } } } s <- paste(s, "}\n", sep="") invisible(s) }, private=TRUE); # getDetails() ###########################################################################/** # @RdocMethod $ # @aliasmethod [[ # # @title "Makes the fields and methods of an Class accessible via the \$ and the [[ operator" # # \usage{ # \method{$}{Class}(this, name) # \method{[[}{Class}(this, name, exact=TRUE) # } # # \description{ # Makes the fields and methods of an Class accessible via the \code{$} # operator. This method is never called explicitly, but through an indirect # usage of the \code{$} operator, e.g. \code{obj$name} or # \code{obj$getValue()}. # # \enumerate{ # \item This method will first search for a \code{get()} method, # e.g. if name has the value \code{"age"}, a \code{getAge()} will be # looked for. If such a method exists it will be called with the Class # as the first and only argument, e.g. \code{getAge(this)}. # A \code{get()} is only looked for if \code{} is not a # private field. A private field is a name \emph{beginning} with a # \code{.} (period). The rational for this naming convention is to be # consistent with how \code{\link[base]{ls}()} works, which will not list # such members by default. # # \item If no such method exists, first then, this method will look a # field in the Class can has the name \code{name}. # # \item If such neither exists, a method with name \code{name} will be # searched for and returned. # # \item If no fields or methods are found at all, @NULL is returned. # } # } # # \arguments{ # \item{name}{The name of the field or method to be accessed.} # \item{...}{Not used.} # } # # \value{ # Returns the value of a field or a method (@function). # If no such field or method exists, @NULL is returned. # } # # \examples{\dontrun{For a complete example see help(Class).}} # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("$", "Class", function(this, name) { .subset2Internal(this, name=name, exact=TRUE) }) setMethodS3("[[", "Class", function(this, name, exact=TRUE) { .subset2Internal(this, name=name, exact=exact) }) setMethodS3(".subset2Internal", "Class", function(this, name, exact=TRUE, ...) { if (is.function(this)) { static <- getStaticInstance(this) } else { static <- this } firstChar <- substr(name, start=1L, stop=1L) isPrivate <- identical(firstChar, ".") # Do not try to access private fields using a get() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! if (!isPrivate && is.null(attr(static, "disableGetMethods"))) { # 1. Is it a get() method? capitalizedName <- name substr(capitalizedName, start=1L, stop=1L) <- toupper(firstChar) getMethodNames <- paste("get", capitalizedName, ".", class(static), sep="") envir <- environment(static) for (getMethodName in getMethodNames) { fcn <- .getS3Method(getMethodName, envir=envir, mustExist=FALSE) if (!is.null(fcn)) { ref <- static attr(ref, "disableGetMethods") <- TRUE return(fcn(ref)) } } } # 2. Is it a field? envir <- attr(static, ".env") # For static method calls, e.g. Class$load, 'static' has no # environment assigned and therefore, for now, no static # fields. if (!is.null(envir) && exists(name, envir=envir, inherits=FALSE)) { return(get(name, envir=envir, inherits=FALSE)) } # 3. Is it an attribute field (slot)? if (is.element(name, names(attributes(static)))) { return(attr(static, name)) } # 4. Is it a static S3 method? envir <- environment(static) methodNames <- paste(name, class(static), sep=".") for (methodName in methodNames) { mtd <- .getS3Method(methodName, envir=envir, mustExist=FALSE) if (!is.null(mtd)) { # Using explicit UseMethod() code code <- sprintf("function(...) \"%s\"(static, ...)", name) expr <- base::parse(text=code) fcn <- eval(expr) # Set the environment of the static function to inherit from the # environment of the static instance/object, which in turn is the # same as the environment of the Class/constructor. envT <- environment(static) # BACKWARD COMPATIBILTY/ROBUSTNESS: In case an old static object # has been loaded, make sure to not crash, i.e. behave as before. if (!is.null(envT)) { env <- new.env(parent=envT) env$static <- static environment(fcn) <- env } return(fcn) } } NULL }, private=TRUE) # .subset2Internal() ###########################################################################/** # @RdocMethod $<- # @aliasmethod [[<- # # @title "Makes the fields and methods of an Class assignable via the \$<- and the [[<- operator" # # \usage{ # \method{$}{Class}(this, name) <- value # \method{[[}{Class}(this, name) <- value # } # # \description{ # Makes the fields and methods of an Class assignable via the \code{$<-} # operator. This method is never called explicitly, but through an indirect # usage of the \code{$<-} operator, e.g. \code{obj$name <- "foo"}. # # \enumerate{ # \item This method will first search for a \preformatted{set()} # method, e.g. if name has the value \code{"age"}, a \code{setAge()} will # be looked for. If such a method exists it will be called with the Class # as the first argument and \code{value} as the second, e.g. # \code{setAge(this, value)}. # A \code{get()} is only looked for if \code{} is not a # private field. A private field is a name \emph{beginning} with a # \code{.} (period). The rational for this naming convention is to be # consistent with how \code{\link[base]{ls}()} works, which will not # list such members by default. # # \item If no such method exists it will assign the \code{value} to a # (existing or a non-existing) field named \code{name}. # } # # Because any \preformatted{set()} is called first, it is possible # to \emph{encapsulate} (hide away) fields with certain names or to put # restrictions to what values can be assigned to them. # } # # \arguments{ # \item{name}{The name of the \preformatted{set()} method or the # name of the field to be assigned the new value.} # \item{value}{The value to be assigned.} # \item{...}{Not used.} # } # # \value{ # Returns itself, i.e. \code{this}, as all \code{$<-} methods must do. # } # # \examples{\dontrun{For a complete example see help(Class).}} # # @author # # \seealso{ # @seeclass # } # # @keyword programming # @keyword methods #*/########################################################################### setMethodS3("$<-", "Class", function(this, name, value) { if (is.function(this)) static <- getStaticInstance(this) else static <- this firstChar <- substr(name, start=1L, stop=1L) isPrivate <- identical(firstChar, ".") # Do not try to access private fields using a set() method, # because such a functionality means that the user *expects* that # there actually is a field called '.', which he or she # should not do since it is a private field! if (!isPrivate && is.null(attr(static, "disableSetMethods"))) { # 1. Is it a set() method? capitalizedName <- name substr(capitalizedName,start=1L, stop=1L) <- toupper(firstChar) setMethodNames <- paste("set", capitalizedName, ".", class(static), sep="") envir <- environment(static) for (setMethodName in setMethodNames) { mtd <- .getS3Method(setMethodName, envir=envir, mustExist=FALSE) if (!is.null(mtd)) { ref <- static attr(ref, "disableSetMethods") <- TRUE mtd(ref, value) return(this) } } } # 3. Is it an attribute field (slot)? if (is.element(name, names(attributes(static)))) { attr(static, name) <- value return(this) } # 4. Otherwise, assign the value to an (existing or non-existing) field. assign(name, value, envir=attr(static, ".env")) invisible(this) }) # $<-() setMethodS3("[[<-", "Class", function(this, name, value) { do.call(`$<-`, list(this, name, value)) }) # "[[<-"() setMethodS3(".DollarNames", "Class", .DollarNames.Object, appendVarArgs=FALSE, private=TRUE) R.oo/MD50000644000176200001440000003461613721504716011417 0ustar liggesusersdaa2810c13803918213c97357afeda6e *DESCRIPTION e3c2912622aa80b2517da2c0785bbead *NAMESPACE 27a20c64481e8dee6f686c234d2ae45d *NEWS 5b3e0291bcc049d9ada9005162c5259a *R/000.R 036b736fd78edbfd223194ccf9341faa *R/006.fixVarArgs.R 17449bea012e661714466e173d404d9b *R/020.makeObjectFinalizer,private.R f67e4ccc5624a99c29243e395b978b71 *R/030.ObjectClassFunctions.R d31786df8ab1796ca0d4fdc8c0af8ca0 *R/040.setConstructorS3.R 1d0cceaa86005c397bd9078a0e15e99b *R/050.Object.R bdeb2c502850c167677fa399036e1638 *R/060.Class.R 5dc92b7fe9cdc5c9e04e6626609fc6bc *R/999.NonDocumentedObjects.R 83b0ae93bbd2e0b6e1c015d810ccb612 *R/999.package.R 758e4ee2f2e836f293c75ad8be85ccae *R/ASCII.R a98bccc0291194d7561353db82439401 *R/BasicObject.R edefe2421629cb833bbf9f260886a094 *R/Class.misc.R bf973c6be3fe30b28e195b3b141323f3 *R/Exception.R 2007e8e74516d315b2f790873094a9bc *R/Interface.R e1215b5a3ae63046d6d169d6efadb70e *R/InternalErrorException.R 6173096fe524e84956e96e5f0654fd77 *R/Package.R 6898dcf52f05bb5aca3ad7fe23e6d2a3 *R/RccViolationException.R 3757bdd0392a0d88d6ffd2892cf9c260 *R/Rdoc.R e007f1047cd6d22af1682b696d8111ff *R/RdocException.R e8e3b204efce65c05aa50dca1f59b970 *R/abort.R ac3a33cf1dd34179325151dd009ff6da *R/classRepresentation.misc.R 20cf67355f94923536530c23573cc6fd *R/compileRdoc.R 4a6695254272930273a3ca8a54129ab0 *R/dimension.default.R f3e2c2120d6e90a1187188ba8a355631 *R/equals.default.R 9187f4a7cc8dccaa7393da0766ea00e3 *R/error.throw.R d8c14096ad4f0cec2b18b743bde4abf3 *R/extend.default.R 2bdd10dbd7a659969077218b05d633a6 *R/getConstructorS3.R c2044ea5396bdffb7edc01380cf29658 *R/getName.environment.R bb16183f42121aacd8e94c12c44c80af *R/getNnnByName.R 6d710a81c5c3fbc09560bc68bbf46ee8 *R/hashCode.R 4a9aae846687a89e6e8b9d81ace66a9b *R/ll.default.R b8b6c695cee9eb18304ec6f0daa3dd04 *R/objectSize.default.R 1dc11d8f4746dd0832eca76a1182f4a0 *R/objectSize.environment.R 1c7049ad9a94e1f059ffc22adf66556f *R/throw.default.R d573ca299c7e656d9325f3fa35415ab5 *R/trim.R f81d192b9e80bb5e2485eadc164fb41c *R/typeOfClass.R 180c9367491b40998fd02ab386c8b440 *R/zzz.R 2ef0403219f4bb9ffa1c744bdc787c86 *R/zzz.avoid_Object_clashes.R 876ecd0d1086da7656574be4b7739d14 *inst/CITATION 7e7e13402a3c82cd31ff3b2c85341590 *inst/WORDLIST 6958ed0722d07b6ca46fafca8aabd608 *inst/doc/Bengtsson.pdf 0f69446bf87d203d9aa7ae96b6711b97 *inst/misc/ASCII.R be5e10acdaefd2ff6cc016f2a0ffb689 *inst/misc/Exception.R 785a50da848bbd6ad592edffcc3c6774 *man/000.makeObjectFinalizer.Rd 25181dbf69eb710562992cd31acea011 *man/ASCII.Rd c93c880bcff2a3decdfac66d859bbd69 *man/BasicObject.Rd 65b287cd0ee6f3a2c20a39e8e474c055 *man/Class.Rd 38b177cc40ee67af7969388f0128b692 *man/DOLLAR.BasicObject.Rd 4fe870dbf1af8e300ef2f2bb3918e91b *man/DOLLAR.Class.Rd 7eaec74879ea53b2aa94a89932a18a41 *man/DOLLAR.Object.Rd f19e562c98855468c0b7abcd66b09274 *man/DOLLARLT_-.BasicObject.Rd 21f5de4950bf328932f04e2fb1329992 *man/DOLLARLT_-.Class.Rd 5a84ab7892ca3a0329ab9990c48392e6 *man/DOLLARLT_-.Object.Rd 9255607a267448ff9e665ef01fef9300 *man/Exception.Rd b1a24e7675a94714a08c22590cd010c4 *man/Interface.Rd ce077dc2a937b8ad29504501084e3d2a *man/InternalErrorException.Rd 16cdcb7c6c60f84829d097362b8b22bc *man/Non-documented_objects.Rd 9402d21c663fd36e71c99ae23c5a674c *man/Object.Rd f2345a3c94453786c8795ddb27929ba8 *man/Package.Rd 6c45a8333908be4343911761c6f7a862 *man/R.oo-package.Rd 96b8ebaca18f24fa8909a41fc24a46a6 *man/RccViolationException.Rd 2870d6bf83a0fc1e62838cc078f07c0e *man/Rdoc.Rd dac8e8181cc28d73f816b9a77894ba1e *man/RdocException.Rd f2decc7171f4f3f3235896658981729d *man/abort.Rd 0e332f1997b5165c17da8aaa043f55e5 *man/argsToString.Class.Rd 9e7b5e9469b332af8da82d633dc22b68 *man/argsToString.Rdoc.Rd 2081d6fe742815ce312ba99135dfcd44 *man/as.character.BasicObject.Rd 7a872a1ce978fd53dd39dae97ce6f04b *man/as.character.Class.Rd 9c5b7596466964b241d878a4a492c3f1 *man/as.character.Exception.Rd 5a9ea3b1e21e7ba99b5a520be238c1dd *man/as.character.Interface.Rd b7bcf3ceb4419d6058e08f37899242f3 *man/as.character.Object.Rd 2e907a5d0ba7c0fe22717158c892f355 *man/as.character.Package.Rd fce03677219580b92f0f026c5d8dac08 *man/as.character.RccViolationException.Rd 3541b5a81b14fd75ef7a7b40f7286c93 *man/as.character.RdocException.Rd 9e55b4dafa5f86945a30b85e88941139 *man/attach.BasicObject.Rd 0efcacaf2f405347ea3ebbc370bfa238 *man/attach.Object.Rd 75e3f59ac1c86203031a83eea741471b *man/attachLocally.Object.Rd 14d3e71b6831f7403b79c6fe9acb05ef *man/charToInt.Rd 300a03b7658fc53ba0b623cc891b9be9 *man/check.Rdoc.Rd 9602e572090304e1c792a650fbbc403a *man/clearCache.Object.Rd dd0ac1bafc2814963d2c8db46933bac9 *man/clearLookupCache.Object.Rd b247a45c7705380a39c61cb42cb56dae *man/clone.Object.Rd 7eb599b4baeabaab3a4a3573a577044d *man/compile.Rdoc.Rd 4cd903de2e389537348ccb00e24b98b6 *man/compileRdoc.Rd c2b14a5e74b1b68816e41bb7a89bd773 *man/createManPath.Rdoc.Rd c3709819b08e47c26f7c0d3093582412 *man/createName.Rdoc.Rd 66bcb297a123729a188a244467e7a492 *man/declaration.Rdoc.Rd b5141cdc18be9dc2a933761144c6f1f5 *man/detach.BasicObject.Rd 1d877d92837f384d97195a23c1777b0c *man/detach.Object.Rd 6faaf3774a757e73b37768a2c07379ef *man/dimension.Rd 43aec1048190143e37aaf9b0b82be424 *man/equals.BasicObject.Rd d3bf66a71639218e4253ac2a10c01588 *man/equals.Object.Rd 483e45de46dd0d315e45385894dc818e *man/equals.Rd e75f20556be6d55adc1d9ff87aa6bdd8 *man/escapeRdFilename.Rdoc.Rd d4f783d76796ad04bb8a2fd599d72571 *man/extend.BasicObject.Rd 14ce09fe538ab686e42e1713c6c07326 *man/extend.Interface.Rd 57fef8e17eaa13b5117be9a9ac37c1e8 *man/extend.Object.Rd 8f185cd3e8e39ace3c26ea2ed43247b1 *man/extend.Rd 290c15c4a61a1047a80b15fca0b88c5f *man/finalize.Object.Rd 889ae86e79300ef0fcb6c63394371380 *man/forName.Class.Rd 1749c45a51469ea05edad884e591dfcd *man/getAuthor.Package.Rd 16d9d447902f118f03921a6fcb49848c *man/getBundle.Package.Rd 4d70020e6d85eea6e58de4f73fce899c *man/getBundlePackages.Package.Rd 7810a61a4a2ed382b157705b2bdd259c *man/getCalls.Exception.Rd 390896c0e3ff341e0c0f6f6c6507d9c0 *man/getChangeLog.Package.Rd 708e6815a2d1840edea4a584093bfe18 *man/getClassS4Usage.Rdoc.Rd 367974a09a07b8e96d19c4a9b2ec32b4 *man/getClasses.Package.Rd 09d653e5fb13cd25af5933ccad5b9f76 *man/getConstructorS3.Rd 5233b79fe290a3e52c93dfc69b25a4bd *man/getContents.Package.Rd 3c6a9636df6727c1a9bb431c8ebe99df *man/getContribUrl.Package.Rd d78f6cbdeacca57093d257901a136a25 *man/getDataPath.Package.Rd 1165407e4d6e8d565f71b08b3fd687bb *man/getDate.Package.Rd 8cf0231b753a46d021f1494ded95b004 *man/getDescription.Package.Rd 276e36dcb27f1a2f310b3e945805e77e *man/getDescriptionFile.Package.Rd d3f7d390d942ec20fe90688bc9a7d503 *man/getDetails.Class.Rd aec5edbb1a03b1bd80e5edc91bd1d858 *man/getDevelUrl.Package.Rd 0a05580a58ddd84e09e4a841ff236199 *man/getDocPath.Package.Rd 4980a8c1e9c81a6a0662ae7c1cfb04df *man/getEnvironment.Object.Rd 0c6085ef5a8f862e2db608780f3d027a *man/getEnvironment.Package.Rd 1158aeeb43ab187e02a4781bb0fb54df *man/getExamplePath.Package.Rd fa5f3aae43b975a90ea82a19f42d56ed *man/getFieldModifiers.Object.Rd e3909d201f92dbb931a108afedffe4e4 *man/getFields.BasicObject.Rd e897f187d08fbb893af0b04dcd7b26f4 *man/getFields.Class.Rd b5c4f9a3f0795395264591b1e8df7dd5 *man/getFields.Interface.Rd 67c0509bc67062c08bf01c9a1733b8ca *man/getFields.Object.Rd 0c554581de0046b1e6abeacb025e0694 *man/getHowToCite.Package.Rd a3d3a839ddc51d92dc910c002bf15d43 *man/getInstantiationTime.BasicObject.Rd 30acd8bcf106136d04297f41de02ec08 *man/getInstantiationTime.Object.Rd a3cd00d41122ec37d9b1350adc723b01 *man/getInternalAddress.Object.Rd d7b56ccd4010eafa54154827b6a8bd5e *man/getKeywords.Rdoc.Rd 6b84a7ae5135711ad22c403ac2b5eff3 *man/getKnownSubclasses.Class.Rd e40816a4793ac2e46674882437227159 *man/getKnownSubclasses.classRepresentation.Rd c976acc73c1a4ed32e366b36af4b50d3 *man/getLastException.Exception.Rd 35879aa6c09ec008c26536331096b4a4 *man/getLicense.Package.Rd 1142ad65dd9e0cd674501faee4e76b67 *man/getMaintainer.Package.Rd 7fc05ad512ac8efebe03df33209864e2 *man/getManPath.Rdoc.Rd df2eb30241aea986e2e890919888b781 *man/getMessage.Exception.Rd b1d13c7b06c5c56ef6c36128c23709da *man/getMessage.InternalErrorException.Rd 3aec6602206f1d959b8dae1ac9575a24 *man/getMethods.Class.Rd feaa11e74ea1fe59c6c7570db47b52e8 *man/getName.Class.Rd 57b03bab837e08aa59ddbb4147fb1d72 *man/getName.Package.Rd c4150476fb649019a5bc485bbb5be059 *man/getName.environment.Rd 2286c4b9ae5f8a75c3bf897e94aedbaf *man/getNameFormat.Rdoc.Rd b26db8431a42f48bb1c6650c8de8ed3f *man/getPackage.Class.Rd 259b162127cc67b8a396a9adef3813cc *man/getPackage.InternalErrorException.Rd 40e4c0bb372498dfddb8f9f93e722b98 *man/getPackageNameOf.Rdoc.Rd cc7fbf6d2f01271d3f28f67079c59145 *man/getPath.Package.Rd 3570722216042431936a0103eeac4bfd *man/getPosition.Package.Rd 6b886fe4aa46ae00498cbbe282ffea34 *man/getRccUrl.RccViolationException.Rd a492acc6766b63e4decdf860d534f621 *man/getRdDeclaration.Class.Rd 3e79fa4abebf702cba1402ee681601ee *man/getRdDeclaration.classRepresentation.Rd dca312a51b46e57312c6ee66d4963f17 *man/getRdHierarchy.Class.Rd 4a8221276a3f8e34c0def7ae1d47c43f *man/getRdHierarchy.classRepresentation.Rd c49b100ae51c1bfd1e6058128ca71253 *man/getRdMethods.Class.Rd c895362780071f93961ffe17a66d777e *man/getRdMethods.classRepresentation.Rd ff9d8a2007a07fbb19d1b8cb3fa85e74 *man/getRdTitle.Rdoc.Rd c8083042384ebbd3b8c9a0f0a61da37a *man/getSource.RdocException.Rd f690e87faad36591bd1e18ef97d2d747 *man/getStackTrace.Exception.Rd 29f8a5ef04f38d61e09cfbdb096bc4e5 *man/getStackTraceString.Exception.Rd fc6ebe7910f61ab00261fe1610e7e204 *man/getStaticInstance.Class.Rd 15c76743165d81af9f3fd6bd88ad4410 *man/getStaticInstance.Object.Rd 20944717d9b2e5f7ebaad4ba70788f8a *man/getSuperclasses.Class.Rd cb604510292330dc2f269f235d35ddcb *man/getSuperclasses.classRepresentation.Rd 8179934a07e1cf2cd8427616a3bca4c9 *man/getTitle.Package.Rd a0818351a7a9c01a355d5f162ef0ac36 *man/getUrl.Package.Rd c31066275243a6a670448d885ca74e02 *man/getUsage.Rdoc.Rd 530be65fce5fb7d735afe9b285c0eff9 *man/getVersion.Package.Rd e6fa5c902f54603bce36f56571488179 *man/getWhen.Exception.Rd be9ff6d7bc02c93d8b01191406c24aa4 *man/hasField.BasicObject.Rd 01da01107c8b331cde76fdda9afa2b8d *man/hasField.Object.Rd fce21c7e3a0ffc4c2131f9baa2c328c7 *man/hashCode.BasicObject.Rd 91b51d77e4dc1292af617374187eca2b *man/hashCode.Object.Rd d7cc8d2005e81869597141bda0eb1653 *man/hashCode.Rd 77677cdee77b5f236042d8799d3f86ac *man/hierarchy.Rdoc.Rd 55099b79a40ba5f6a0cf1ad6fbdf1698 *man/intToChar.Rd f02ced2a5c71ffebebfdf69fa79b3d63 *man/isAbstract.Class.Rd 678d772de261b3f9c2c13e01fb11124e *man/isBeingCreated.Class.Rd a3c522084d8e5c8813b1762a74d2ee57 *man/isDeprecated.Class.Rd 06fe451b9c864d88361a56f871316795 *man/isKeyword.Rdoc.Rd feb192e19fb098fc35fc2870b1ff6e25 *man/isLoaded.Package.Rd ad3136d26208f867571cf49b529c42a3 *man/isOlderThan.Package.Rd eac324d09b15e47c75a8913f1f9c290d *man/isPrivate.Class.Rd 54fd4bc64092fdd525b4ec2e3006f559 *man/isProtected.Class.Rd 56b7f23a91292abe5deb489f92e01b25 *man/isPublic.Class.Rd 23816fe75c12a34339480ba7d2c35733 *man/isReferable.BasicObject.Rd 1a976205897dad0a1aeec0af1cd803b7 *man/isReferable.Object.Rd 1ca7ea2a162b650ea71aec1a0a371f54 *man/isStatic.Class.Rd 359f4c4f2623b5ed66b8854c361ac214 *man/isVisible.Rdoc.Rd 218e3fcfb2720eb4bd14cf1e59216d8c *man/ll.Object.Rd 8e973d973371138ced6f88e1ae5d6065 *man/ll.Package.Rd fffa65d12081d3e9018ace2d2541a556 *man/ll.Rd a4a7dffb88d8d2156ed94cdb7320ddca *man/load.Object.Rd e567d65f961b590bbbbcdbd9a64f3983 *man/load.Package.Rd 617f33a50d87fed3bb40b8a0d5f22ba1 *man/methodsInheritedFrom.Rdoc.Rd 41e25a27cf652e3e458ff96b7a75ee75 *man/newInstance.BasicObject.Rd b79f707fee846503fa18eaa1b27e498f *man/newInstance.Class.Rd 6efda2e014f303f0d01fc233287d5743 *man/newInstance.Object.Rd 38532629ff97e52b4c79dc779b565ff9 *man/novirtual.Object.Rd 149bd3fd88ad5c9d92f03a59aedc63e3 *man/objectSize.BasicObject.Rd 6b4039ee72992d32994f17eeb77702eb *man/objectSize.Object.Rd 9267cc66c0d8b4958231766da0682a17 *man/objectSize.Rd cf93f61f80fa5c3e9a861549f378b6bb *man/objectSize.environment.Rd 49b29a7a021a65282ec718652e8de298 *man/print.BasicObject.Rd 09694ed3273406d399351e383760244b *man/print.Class.Rd 9e2a44a0f32747800d7db9fcf80c4f7c *man/print.Exception.Rd b54ea27602b0e6f077a8f6b28132d415 *man/print.Interface.Rd 26a32ca1a00af1412ce54686d78d056c *man/print.Object.Rd 36a7bdadf325e5674960f2aac5300531 *man/printStackTrace.Exception.Rd cee1fa2b48ea3f32132ba2245c6cb83c *man/save.Object.Rd 61bab55689f964e286d039225de4e174 *man/setConstructorS3.Rd fed641fb7d7e3502aee7e6828e294929 *man/setManPath.Rdoc.Rd d6050b2f3c1e7948c5eb84f5376d810e *man/setNameFormat.Rdoc.Rd 45e93a1b664e659ab73832217b061955 *man/showChangeLog.Package.Rd 3f7a21268d70a351943fce8ad01e8954 *man/showContents.Package.Rd 14c38f27651151e9dc36b0392a527304 *man/showDescriptionFile.Package.Rd 6e9b3b70f51896a148875bc525fb6eec *man/showHowToCite.Package.Rd 7c715a35da3815ffb921bf1ea1422d92 *man/startupMessage.Package.Rd 9c854e863e225e79413e332f501160d2 *man/staticCode.Object.Rd 55c32a75d7bef5d8ffe357a7f7bf0631 *man/throw.Exception.Rd af7fff78e313c2f34ef2ecca5adf6445 *man/throw.Rd b2069a677b1114406e7db4ea2e5dffc2 *man/throw.error.Rd a12028bb733485849439f3213fe8e52f *man/trim.Rd a9ecd083d17f289f95e3d1910b168df4 *man/typeOfClass.Rd a1f142be9c315739b230ec02c8e67706 *man/unload.Package.Rd a1d13ed5dd1fb6509995148daa54a192 *man/uses.Interface.Rd 7e20e770f311cd069c3c45e0dc40434b *tests/ASCII.R b18311f0f4c8fcf30747aa0105b39cda *tests/BasicObject.R 9e89dd7f03f7610820612b132711b5eb *tests/Class.R 6c95cfe7cc9617d5b99e1d6755f5a9a6 *tests/Exception.R 3c558a5db3f78af8caa30770f1db87bf *tests/Interface.R 0c9385711caf77f4681e6084c273638f *tests/InternalErrorException.reportBug.R 6b9295de71442e5a8d2e0c5907d0711a *tests/Object.R bb885403cb282ce2230ce2a51b59b241 *tests/Object.finalize,noattach.R 13e77cd617b44cf1e8af480c70001bc4 *tests/Object.finalize,onoff.R 66b5b1551498ad20595f3ad1a31fe371 *tests/Object.finalize.R 4d9b542eaa8e22dc13b8815c6ee364d3 *tests/Package.R 19a0210b7f75cc6addc00399431cca98 *tests/Package.unload.R 260cd18edfe192c9cc4e739eabf30985 *tests/StaticMethodsAndNamespaces.R d0bb42cb3b0727f37bc061c0e84720ec *tests/abort.R a6d6dafc1837ebf25a20d5da12a1fffe *tests/attachLocally.Object.R c14c98dd367a26bce140563350ff4a49 *tests/equals.R 2b5676d1b5a917158bfea6cca92da84a *tests/extend.default.R 3d331609f3d79fa4cf8840bcaf6655c8 *tests/getConstructorS3.R 65097e1dc4a8e7c39f4fc32e89e84aa2 *tests/hashCode.R 8d7daba42e53f552214734fad71f2df0 *tests/isBeingCreated.Class.R 6991fe671d618138be9d06745c866371 *tests/ll.R 2605f974d27c6b7b7cc16919cf4504b8 *tests/local.R 78f51ad0a149226925f8ed36bb1c6bbf *tests/objectSize.R ecc3a6634d974a69c2cc0ac52d25a180 *tests/throw.R 5e1580623cace2ce9f981b6aa2f32386 *tests/trim.R b62c10fecaa397495f9c15b7941cebea *tests/typeOfClass.R ad7cf11e55c47c52e1ae47c3ea552c9a *tests/zzz.Object.finalize,reentrant.R R.oo/inst/0000755000176200001440000000000013701660026012045 5ustar liggesusersR.oo/inst/misc/0000755000176200001440000000000013327450457013011 5ustar liggesusersR.oo/inst/misc/Exception.R0000644000176200001440000002357213327450457015103 0ustar liggesusers###########################################################################/** # @RdocClass Exception # # \title{The Exception class to be thrown and caught} # # \description{ # @classhierarchy # # Creates an Exception that can be thrown and caught. The \code{Exception} # class is the root class of all other \code{Exception} classes. # } # # @synopsis # # \arguments{ # \item{...}{One or several strings, which will be concatenated and contain # informative message about the exception.} # \item{sep}{The string to used for concatenating several strings.} # \item{collapse}{The string to used collapse vectors together.} # } # # \section{Fields and Methods}{ # @allmethods # } # # @examples "Exception.Rex" # # @author # # \seealso{ # See also @see "base::tryCatch" (and @see "base::try"). # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setConstructorS3("Exception", function(..., sep="", collapse=", ") { calls <- sys.calls(); last.dump <- sys.frames(); names(last.dump) <- limitedLabels(calls); # last.dump <- last.dump[-length(last.dump)]; attr(last.dump, "error.message") <- geterrmessage(); class(last.dump) <- "dump.frames"; stackTrace <- NULL; if (length(last.dump) > 0) { calls <- names(last.dump); matchStr <- "Exception("; offset <- which(substr(calls, 1, nchar(matchStr)) == matchStr); if (length(offset) == 0 || offset == 1) stackTrace <- list(""=NA) else stackTrace <- last.dump[1:(offset-1)]; } # The new class is Exception, but for convenience it should also # derive from 'try-error', which is used by try() etc. extend(Object(), c("Exception", "simpleError", "error", "condition", "try-error"), .msg = paste(..., sep=sep, collapse=collapse), .when = Sys.time(), .stackTrace = stackTrace ) }) ###########################################################################/** # @RdocMethod as.character # # \title{Gets a character string representing of the Exception} # # @synopsis # # \description{ # @get "title". # By default the format is: "[{POSIX date string}] {class name}: {msg}". # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("as.character", "Exception", function(this) { paste("[", getWhen(this), "] ", class(this)[1], ": ", getMessage(this), sep=""); }) ###########################################################################/** # @RdocMethod print # # \title{Prints the Exception} # # @synopsis # # \description{ # @get "title". By default the \code{as.character()} representation plus # the stack trace is printed. # } # # \value{Returns nothing.} # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seemethod "as.character". # @seemethod "getStackTrace". # @seemethod "printStackTrace". # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("print", "Exception", function(this) { cat(getStackTraceString(this)); }) ###########################################################################/** # @RdocMethod getWhen # # \title{Gets the time when the Exception was created} # # @synopsis # # \description{ # Gets the time, as a POSIX object, when the Exception was created. # } # # \value{ # Returns a POSIX time object. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getWhen", "Exception", function(this) { this$.when; }) ###########################################################################/** # @RdocMethod getMessage # # @title "Gets the message of the Exception" # # @synopsis # # \description{ # @get "title". # } # # \value{ # Returns a @character string. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getMessage", "Exception", function(this) { this$.msg; }) ###########################################################################/** # @RdocMethod throw # # \title{Throws an Exception that can be caught} # # @synopsis # # \description{ # Throws an Exception that can be caught by \code{tryCatch()}. # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # @author # # \seealso{ # @seeclass # See also @see "base::tryCatch". # } # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("throw", "Exception", function(this) { Exception$.lastException <- this; message <- getStackTraceString(this); # message <- as.character(this); if (R.Version()$major <= 1 && R.Version()$minor < 8.0) { .Internal(stop(as.logical(FALSE), message)); } else { signalCondition(this); .Internal(.dfltStop(paste("\n", getStackTraceString(this), sep=""), getCall(this))); } # if (R.Version()$major <= 1 && R.Version()$minor < 8.0) }) ###########################################################################/** # @RdocMethod getLastException # # \title{Static method to get the last Exception thrown} # # @usage # # \description{ # Static method to get the last Exception instanciated. # } # # \value{ # Returns an @see "Exception" object. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seeclass # See also @see "base::tryCatch". # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getLastException", "Exception", function(this) { Exception$.lastException; }, static=TRUE); ###########################################################################/** # @RdocMethod getStackTrace # @aliasmethod getCall # # \title{Gets the stack trace saved when the exception was created} # # @synopsis # # \description{ # @get "title". # } # # \value{ # Returns a @list containing the stack trace. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seemethod "printStackTrace". # @see "base::dump.frames". # @see "base::tryCatch". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getStackTrace", "Exception", function(this) { this$.stackTrace; }) setMethodS3("getCall", "Exception", function(this) { getStackTrace(this); }) ###########################################################################/** # @RdocMethod getStackTraceString # # \title{Gets the stack trace as a string} # # @synopsis # # \description{ # @get "title". # } # # \value{ # Returns a @character string. # } # # \seealso{ # @seemethod "getStackTrace". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("getStackTraceString", "Exception", function(this) { calls <- names(this$.stackTrace); len <- length(calls); width <- floor(log(len, base=10))+1; s <- paste(this, "\n", sep=""); for (k in len:1) s <- paste(sep="", s, " at ", calls[k], "\n"); s; }, private=TRUE) ###########################################################################/** # @RdocMethod printStackTrace # # \title{Prints the stack trace saved when the exception was created} # # @synopsis # # \description{ # @get "title". # } # # \value{ # Returns nothing. # } # # \examples{\dontrun{For a complete example see help(Exception).}} # # \seealso{ # @seemethod "getStackTrace". # @see "base::tryCatch". # @seeclass # } # # @author # # \keyword{programming} # \keyword{methods} # \keyword{error} #*/########################################################################### setMethodS3("printStackTrace", "Exception", function(this) { cat(getStackTraceString(this)); }) ############################################################################ # HISTORY: # 2005-02-10 # o Moved showAndWait() from Exception to simpleError. # 2004-10-18 # o Added more Rdoc comments. # 2004-03-02 # o The Exception class now inherits from the simpleError, error and # condition classes. # o The throw() method of Exception does now make use of the new (R v1.8.0) # signalCondition() method. # 2003-12-16 # o Now throw() includes the complete stacktrace when generating an internal # error signal. # 2003-04-13 # o Wrote Rdoc comments that were missing and updated some others. # 2003-03-23 # o Added showAndAsk(), which will, if tcltk is installed, display a dialog # box with the error message. If tcltk is not installed, The message will # be printed on the command line and a prompt requesting the user to press # enter will be shown. showAndAsk() will give an error if run in a non- # interactive mode. # 2003-01-19 # o Added stacktrace information to *each* Exception object. This is created # when the object is created. # 2003-01-18 # o Replaced all occurences of getClass() with data.class(). Will change # the use of getClass() in the future to return a Class object. # 2002-10-17 # o Made getLastException() a static method of Exception. # o Created from previous ideas in R.oo. ############################################################################ R.oo/inst/misc/ASCII.R0000644000176200001440000001432613327450457013772 0ustar liggesusers#########################################################################/** # @RdocObject ASCII # # @alias ASCII.BEL # @alias ASCII.BS # @alias ASCII.HT # @alias ASCII.LF # @alias ASCII.FF # @alias ASCII.CR # @alias ASCII.SO # @alias ASCII.SI # @alias ASCII.DC1 # @alias ASCII.DC3 # @alias ASCII.ESC # # @title "8-bit ASCII table" # # \description{ # ASCII is the 8-bit ASCII table with ASCII characters from 0-255. # } # # \examples{ # ch <- ASCII[65+1]; # ch == "A" # } # # @author # # \seealso{ # @see charToInt # @see intToChar # } # # @keyword character # # @keyword internal #*/######################################################################### ASCII <- c( "\000","\001","\002","\003","\004","\005","\006","\007", # 000-007 "\010","\011","\012","\013","\014","\015","\016","\017", # 010-017 "\020","\021","\022","\023","\024","\025","\026","\027", # 020-027 "\030","\031","\032","\033","\034","\035","\036","\037", # 030-037 "\040","\041","\042","\043","\044","\045","\046","\047", # 040-047 "\050","\051","\052","\053","\054","\055","\056","\057", # 050-057 "\060","\061","\062","\063","\064","\065","\066","\067", # 060-067 "\070","\071","\072","\073","\074","\075","\076","\077", # 070-077 "\100","\101","\102","\103","\104","\105","\106","\107", # 100-107 "\110","\111","\112","\113","\114","\115","\116","\117", # 110-117 "\120","\121","\122","\123","\124","\125","\126","\127", # 120-127 "\130","\131","\132","\133","\134","\135","\136","\137", # 130-137 "\140","\141","\142","\143","\144","\145","\146","\147", # 140-147 "\150","\151","\152","\153","\154","\155","\156","\157", # 150-157 "\160","\161","\162","\163","\164","\165","\166","\167", # 160-167 "\170","\171","\172","\173","\174","\175","\176","\177", # 170-177 "\200","\201","\202","\203","\204","\205","\206","\207", # 200-207 "\210","\211","\212","\213","\214","\215","\216","\217", # 210-217 "\220","\221","\222","\223","\224","\225","\226","\227", # 220-227 "\230","\231","\232","\233","\234","\235","\236","\237", # 230-237 "\240","\241","\242","\243","\244","\245","\246","\247", # 240-247 "\250","\251","\252","\253","\254","\255","\256","\257", # 250-257 "\260","\261","\262","\263","\264","\265","\266","\267", # 260-267 "\270","\271","\272","\273","\274","\275","\276","\277", # 270-277 "\300","\301","\302","\303","\304","\305","\306","\307", # 300-307 "\310","\311","\312","\313","\314","\315","\316","\317", # 310-317 "\320","\321","\322","\323","\324","\325","\326","\327", # 320-327 "\330","\331","\332","\333","\334","\335","\336","\337", # 330-337 "\340","\341","\342","\343","\344","\345","\346","\347", # 340-347 "\350","\351","\352","\353","\354","\355","\356","\357", # 350-357 "\360","\361","\362","\363","\364","\365","\366","\367", # 360-367 "\370","\371","\372","\373","\374","\375","\376","\377" # 370-377 ); # Alternatively one can do like this. Idea by Peter Dalgaard, # Dept. of Biostatistics, University of Copenhagen, Denmark. # ASCII <- c("\000", sapply(1:255, function(i) parse(text=paste("\"\\", # structure(i,class="octmode"), "\"", sep=""))[[1]]) ); # Some special ASCII characters. ASCII.BEL <- "\007"; ASCII.BS <- "\010"; ASCII.HT <- "\011"; ASCII.LF <- "\012"; ASCII.FF <- "\014"; ASCII.CR <- "\015"; ASCII.SO <- "\016"; ASCII.SI <- "\017"; ASCII.DC1 <- "\021"; ASCII.DC3 <- "\023"; ASCII.ESC <- "\033"; #########################################################################/** # @RdocDefault charToInt # # @title "Converts a vector of integers into a vector of ASCII characters" # # \description{ # Converts a @vector of ASCII @characters to a equal length vector of ASCII # @integers. # } # # @synopsis # # \arguments{ # \item{ch}{A @character @vector.} # \item{...}{Not used.} # } # # \value{ # Returns an ASCII @character @vector. # } # # @author # # \examples{ # i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 # ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" # } # # \seealso{ # @see intToChar # } # # @keyword character #*/######################################################################### setMethodS3("charToInt", "default", function(ch, ...) { match(ch, ASCII) - 1; }) #########################################################################/** # @RdocDefault intToChar # # @title "Converts a vector of ASCII characters into a vector of integers" # # \description{ # Converts a vector of ASCII integers to a equal length vector of ASCII # characters. To make sure that all values in the input vector are in # the range [0,255], the input vector is taken modulo 256. # } # # @synopsis # # \arguments{ # \item{i}{An @integer @vector.} # \item{...}{Not used.} # } # # \value{ # Returns a ASCII @integer @vector. # } # # @author # # \examples{ # i <- charToInt(unlist(strsplit("Hello world!", split=NULL))) # # Gives: 72 101 108 108 111 32 119 111 114 108 100 33 # ch <- intToChar(c(72,101,108,108,111,32,119,111,114,108,100,33)) # # Gives: "H" "e" "l" "l" "o" " " "w" "o" "r" "l" "d" "!" # } # # \seealso{ # @see charToInt # } # # @keyword character #*/######################################################################### setMethodS3("intToChar", "default", function(i, ...) { ASCII[i %% 256 + 1]; }) ############################################################################ # HISTORY: # 2005-02-15 # o Added arguments '...' in order to match any generic functions. # 2002-10-20 # o Added keywords to the Rdoc comments. # 2002-05-26 # * Changed the \keyword{}'s to contain valid keyword as in KEYWORDS.db. # 2002-02-04 # * Added alternative idea of creating the ASCII table. # 2002-01-29 # * Rewritten to make use of setMethodS3. # 2001-08-06 # * Moved ASCII back to R.oo from R.base. It is needed by the String class. # By moving it back R.oo is stand-alone again. # 2001-07-28 # * Also defined up the ASCII.BEL constants etc. # * Moved the ASCII stuff from R.oo to R.base. # 2001-07-13 # * Made all methods using UseMethod. # 2001-06-07 # * Added [R] documents to ASCII, charToInt and intToChar. # 2001-04-02 # * Created! ############################################################################ R.oo/inst/doc/0000755000176200001440000000000013701660026012612 5ustar liggesusersR.oo/inst/doc/Bengtsson.pdf0000644000176200001440000065703213701657721015274 0ustar liggesusers%PDF-1.5 % 164 0 obj<> endobj 180 0 obj<<7cf91b959c184f4bba70f1c6d9bfafb6>]/Length 91/Filter/FlateDecode/DecodeParms<>/W[1 2 1]/Type/XRef/Prev 220285/Info 163 0 R/Index[164 126]>>stream xbbd``b`Y$!@:$8 A a HpO6 HJ01W L @@\3F T N endstream endobj 167 0 obj<>stream xb```? ,@2AX,.9\@PG<Ғb|3xuyxbx~N}yFn@} "f>M #^؝Q8EoF5+Yk kty&Kmf1)g7glzF$f.ť5St}7 ^tӡK]=Fo:JyZV8Z0;eQ[(f4F4 ` h"T@@S RJ@1F0f !T.B 10L@,`Tdc`crQc$wAk6ôӶG[6gD&:@B3ï @ډSg`cou endstream endobj 165 0 obj<>/Type/Catalog/PageMode/UseOutlines/OpenAction 166 0 R/Names 181 0 R/ViewerPreferences<<>>/Metadata 67 0 R/PTEX.Fullbanner(This is pdfTeX, Version 3.14159-1.10b)>> endobj 166 0 obj<> endobj 168 0 obj<>/ProcSet[/PDF/Text]>>>> endobj 169 0 obj<>stream xYr8I3OVSóرg\ɌCd޼}#8ɒI$ j?b<2pcjie)%TL;I"0g:A>Acq GӤul Bdр`p% %xF?F{X䅈ILTE [H.C%ڐFuIdcìѸA$<)BsČ5aV2pV\`ʒ}&*9FrR8/H:n 2Ҵ>ٌdjʇ{M˪&!1W&2EX^zZ2Q:˿/`tJ቙ 0`gNB 9'y.qFoK>>6+V6'8l#bSTZTzl`A, c1[l&X- r4a]BJd =3޲H&qm?ڀlGTS +tz{*[.[[m_wDc7;j0@ *,7,. z&aL[n ?: G{4b[ͻFywzp"  ah |%g{FNl=Z!z4! ܦS8( 4aceMzsÈmq-6-;Q$to7C4겿Fv6X7Xi"붓=E,竴wr> S?b1@Dv)*1Fm>Bq BVf6NZs0dTDm-tTsz%Ը+;xY'vGӔblðaX%gt7M]>ٳbI},zx4m>wnqQ+ěnWGo.ɨ{ 4ݽ]]w+Կ;=rsڻ/G5uEX!vehc( o]Pi>iܮ%n6Zڌe&qÑKa یIJM3#ч!nWx`}N#m[H9n &GG._tF,Qswȉwщv-e?16czp|2${nNrسIn|ᚽ" endstream endobj 170 0 obj<>stream xe\[߶!wwwnťHq+nEk8›=㽟&_5֘sΕJYMBэ )j8 v  $ [8  7 @ bce`c' `bcfP0qp039XyD Ppp0gG6fnS +Gd-|+D d@͝(N, &oH&Wu{prY-\gſD02n&6f"VC66^6nfK{W-mQdEeG7uo/aHw\lz@v IL!xx&..&(!/`hns;:An@ZtrAg9!Z6y`k ?!^NB ?psak2prwG +)a_fp{Ip8% IAnCd?LH?їCu?CTCZ 5U4BAf1?A3@Ȁ!dN?B B_qk! !Nv!D/X9A/X9+_p !D/h !OWB9&>N^l- 'j88[ȈCNaD]\, liyYXxY8 l(gHRlX m_1)̼A65OeF"9)k(ǧT*GL}zӾts=US69zV( q jPϣu07O[2^#2=*Vsuw'VZ lhm$R'O^wR#XM{OI8AU1E : Ϧzy =%kV7>𗆥2G%$bhY>teTPI[%ƺwӥ+drRmQ>o.b$th@DgL\r+[)\1m%,i#dΧECGPx˒5.%cZj$R!O8Y+_: ^]F iot`[z&Z1@#[jfE@ZEtS|>iGjmrvE $9cٍ֥qHipg7<ԋ[F:&)r)}Ą>ӵ ]l{ v kRW+q1F^z9ax_b^ghsY }?|.mm@yѮf1x_%wg5 'H)}t~YzS'!\0ay 5(ϘŜCՊ9)oߘ^D{$3oWyE<\1\!7^H! 'Cj+ *M\-Ⱦo>â`6&a݊RS+tQ'JBeRuAa7GqmWn=9/|cN ӑN-|jb2QpoXFи[UV{/ 3 Q2aD3ad,S+Aɤ2`y~A']M+H{Ic>\~}D:f1lV'Jn:|ҘغQ]l6 EIX?Unn|<xeੰݕ:*%嫠z!b!NX>χCǥpz؊<3S!yg(\jB^pEO]M(WX{jbWG4] W_r. -yE;aP gZˏc$:(_PmLW[A?E7Ɓ8щo?AѫnLެ?g9tmb/ NK}+.YsL_sBpwl` gQ.aȠ*r}s(:['o>=M%sݵ`$[+L)6c5*gtJ,{zS65vDI7fQ{3CXM}èlp͠w'H C?QlU^#()V)(Fܨl'A+R/ָRo6^S=v_ [=*)C ܘrIt.6c.4sp1JU@yjCrPBhrCQ <چḤ+2J Uద{uR6?6e6CpYinkk599+MV?vHhNL`%nOo;c9pdV~W)-b߯,j]~j [Yq0,\$-o1̈́rjkRdڔR^RLdI<[> o*I4Σ0@춴(arf `YwGύE"3ͦ#sV+f2JϼWI.[»cUmLIr6]"V4:]'7N6h'|r7`U e觪U~"mVAQ//=Uqen^\*cv>eo3ݽ?ǰs"ڶ}]H3$ݷ*Ok߻ick e&ķ))nAr#|zeǻݗ}O*z2XQzSRZD\ze,3R]җ~"Xb Hgء7JA >R=8*"Qǔ,GɭDielrBՒ9{p,l01wEIKO9 ])]1cح{Z*0m.Ȋs|XPuj Y{ 7pD$!3I8u;V=F uu2c>\E)1XZF%}S%nmj\Pŏ~#b6{ Kcq.S!Yv~Sð'Qґ;uvo,>еp>3 9V¢2wԉ#8_Ѩ<ݪWKs!+m"~u!8ǫO%o b.efDQN~!Ђތyɳ0{l?>c|?W7kF6/)v#rtnO%L_BWie.Dһ̅kD5`ȿUK04V*,d9z)+lYq6Z@% qĮl$Hn! %Jt~Ku0=i@?C}@EH|p K1F9wQזDE>awf~M8rϰy^>;aGz͆8&r  y58hȿ&.= fp\:,7=P9?K3Кa BT#eQ~YE2=gAP '?)5nuj#aQMb}1厙 w#Z_kE$|5cMKgj5 ⿲il*1n%Otق%{7,"0[`'ߠh{,C֦=4 mZh^?]D9ֱ(x K/*#j{vXnUc=BDSz~}bqr%'7$q19sjqX}ݾ4}~e=l!HCҫ@ٸp %^'DqAs\?L0"x`PCJhNj@FhT}g(^qɒ,@qb MOO)P,?x "|m][RSۣ:5g|O Ň]в4^w:6x;v4V2C䜆sLgĈهбUNUY{16HkQVľ;Z& Tק\3 Jpm1ؽKC!Q9%_o0oSjUH<%ծ?B34%w٫:?U0uN3Ƥ1>* {߹Y a9Pe3d>S<. zZ]4s<玣/??t`xq!'-=O"m6*(4GҏIky (Ɋ}u/rYNҮ錞KZL/x8Q_Hc`6!:k-nD\BM|HQ|ҥhG-MPŲ3fT,aؠ/F pMu^}̦׶'O%;aA:ͯ*KIE)~ |xߗ02PyoFGY<}77듦m)/ g:O.L*yOMeǃ'NP.QLBOҲqi$X[*ɑ{;r4m*.d/`Y[uĆ*zDZfҫQ08~VޫN~-=& DoŶW\A+"a7ߛe\5IO77>ls.olVF9B[ui;׿ǩ(SI#QDD4SJ[@8~LH_F1amOW/Rd~LlA 5֪[>3zKqJ*7vFޚNp^JR tBTi=Tj%UPہMRlec0Qk&IAr8k ݺ[z[ta-%3 dw%b?uzXP\U4:6Ilv9";Z۠AGׂ:Wk֌ u]ɣus:TMjp+&*_Џ/洎рoJFx(ϯXUUWm2 ls3{u(=#օ;0-Jڷ#fZZѫZXM7 RJwW(4Ǻ:/Yl.<!*m@}} ʠg*~@=Qu8AL ]Y>4mDSmI#kd^Ff z@NRbsvҮ8Rt=C B/1ktBR)[" fl"Z3LQ_~kx*B"i%+ 3}ք-SXM#E*?&jLCaиj =ܰkVȮm,U^׋e6[k82IR[h%`~)6ַm"K}%-A6yfK/ M$QPH$ -D|7ԩfO+PDV=J:@AABïp]8%0,;7<PP"|e]ʁ[űl+x#?vQ"=2IO~h}MZ7h|wdZŭj|fXy 9pp>}8S=lm[@>9\g?p"y::|Bʁ"bwg_X<}#vvkq05OQ|ds {_#ue7yBPsVh ;-«h!B ~+("JL&HȪQ&$3`dB_|Ci '`MK Yp%DK 2{NS1rT)5P>;[v+Vo wgۑR_"qFfjCw~{އ_пKw0vIk>v0|S`UI %&BePeU:>yR4o}ߑ%Ct3蛜0^٬G9gB$w+v?DWˈRڡw}RJٿKYO% ["w_(O00qqsr0qC? endstream endobj 171 0 obj<>stream xUT\ݶp[ X5Hp)!k\`=ާU/sV$J &vF@ ;[gF4 3Bhlag+f ps],\NOsb`0 +';h ?Z8@熙#;o6@;auΘ72)W` Ɖ 8h+!/Ƃc=Ң-\ĔcI{K)x}&/CHPMv*}3ݯ5-.j,xPK7V~۫i&d)r@㭸gvv#t20V66ӹ#sdm؏TSİ]| lt2Ds2?؋zs G.%Kaw3 7)-] nx::m=(י}^/%%u~fx e';}V6tC.i] 9\*~IOGbĝ: !WYCKƄKJf߳ ) Qzg8崤UX͆qҴ|]S7TS"ŐAʳI\zM6Fl]V$N3`/ҍYF,LRlνM2&WK)pQ V9 6|dB=BB4̩k;8$n~$e>pǘgpZNj,Cph7)XPpgRs[m)tlʭ\+W %JZp@t0-/&c\`)dώ+Oy%'k֮+GMptT5>$Uh= y%YOhwG5ߡGxrT+q܊їQ5+bx3^=?{q&2:}59`L<^S LOO`.t飪;! O:Rnz/veSEC?`&`[pKWig 'kӏ/j&`ayVų# u?\ [r[#Τu~wSJ6OԸ{Ǐ ǖiŻЙhwsfL6NpS%/r=Ę $TN1`)Q"!_Ʈ:>& ЗΆtı3(QL&XBidOZ0H2ɣi0(mDJ>TH$eWBԟ:L p)]pXP'y9E!MGe޻AT (@]YSkP,un~d9ダ'yZJdm"% 9M#P/X-^ᑾ^2d7"мuO%՚%5 >0Diӄem#/Vn~;uZ*n_r{wHۧx+]q*KLptKN"o2?׀HK{ 8tl8کI|e?ֻQ-X'pӡ6 7th7v{1r C|Yޫ01 :MusD,ZʥL.3jCxnQD/*ԃnI~WY)YgFuKƼMrCԡC}ph.%*OڷuN-R:O֕>P/+<)IO+Rx6o2.($C( TEQ&7&1o0{]y?3>t5ȫ"yLٙ;b^booW!kr0B)rAي!"-~7E4tLCwWDrrGԂGN"O -C$ !Ҥ3xhEٽV,3Ư tof:Cg,^[Moa=C̘ԾHO#ƔtR{aӴk?:\ ~nZ[mI'Cu:F-KCMp<4k}0<[3Od_G!>) C "7|0LXqwc bOzSR'+vnZ5I΍#?*ISVdiVGg"Q_GtfD|!eFʢ[eS dWj@:.IoOu'2˛f*ރ˱)Lr'>e{P KIq!N)plgdY@$g\o+0{~f N#DT'h9GH.XKWyVds*n? l |j&"ṁ=XLm| JĒ(7`5ıy@2hEhi9/&'빔^PuC2YAk|vREK~s&l,3J@ i3Ks ٯNY:c&vś/,Ti}u Ylˢw|%ͅZ=Gy{çF.  |Mt,=e#To!|*&O{Jyal;3<-V{ $y0_ӃY+M.3Ӡ[fw|Kt}]`0_M '.#_ur`IcFžۑWZ|G8nje{&T/`'';x jv< ɭ׫T|γs3@Fᦟ5_h vbsԷٶQ.üE/푤nVe,6Z|P9x #$wx~@!z#gv}^)ݚ{ZW_@&&C&9=?NAFA̫W:%lw>ѻHZ+bo{ziPE򆚬NqCMJYUm}䐹O`kXf`ݚ5űv iʴ-ns^- |~r8^W7^sZ^*L[k:ã9gzT_ȏ0!mZ^hlp? R o,\^7o\ )턭%&6?߭.[8?Ëmn3Z("`GH' >ra/S}e]kٷs8 i:UYcj2P*Kʌ7(V9W0ZRm//v`6ꄙ=hXo YudMGwK$Oz1X8 -󹎼_t`y7rcH8G'/p>w$ }Wꕍ>/Hp"cK#3>Bgc\e)N5γ\ήVa ةH^>Nس6@*4gyi.hmԗyԃۘn.hQ ,:pג ~j>q*l;Һھ؜VTg-ddCa7M|"uL8*^eOa X/Wߵ1voZG30%>O41Kq<$"2/cn-I{YF\UG2I*d9s%q_Viqۆ?Y$ #yjCͩkTÌ~Ka! wI],Y@yKBG/Qc>kx/LJ.oEz-'1JGsc ۆet2SWSC2:6ĕ jկBIl;5G:Od3U]]nf]pc)S~AvNqz V`p;J.O%vePa8GuʼWKaKГl-f|t7%R 6ʧT{ɎE&eWM"!BJ s62O{TLvz*Oh[nD1 9?49Pt,(E1n#MC煇qI]m:X޶KqFLI\ )vNXYiJ 2$:fsbߵazJ3:r]pߑUF{c @נ Be6ZC LgיT*m#mOs7=dH}SVD*CZ`J%:%>(pchx`XD_2x\F<ә*\EsZ!gw7tw'}j]\Ar 9 $ Zgw#̅[fN##<וFi03^MI"+X-AAl-s9tD=7ˤ殲Ƽ\Gxzx(X{KRpxvgJ'kZ`9\9#+)3Ntb$Dy%N7 '-6Oֈ~E4f!HqkMD(nT!0gFۣdݺm.[]gxx p5JAeMؕz0g waObۄKVDPk{֙AK/a"Ž]ZSNȚq(A{Z[Ufj}}=~yYse5'yǣ)Zъ*0ou{ f3o/1Y M+ӕ!R xdb$۟.~<݁1a@ybVHxWcYecܽ< 4贫lBEdFm- VS 9^U;2J6k1T/vק{&i(w 3TAbnrKNm7kr\(=ʲCN$u3(!B ))k[82UީxM~^$B 54 yai/6GHd0j'EbWNL‹\=!G4FbH,KS| eIig ЗtE ?.By1 `) + U wصw lNZI1Q#|E+ :it\USl8+bmR!ɬRN`aEH'=r6yAKᬰ>mX 3.,Z~RaN - g{Y{H{hosL,{z]η61NnKa\hSm*ӯҿ̷n.uWw9cbo |-QnW*dQIg0LjQ\XQx?Tz1}$pnXlx/BKԷpgU4n]5Lg_&voߗ2.$ϖ]-1U-2"N{lg\}S<{|HqcTANcCsC 7x bd́z<00ɹue'X4MϤ/rZ( ޵7 3Θ0z„qeM#pyFQ9o-0/+6ꁧ! 7$w!=[?8o\FNo#~ 0ܮ3 oIrjWĝoARʧ\B:6[BbNt)huu#I2H Qn "ݼْՔ0jBVQ6Ge1(xm\&kOB?H¦m^5IC |Nw**dM!it+AZ֧M%9,!K 1k)UIowz{{Xc |?ZIup*d,HB_YqPߪ"iQҵGeHʇh~R|ni`ȝc;\MqcOӵ{`:~ t 5' Le}L#~QRpDp[d8b@1O6{/ۏn{y&ߪ-&2&\*n1@en:Nd}Ηs!MM-kO@o簜-,cv6qr.n{Q}[eE\nI:B0/mn%Cx"RU ߇ekCp Y<^xϹǟ\:"}sFT;a۞fUCi޳AUQ)Y{d>uzB( twk0sPtU ˁ[ ZH!9I.qH."!E +Dl.NB%iш`ϭ*ro,CIpX9qcɊ3F2 W).toɄOJ?G}}KI $DYE]PFǘIX^muaN(^BƆXktTOjURt;}]o] >%N>тmʇv[A9BW:΂4_w4Z=|udGb6EHUM{YLfS*<pT|Psr׺VaDriYȝ\"CG6rto# 65!KR`juϗTܬ"**Q_ IaqoZDF V dw th^*>gԣ~8~JR!^$0hiϜ@[i ndHSӜ´>ڃ$# A0*\a`-BaBLKHUIoYī._p! RG~PpAeEWbtЛu3v(x|NkW5t&6ܙۼyVn8,l%Fy9M+j6*~R1yɝ$(lYڃL^cӯPiB_>$־tY@6Zl|zDC o DtDv1vAeitN Ow@il p?I}4pcӁ:x`DklN,'b=!kB{UֆGO ߾r 6'WЛ5Zw']R^Տ dslwIi 餗Fd;5j۶.0> Q*WQX`O01~ ^a<"DPK.av,m@wP*]h|1[Wص`dTM վD ?R0i(X -bC{P#ivxp Yހ9%]֗P\Gzř_ɣpxQD4z@ދ>3~NAJ~Z֡+\8)0#m4/N2c6& T9ÇD;!~Й!L9}4g j*buV:̅4Un@OE⟁.,H m3 _˵o3IP/1fBlTBiZ^|{NvCyQD5cxw|U%2"|,2:6 oi[!q o?c"?^Ŷ]+7CSn|lO`^l=dpDTԱ+. #:>"O9"!E,.iiٟd]"$+XiCȷ3Ɍ9t.kͯ>eL%ƩjWSֺ}cFV^ÌRN0o I?!j՞VveңLԠ:ӒR?Z[D/ :O?'8oQC`Z)63d JP-YEtDŽФ3~TAn] v2$2 ;x0 DkS 4&K.1hT+>Ug}H@̐*J3<~fri,)5hDSA81MЮRmRr(_DrsIvGtLu NBhQ>qB]c7;zȰ_J-}0^+Y -v/ID!nv>vg'+LWϨ55 d 3'>LP7LaMU{:~c 4joTyb>!1c<+!]<1fP; OUܽDŽ(MƯ!O5JAWWWĐ;O]3ߤZgm+>Bk߫7b_K2q2֛8{dOxDžU3&'d&CUb^A-W=Agh.XO|dVV/mee\w;f!錓QԘ"<% JtPִc,sJ5we;a{ W/ ĪKq g 8#SD$Wc0xcnd_="u kR( +؟+2 I'Kl'9t$P{<%T9ʹGg܊"Ŗ|@FukP9|p %lƑQZ6vd{L.F6~~d:B Ni=wwLf#|13ҩ+N&]B ݃8jܭ_[e(Cǰ Ɓ}ˎ\6S>ӿ %Dx#1[=z:WT;6Jk̨έE_ ''F:4E[MBfSwP`"|w >Q-ԏ;|*r 蓪)~]_+"&5ozX&)f*y/ŭZ,+PulΝy4Ъ4@ʜ!;|_}k ?-YdJ<{}L5 1\Zj U Y;"A-0l-#͏o17g9'|%j/cы'P# A8mQW"9pdžzf,}\U Ȕbr{i2%™{ M'A3pii$i|ݲq}x͋U$Az c"pc]ZJx-ae+ec.Ј %^s0tW; uJnϚ\ lzȜgc+z VcjQ5kI3H\ r"`b&5V(1*za!tP&먅)o5뼎07r RꉫFEW"mHbx ٫?)(/X-94;耣\ܴNVʜUU!c{E-mT0OR0s6Vs|}!L''Y$:lt۠O8"q n509XQ, J}tFQKp`soK`T9\nLQ$X#J2aU 1jk_Ӟr6ګ>*-I:! (s_ gMզEH{ҏ\8Xkc &+OKy Xy>~E˛w.㡾=,Y v8ts8$|5{oM,#9zFJܼᤦaQ.6Sx~e _v.)C-A0@țޤ`bU(Ii;3l Iv;qsE(-pڇӼjYr]]^b2^8qoio<__I+2 )ҬE\Ǡo ­~bԐOϫP98FRN_ {}+*B؏ vp0dJldb¦̑: %J>af;3 Qhlgch endstream endobj 172 0 obj<>stream HWYo~ׯh(y;O{$c;8*(CxhVO}U$Gfwuu_o<7DnŞI5q⅛xmMk`c,6}u=9[.m27ݞ8tL?a{R1Af1< ؋6w'6ʜ?~m'sʺ}n1rC% *e#Ni>]7Bsi^R7 ,5/"t:>Ä%)ev$X:K2-vG,-;Y1~S2` Fn$9# )EsV8͘kjmkoLIiBcM8X,XŸ aZcrۮoqgԫM3Wv;2>ƿX,4Dn-'\ZVcr] x|>;N*XY(7v8=% 7o?o?aDAF.}("#(\6@ P&s"CN?XMRYW6O@ 㻙qIiYG3A?2勣UˆeKS20K)@R}9Y) $9=;w|mH(O;sjGtcĴwcJ($Xo?ofD (X"70Onva^fټyƞsE1f ďܘbSrR0ǟ!猝0R-0]TJ'{DـR~[!Am*aղ+e>܎9tׂ. (L 44yO6K8trCbˤ4L Er$ViriJ:9I+|ageVf`Bv ((\V -ʽ'妁3IC޸m8r翂 R7R^z1v xE1̟'jD< MR  u|^ ʸ!.G"95ձ 8s+?oD}~&fL|4+8(6Yr./,qHJY+8T .[ gg?Xrƻ?/mc}Ք⚀HaML1j6h< n>쨕YOf6x!; pXR( o0mc=?0aĄ33k̋Ƀ'||b,Vcş#~Z*Gb>|ɍ WHRL<(d*V-1x[ jfkvTKĜ0]e'lAg]Hv[>hlegߣČodtkbbht(Cі/Ă&.20ERH%PhF0"{Z*Ta3Ob2IiW}&3~Lf]:T&k{Z˪Ȝ[*2\9lylq(@<fL૰BI{Oz#&YVIdl}qa!rR/^-a^VJ&e^2P*S%dkǪ%wiWE_R6'NExhaaV[^ƶkwXx ʫx[:CͣI ^]}IT<=~n BjcB&ċK)ɢJu", J1jA/:ndԌ}EIcSklAn o9jX)U: #f ՛J" .5$8Y'g3ӄ[lb|U#oK0" b&bh5b4(:Y kT7C'az|l5}Q!w4}"OEǩeEb(XhqP9V82kBZLR\v]0 ZQfF jYQT79 z))k6o" :Njn MqF!k/o[ c/$ͩeQh BN*PY6e+)ZQm*>_Sin3LLEE||UJ3A=ԽBfWx _a]bodu"?^/ߺO'g[\ίNqg_rnqc}?tmBt'hE~㻙rHUח7W͒>>][Tvzq ^gd[ZT9Ɖ ʹs  i.Ljp4燫KۚtQ_LW9Zrm$ ~\Jnƈ΄n%zpY|:G=?HrͼMF@Fxd\ Ғ)O;M>W p܍﹙AJ!@mIˏQO7y9{jEڴHKpbRqkӝU,upx QE>0Qy\(uFY&A}/t,$xMzAf0{*[.NHRM7U&J#3F1pfK}mBQ!ӊeglnwDt.p:3;VV,53 0X2 5řy85!\<]z? endstream endobj 173 0 obj<>stream xUT̶Cp ln'.ݝ Wy 4Fk$r@k+jzz=ND`jm%г3D>88`I6v&2AX@;S=+ c = )oaPg=@hs M @cS+X,[YX+lh?CN@;S$|4p`ie?Ԁ^߰qѳg  YZw mmߩ& 44uߣzV@LEL]r&#= {@+mr@+ %( K_=טͿW'_L?cgФ(/G| M ,=;;=W؏Awz!t0LKce1QO? 9ѿb h?2gmh -,X6@;_ifHճZYw%xppe`mi' 5q1Z ˍЇA{ ={?6Oïa8E;_O)_v?o0ktGcigVagMbgK|:)ˇC2CC}/ob(PC%CCCRC]}uۇSCzCO}]}u?>Mշ30:yx};s(<N-4s>l׿S~E0 ?ו(_/0׃@~C~B6&ymIw/խG*Uu׆qTvvmz@q> !HS}OZ Hrp`-)#rmIS38)/`fߗ펨Oy0oZ( [ 'H5U|icE;/QqL /:3!NT-j$, wt)uL% .#=¸s%㽿n{ ;Dhk@"cj M#ޤ+%ȗ߳tLKVK03_J_ӎ?rS ʕjCKCgˬG *5BQb#If#q ޜLX xw= [:JbDaDL('zԯ<գnoŲϖJڟ 2~([]|=WM3i\ #cpXe6JIH%iS$$z,ZH>m4AAJfMB_t`ȥ{kp`kO(!a&A(ţkh &r Pw*;:=c'VHm@ 0F;NĄA r?&V\ta(@T n]A>kYQ #)!.RW}D-CWB+ӓa7J܈ ]jNʡQzE>;qC;f[LoYakgIAN7$V)B4Q nz]cPy: R f_e$}se |LtsGD$kʹgKQG'p 1{܍K!\*Ǽtv3r6F[y{ٸqvڒUPrp=UhyF]7mUA~w,$ lw>Vrn;PD65HoΩ$Ց--Dn$RWfS{Lnl\3Xu_%vJ[f'd8yeBJqc!Q9ذ]Aq8)N9dZ{ֻRR冓ȫ &^5`I:C+VcVPp)󉲤5-eBF}flVȾQg6}VW.8=VAFz\ d<vDo$gXјG "sh52gQKDgs6cI;^!_9 ][y*HɒYdՄS G FU3YL`[*0^B9FuX=t{pBX#bZn(S@nLҵieAߨ#x%;Cb, i+M X iwudC?0"Eg"(l4DY89:g,ӝJ[y*Zv}ȚI'o'[L˿tA~{d2N6@w>j5 w=o%DY ]8s>sވb"}Uڴ]vOUSA7V|Lki>XƧV>t e;.F kE)ɯZn,&9x6CKB*vڐ},Vd' HD\\p*kȵۮyRHkZ%쪰KT*ho:4#|H| ĵ_#` Mg疫#[-.U0oe<DžRc B#q-Kؾ%͇z@ӄnlRC II/6@μ(uf(N7;YZQg!]vtG 6"!J4[0-P3>393Hs9d"Ú~zi̻0r>]_BUoΧF] #^weKCB#**[OC]OQX;g$+ysΊIzڪqjnGiFpW-$T_ks8F|^]e y Mj;CxC"a욡̼g`7V[ !0Y]D譍yܸr3P1|PE /D ?K%- fq_`*t $X [)0 APR͚Ѱ$x6BpCİ o-su2Mٮ܅] u!UJfΜ`v}"'t7-e CgD꺽L3rSCR)*.H$Om zkqo7n\%J`E귣7GB}5OMTE>Q0!!ܯC%{wM*kT/mxWZׯ)r[_}H<<~PzW`lML񁎋?뮘)l}׺z-Ԓhdy{;m 9gJy#D#O  &Q4םWX'1/u >˴-1[ȥA47đ~m5>W V& IC3vc6(w{SSX N[L)}FnUEgfWqS*kFj;1 Jr. uT$ԅ\(<ߙWmK6ɯBpLbx0-أKV/D6jOR<‘S Y8*ohiϙUaw*Hm+6sI:EˑXig^QG?"pf/,3۴)Fݍ<(/'ߧ޶jsawxҘ%Kvzt&wGN㟬c"kfc3+ ⣦Āby8? qG8oL@LCW+ՀJ 酹eBYd=JPf Bp_u)p 6PLˉD Yxgp."Bn~\0XѦ&Ơc;'DQXMד11)V̡!uH9ٕ-&+JUhׇ g"EWUٟ {lO kcƌCn|XT"&cfy9 HܷeUysBc5=nݢ)~ƺۢ4w;C{8װF& c-zQbE[|q%w p)V+J\GuwR\[CLn03Km1S*9wRPCLber!l:;Oe2&M'B`m'`E 9_R]_ K%9BlgniKзF)\e)m@dXZ3o@5@ jaIFnݔ Sͳ\K~)in9Ç'=UUȻޒRfG{8HL!1&14o]!qYɴ餚eIQ1Y, -peC$!);E/:1;+9FAݑ:NIia.:ĸ%\Nr4[o06YYtͿ?z;׺ _!(d9Jkۂ!뎢×/ppbU2-M*]c-RMߺڳ ^$[~ IlhEB'k[N%;-L8E5xUv% ֨s"@r{sa%sg@cncS$ח6 1Z>~WOsá_P=SmqLlfNߏ,rQpd$xb0'nEu2v# c,={3 R̵@rSfM;%dePO'JSƊ T's ɟ@EhM dWO` E) Q+n5T/~a_3Y 1vOs%@m!~Z#6010EEEH!{L^e|ά[Ӡ@vysdp<09^a蜱 iׯK ZY =Vkyf@>f<ۈ8fҔ'7GҸ DQriVQ99;ɛyx[& (/UT38pSPz}4F! ؘe :*͡}3d={߯:] 㛳3VtE/@X:<3S07Mȱ2GB `,ik,$ـnj _J:]0婓839A'dnw擋~#GJוk+t-DW\>W7^_ݠ_aD9^ʮ -=.[Uɫu-Tm&O܌q-aEbE%3tL7舨ɩ*onaꇳU@.^ 8U%;bXf<2bLni\mɶe]0=y]"m w G8]m NǑ^^ũU%㷗ߴU ԙk9!FU+8P9y] p*4,#Ij vCwV8(וՁXZuZi-[HCz+y[$.l-1tHw]!_!Ƣ!, t@yh 葑(~%L n٩v(ڱŽ񳀀_oC}(|ĵKQT>N5Z Z٠&UR` czY6P/ȶ芍WF}Y)צKsF߈4V{rڹ_Mi,[w ީ@ ]1ObVeoOc;].?E'IjBs>'qungk NUm[VS٣No[-(e KvlA<;Rw(yW{6>^1pӂJs{OY/u]3f!0F<+  y"1p,WRmCLumD!9?%$YOZҩfl`ރw!Ewbs,+uWރT%V(ü}|S^ɂr Yp $ve **Vl?a˔ٱ\-$RHOQlO,/O pi*oX8s: j*CsT iWtP<] ̐9B9Ceha8hŌ8qtѯo׍m0 2L? ~ۃstJWnE}EP6|Ǥ5dV#ÂcX(м4<cvB^YժuY݋X0Qe㚝#S▭z'Edh߄`?7)Gnt@Z. .7:]%w뤦kl,<,K<)jnHAj)4tip}oQ˨vw-#uϹr׷N\q+$e̘0W#8ߩOq~ [lDLlg,Ej-`QBSX0Io t]vnz -7Cũpum:&(64fI F 0=o&JZpܞL6lDJ DX(h bo|:Ke ZR͛OxNLwo숧/e|n"Vrkuׄ/qAe\%MLϡ׻8_V$s%1ڍs @Khw9Y4w䌇-W,47ŪMؘ)sGGJo^kN,{R1ߕO^un s '6 PKpK2ĝdz}\w{k+!!VZ5 q2?tAuH~gix*f6%xmMPLZu4Gە$@f~]B%l)E6y/.ڈ`P[:ثd@;^{hgt^?@x5ђ'. +(EIOx@dY%kW$QzYw]/u^>?blzNrB-a_`*;jcCz:(sFyC%+c+0lۺ9Z#oI>D2Y lJ7x}e-!'ׯImw?Яt*=lv_m:qGޝHٛ5hO!-1UC6DB@Ҥ)RY4ƌ-$4ya|û}ԄDMBV=?,b|؟, D=ӒWN# V楻OR]o;~#GS-8t pcQ;3ޜ4xT IGj&²`"<$/he6bF7ZE\/:0\U;. XOWe5utt߶pn *Gmݸt>v^ŝԊUF%}p <1(QWNT#< nLOrmsX|L {f/h? \y$ ߒJ-wǍsYfA,z"hrҔN'c;WR! V{Moc*CcQ#NS0fsw[՗>=!L> պdweNw,Aԕ{/w9~{g놽=; fy @(4|^`TJ!'~jzg&[03/+CJ:17(9< ]yW܍!0ۆW՞X73i7c*zEznz~RO`+6v])z" 4$j]]m#,i p S}La,[ޏ/o;nG4Tn $cOyhy1:l&fiUoY&g]7 ʧm}I~m ^z8l6^?܏ ܟdĕ=m ;NБސ6UT[ݣAIϡ)EPjNdk{/b_57XxadnsSEUnmo7H f3MPtj QpÒj'<1kiVx3]à?c1u\퀟wmV5Ѡ&㫿@"ޓ7H}? !UxkP("Ip9[nllP[ {lh76:_1x\OZ>"֍l%?劅i#rY0NRQc+R6B,  *89F]2Gk}; F"Žu`>Mk6KR]J>ϷVˏ0R D J=ȶ_ZPRj4sű"cKKAi 0c5rVsD)k)q9ݼp+@56 B̆=6Efx9P%HU҈vnAziPoQ֋_B&DϕOB͘9X5pdF9IU_$p3"LM^e=|Mog!rW͏8CT_'Z *`AX&өo fP F{_?"RTO5,Lmr]W_bRm=KlH|>4!7 k>/,MTS82mӉY7^yxJGJ٭YJgmlqZw[ŀgR>qKrPf"+nY>ScՓ %K#Mjj8vJǓC wlhzLy$T[2r+[Pq7AMa$(VI }]'GF7U0'O'*JIb8: |/ 7UsY-!V,l'ҺμV )h K=[ cg <`ޭ~$vuPO)w  } X@6 u䇿J"5/e,2J/7ie?+Q\$$J˼BފDC"<6ECxT쒌JUG\Ή4u ^tD1^Y=8 &m`8X~Š\yay*"r>nc@Rh!AeVa[\cZ)ve$H5%>tem!rC/o$w_Wcjř(Q,H61!Oz]cOGA|ʋIۘ1!bJԎr-U3 a9wXdT;=E"pjȾDy6AjcUKĈdq+vk\d]VqxSkW a۹ITGiDͿ*Fq/$h!/4Mcc_Q%׵dnU1QQN9tfƜ!R4 72%+5/c3-rLC Bew R*kAh̅v$L)G_{Omg1f}Gxv?5dJUe澬1D@U T'\evh :}EOT%ykضQ4B1=lSN+ҟkYJ(oRF)\H5Z&,jH%Y3>ؠnoV65Zd5bۋ\.-W5Ic=/lcВsϙx`)&ɷn[` T.;c@ QIdЃ%*QmTviktʓ^4O="]v{5Օ ĥ͡xc';ј0&6_H;+y FkB /S|찿Y Д sF&RzJi[7z#3-|٣1J@s=z @1R4!h&"pW:soq,m JKW!j.D&͋ԇ{jTH2Bщ5vn{ 5N-Fd!kxdtEN״pfqA HHlKtS}#32#u=uVX $,-D/xkt&8Wwd0ϳRÕq`{',x79c2jg,!- \AV~?1ɿ@;;0.͖iƷӦ{uYyIRV@q%,P J]9?п~92k/=3W*L83'wZ9M>Z2eTlR N;$ CYN{AG{*`}BWթS*3B]9 2tG'e@&9ǢS,_ձ茝d֫T])D|dwaumOm'C 3Mk_S<0;g2e3bӾ:wzhꖹ2Y;}-\ĉ!;E{Mw:.I6`eO*żM)ئ Nلon̿1 # ?5>_ ;V#?F_t=/q zzkɈvpj^zٓOtb,rhLr5ـgC,:'۟)&d*֢le ŠK)ȝ”&a|F ;9F#1rck)c<2^JdCtj3Z \z#]F,HZwY ]CZ;ӵ]Ej? L2\^k$^W>`3觊jR^9#bfdƝT`۞upE(t?9M3>7ɣ4>x-3;4^ާ6랖c>6M>hzJ'xEVIV?ݍr[^\$2H!h`JR0ADM/;{V1u1IyP[xYq~M=e~8:_t.ᶧ_M 9(X|HJ%د_ _deG=Z9.u: ^g,P\ tq|)=WkRM(J&XZ>-"<'Wڒԍ!$JDMN\:[R˼4l+]l .e]ѐKAS~>Q1TBIn)B̭eo_1$dsAG~\ʊuV㟯 \5/"rhP9/DǸ,xz"w+{3O A #_ELÑs뉟/:ev\3; F@_nt%=f ࡃ.JF8AZwXPv%|jO\h01파`$"i;H\ڸy4iwUYg3bJɃk`#@1[dPg .?w(6l;(x:U0wװ y2{*`'yTX]9#g#R_SWl:ZN/#"= sk*y)FM28X'*^_.Y'3eւ Յ+j_b]n[]ݲB >-Kp`ֽ/U'|" ]^5>u\e# o0zkal&' `Pe%I%\;OT/Y4.Lr1|ʕZE*L^ܯVf FVY6`&,9F4e+d֔wF,=-#| -Ak}Vfh'?!^ .ՔD|e%"s&ĿtۛL؎Fbk$8#"tW> V2b'|k,a^V?z"!oϚyy76JurHeDA!: %O)FeOa?G.)!M qN ~cM{~Teuӓ!(Wb"ߖpU[ 5W>QVv5V]HUlT(p`xk(.-(=]t|!Z1I&xOw"bP$uFo<^MScaw:Ok퓶@'8+8Vߪt2ZS*#@ ?&p0 [!khp}myvPK X8_@)Ja adO,``ԳsԳ3?.vH endstream endobj 174 0 obj<>stream xRmXSeV#B9:ű6C%vq uH ^t~A `%*"H9 ?@ YW~u?s?{g_MIarsa'X d`'>4w=NX"ALU,uv5ҸJق+p`4"$P z5a4Pczp#?rB1FGcJ'G S$qMS94h_1ZǘXTR$aJ,P]05V\n D3"?'3(֠hMS`Jܠ#*㱘ףj:lHXLpxk<>hI}Q{|h<;0Cdw\I'Bӈbf 8b899P@8EC#*ݩ8\$ pJ "(|>_wEQMc~tjx^8&b(tBo(^3 ǻ| Jӱb.E^şhg,76'7Y{ΕTItn?[練rf\L^ekj9)T=MTdWCc,sM,ykEmUQ_μg~g. o+eql~Z} bi83˔@XGFn)Mzݜ.7~+0_`hk҅. ɟQʡsL'}Bjͫ.v7\JrA[sǿ6&!`mxmþgnbRl岕K8=LqkHN_ljݗaai׸[[:W Cg OXedV}7iDG]O8Y8a;4#uG6MF=b]0d[ΎdIm,:U*|OIW}'XZaV;%J_Fش Md(P[۷?h)!|&Z_Q \㊶*;O-j<ˤ#tx0aAȜI)Zs4Ǹ;k*J};^0CMŒ:q|j̪)4EZ_- le MD>%o% AW -{מ͕=tذ8|X]쯎ι+Rz#lq.܏`/y~"X+S|zspΨ|L',Q-NN9 _?!B) BGB+LeS endstream endobj 175 0 obj<>stream xRmXLi^*&0xۚLٙ9'hE%5(k̼13Lf6D,-}( Ruh/c[b"KT!B֞s^{Ο}a[r2b "pP70lOJ(E T @P龳ۧgx ~JHbR |%T8TRR R* `DQ2E R` pȓ7JWL (&mQF PߏgAɿa]q/B'Qɿ=D)492BEA2HRW<{) 0+PQp*QDaw- ,N ĚC"15X+qq)!pz)$%tbP2PM{p:XJ+uu!_xx N&"W$ĥ8" +jjfQ¹S%VȲpZ3;l޽_tӲT6&xY;ehbv.Lyz[DLUѧFt.i/7xAf=2;錐 4q#Esh_798w͖U-c3r}sG-1!~NTϯ%O4zv0ôVxytIv&L㔇#Uܒ5&Xsip1UOKY{p"GطDEd٣ @ 4dLWF;c`sLQ^,';#O)}-۪GH^˗ﭏtZu\vӃ;;M-/w_ۏk­b2#֤{#lvyp֗ͿzF}um11_S__7qye˜ܚtDѐ$L?2޿)>x62'<űzlhAgǾ6)YS@ȉO#. ڵ, ~QBjK-Ӻ+⌗䧞ߧi#͵|b>yQ q߶ժjtKKRgW"iEy^Nŗ' םdd4带3ZbW'ʝ6:Fސp;cRh¾Ovo`g?:%ix>Ιr_#i73P{ [B>.EYnU:ܦ"\e!(9µw 'dzgE&R^i^&[8 Y,`u*`tSyJ l֠;&R& ^cA^.l~`R>RrƟ m endstream endobj 176 0 obj<>stream xy<ǭadM!`P4341ɾA,EdIR%,.Bve*à7us9y=>dT QhSU',u*$'wF01::P C: $ xSK$ Ip&b<` ]BH# 1hE0b-MCTAP( IE'Rn AQdᅫD_)Ӥ""YL')nJb-/_KΛLB  M3OoF쿺X E?C_SLe!!//GG~P3:pBi8F`${ߪߓ0'3 \ |rG/<D"b`@ Q4'%F}0m@ I2 h5ÿ $9?5Ob^I:L j_ "s&FM}A-@ 2Du{FF@? +aD<Ƈ63`ED4c=0u@HR/+ALYIѫrN%V#TG{#ǮbK}j+r9w A6}R-]X̹v\ϱ,xnFoz0c.Kw*~lc%72,m.~umQZpGClt-OYf?:c/2+,]]<;M)s۩=anwȅNww/u')|]{j(ؙn}@di8/-:BCv썠(Ť>CӢۮDp\ے*ro[dщ::=m/Z5[KLo UNO?Ԏa7/wn5ϵr;$5g9s"3Ef&Cz;Uz/SA9Ul/c۾B"pà,1>pN<ƏS6xlwdFzqVN&Nz$r{}}<9=SUmzMΉ.5[7oXΒO%) ܅7o}5kG6lwfPE/G: -ZfW=J {y=lm+Sts.AMfRHk-+Qj-mwg'y`&6-[ӒDpWK•E^N[ӎ|ϸ(6\eJt/j4a0n6)rglCjڃ%>mC{9*c)=Xr `OPXLjZPʳ/B Vw>ԡ"6~g%{f܌;Fq3XˣF7,mO6?٨*j.e:8obLV(JFJG|$_{q=ZaRbA+)ת*pn5.7ѿ<GPtT$n?8 .9O61OH f-SJ]lQbyv@3A|GJrG;'Qt)nɹQܷc|7ea10m+y@;Q{ai҇#\f ,GOn* hΤrt޵JH6{vm R;U"B{7vnU|;,W;yy]cO|kÐKWyIo%UH< 9V :wT,yff A]'S^ҫfJK7k?`>yIzߦm|g'^tܙg9:5SNe߫銔Xm! "xN.W ^mdudX/(@<L- ^ѼjmY8MP?\U- m~oӹ7Pа+nd~*nlc:o$=Y:ng>n*7{)-:z5&Ș8uz5%Nm~y;&.%*nz*'԰"N*h݉%e 0XrgQ맛ו#* UÜ~9+ eY3Yf0rxJwb붠Ei -dL:Gv yzBUi8dDEvU4$ӢqJ.Ѳ9SU_df9iZHuo: {[:R碿7%'%{K~Cҵ|^bSRJOPBe ŕ]~ۙvN3_a}}Sz(4T5?jba-zxcUIv$KkTRGrW;kh?[.Tr{,V* a4~tl*BW8}qk8(7, D 5P<¾n:((~jPhaQď}4ZLOXS[O&hrl7XNE(PT UnUHmM3 ¢ך֪x1E3tLb'-#):k݂g}ҡRfVzj#Ҭߵ7̈q;f6uatĕ#"֎T~ilr2'z^KO.Xe|OGdPxC6sϯ[݄k6]5ˌw"` >stream xUX\˶![pqwhqhܝ%8%<8'wxQs_RMEb 8YIeu~V r8H\ ?? f `y8QiG/gkK+Wf 2 lah@̬^q;;__.`gw9+*06s-Pwx6wsw0@%_;/9M 5!eT@eAv^'wts;!`g2? ;k3qK;0_!kkOd;v0O hV`Ր`{7N\5)ؿqTfskqA^s%n``=lW'hKgԿ6lPlf{{7 ;`sn*73;Wa?h! `xl2 SM6ZV7q4~T^7AMК:X^"?7A3v](k  YP#?F?dB@oB@Z9P ?B5\@p,ON~ 7_rRnvvv^~fn`׿la `' LMZsXtїJFX ˖xƞ.X1E'x{{.Qo&eNM2Hu/2vnBcu4]sêάW$ }/PcGZ5p؛WW&N+&VM"m<}FY:BShtǘتXa,R54K4D  `I[(e\UT ! I2I4Ry8xH]=ne"挕[Bsp2U+Ϟ\3SO$.;휱v2L|^{Rj 'Sy8"z\ Q:sFÏLQeWdTqWԨA/I u3QQ"oex{0p|T|d%*e.U?4T1fdSJmP.5W6YDJem^ >y}T)n8t1,oZO fSBMN2>i.C^T0B87 w| Q,KHZngIypNFI0b@&@L9!O_%C0,0'W.vŖ}懄eK]#sTby#1fL{ӈsjT~x(4J&NbteuD^w 9rKlȠg-Ori3¹+sf rsOeq;tiBGvU`yZ<>jfcquT-EljK߄v\QAi.3֓qA1>F8v>xۯsV,OD/4n4pͷz40V!P[ky(dG8@dߪ˜?X?pq pFmU@mFs }q픢7+RPA#Ӫm1F!,^?"a{[-t&B˂テ~xs-J}1%X_ ɩ띲͒|7ĝ*:{$ZAsm?rVwVUX5RJ1=ceIYJ#wi 06|$ z U ưYI_aA\U~ oP=,\[F$,!#0QW:qىL4V0Ri|p|D2+l=a_G}5(m3ȅ.'|3pg!΀pM+S\;[B>AG߆X+ lQ~enV %2x+_Bf/K:Z_iS!n|gቍ165/m$QZX9=FD> gl-A&`A~ &kU'S$ wi\zK$.b#7}^' v Ъb{uTdŮ,`^~=R8%~*CYt8UE sCK=:> r۲_xGNF h-I9]n+hhZHhch '&*ղ-˳IIR5$MQA_1yDUm:iϺWݟhJ> "BNE>M㈇|Y}7<.GKsu]o4T #i[*,*SHpV8BY6;/(Ew-qqb2"+k싣ÍnDH|o~Q /I{#砷ؾWPVRHrѮA*>N~L PnC,ևN O慉"śxmtmكR;\NP8BHjz&>쥿Z[85FDal r(R6)ueQ`n5r!OEMp-I{N2LR/g8ƒers3o%cώErԉNW&*?"[p* vZ)mʛnoʀκq8ctOFUƾY{%(h{: ?4޲\CZq?T.~GӢ̯m`Z;{ +b#ms&3'"҉{ 2-DFb5QܑnG8Ve- w,?sW<'CfVĺ}+]KRx0ޮi+Y^;؊);ѐ%j)>S/?,>tE$8ts'MfѪө(zpŰBx7jUμan+{8-8@!L6٥\J2EᚑS&PY>):y:[SSbRcq=.uc na2؉oK :bR"|F vUk9 rʗZ@zm>2b ZnRR- D`*vNІ8P{~Kq_l]6v~#-n^|QX=Nw~ŖS]7_ұz|ѹV n?ođi~ޕzW1"Q˛Nyk6rk])KP%CF*H*AGgTt7em>AS1_+Lj>1C‚M+[B0cug{-y Hle?n 6.JO)W ᢮DrA;*BQ{>2joh-DA"YSVƘ %-z\  (x|饢ex~MB(];NN!8YHLW[]9Dyt˻K0Qf<ި(?#ϱ8ExcGJ!4%>sd!#h=LNdcz =Z#26%8QP(UF0c|?t؉]V [ĸ,%b%qmtt?LPq_͠=7^=Efmq@N F&G;[ _)&|M"_CY krM_I\fX8ެ9i j 4^U.b^r 2_<͖^O .+I1-Fߐ.R &jzkR`בlpU|¦f6$+Z!l[$Vr~XR?Tb"d4StLôtց_Pg<(#"cҡJ\* b*8(qqF,7!C!8,þ _U-7쬼yMzx"DUYZOY%ElMm+/5/oOBycݴe^Tlt8-yRڰ5s'vhjQdH , Ι؞^|he"p2e8$[uKQw SfTWqw&~-(*3.!tSM 7_{e糏^W 3QdH;pEat?F5YCD%K1>θ"A+`qDK/q%8ͭoK~d J_^SmkFa6|0"*䵐ٮ%0[`5ᶠt f Ffrai,Iw_.*b2RPX6xj*:~$+HA}i汕MR.vl >i7H90I%(i|mQdv1΍IdFtgFUqXH b7787Nfp"du8$ۚoyvCkj$1p]UH3 Gk67)ަ.G*EOsL&SMS_8*|3]W)YH%@]WBx5xck*|ItyJY˓t"WMK:LeA%/!pnD<5>eˌNa \:1}n.#c0yzD?S³!V*W2;EaNHNsBGE*jH֡R~h=]KrDt4Tb%KwTbivDe}lƒk9թ͜ M{eTo9ʁjY'6lMSڐPkKA(QZU6{ut-=h“]qQtF5EcvLami[$:o2"z9h9O#ð~ [C7yڝ+yM*&n~3cp3Ɖ$j[zwD@/8^!'eDădĝ$ԁ^f\ٸD3R~ч^?Fk"=nRBԮm_xt o AE6R Y%;lufxAT6Usr?fE)yOr3QKC?:Ȳ1r&=W<}%Pԗ:0'FNJ^[O C_d Q~g>sC"|ܘ*`cnSuS015ĖS%9cfPl\lQ[߁+GZ`""dCnB_&E NiW,Nqa5st&P< #>de65\XLz?u+O&'4bǷi!-R5j?P<}i홷)i^,tFi};J!4u)>stream xRiTWƂ %KVQ1Za20 &(Ј (JD\A U* E,Rj{?_=}};}6?Fqt09B!M Dq"! R+ 8V&Wܱʫ4Sk`_y蘨dYs6sne+FCz*7Սbqɘpf+k> ='S͖~^ -hwË{c=^`*ݲ'9c~P8"4¤hsoSxɁ2ّ.&Wߡ:F~,R\mў@SVڪĤŇ&ncA9 2ц{$MzAqf1e%AXp_ЬL;>BiFcF;-)}gzY+C ݙlkYU>9f}zGϑxȬ{\1 xS~™bYƁS;]Ci{*?- ~+NUb7LۉJ'`5H oɬ8cFoyjy?,4&4Iozކ:SEݒS^ӓc!&ǎN/Dx8D,}j endstream endobj 179 0 obj<>stream xڌVn8ytt(P4EE-)%&D3̙3s@0Z 8!5^%{,s R3n@jgA:WJSep` Z[ 1N( {0`b ځƒ7O2#cHL Hd4T xs4xc.zC@kH 3kXT+bHO7v|TH3^#1{Tq=kd% O{HzN{Hk`,TUCB‰7" 0|'znFrPvLm"EGj(j)Ŭ4KUPcd9Zѿs9E`f-$'8@2r.H[N ~HFp2.mƩ>C $C87ÇU{hl1lC]5Su0:?bԏ =w07PVF q?4M3a'w3'QYcU۔ڦ?oPzŻO:yOun6PuAX X*,|bV=TÈ,ʦP2RJOP}蠬 0a=XN&1 vTɆrEZT儗;D3Mq5Eqh y)Hf=H=w\/].]!5>ϝHVfcXK%R#Pff# OEWҞfUZfJ8il66KTji1u&RY*Ia_5hhu2yMeR:}*)/ Q'ZW̔&N9)MgꨮV$rN'B}>p}{ܒ/Oonpg׶Ӿ)(.^j$θG$SYUw3mya2dIO6 CQ_o .3r$ wl aoWM C' X_% endstream endobj 1 0 obj<> endobj 2 0 obj<>stream xڕ;r6 >ѕ# <ΞI6U̞sv03DKPBRz~X㔫Ll4JKӴ0Ilm??$GׇT v `ß~6׏^hJih_?Ҩ>4:O;MԽSG O%~wu{?PCkIZx~H$V*neFk)B עD_M@Vl+\K8UfcY=j~ lu_`co ,^OI|4#ey&vWD.+=7hE=ߠCZC`Wbeg%cxؾ.FD^.)g/gWĜ,&iDP$}Hh5c@*XDU@4j߆F:2gtigjRG w>W,Cˬoskzǿs/o>9N}^Y-1%H\mI)H2 āi<2 Grap ū Me>5$:X 5оԇ 8F|#2q&}֢YS- _ O|X/,pb٭7L$2fQ\VNe'fE-3c:Y##+Bg{V<8i#@N4t!S!7 OKJжx*Xz#{S NUK%cߩɿ-} 9x7ӴCceѫO+`(m5#sQǔutdCDiX2&C g2h5^tM)TCZ(P9ǯ`bp"1֋NCꊬcwp~%hOnlouF0tܖĝm!Fb!qH(W:)"Xe eŔ`G]SSM95}\>@ ւHH $(),2rl$.֦aqZp6~Aa3Z.,f 4(d9fi'O%}YBv$pl/S"{NX ݰ0pF\Ȩix`J(272?W$l<.s4L_DWF!miJ6OysB]D`|z nbdBB8|] =RXO Lr#μSC2f xp>Z/h/{Y` ~A.v>U!Zy xbSp?RMJ>q;,${<K qN -,D 3-,D G68'}7 };Ru8+M)Ӹ rP"~ ;~ ;eB?5u8EV6xGcF EzI&#lM layFR gb<֗;1v.MVƔ2ݖ44{46?`܈]0dUI[`?@s`+RLk,KkswMg2,ܝxSl_ X_ܝn>L:b)N@R~ҁu+GZlڂ0'=/8/:=Kz>J͉ 璞q)2~;q).#@})ᰪMےJ0;N%9[R)/3#RuqxAaB\Ƽ04 ӓo*DaF3,C1ndh~}sL{!Ǫi |D&>zO˻+oLTؓ)vZDp&syфW>sJrÒw uJ43kgZu&←+,wߟUOA)[N@2+4 ~`YQl\!q}QE<&68lO74dn~9t"di6U8ǹ۱ Y2P#G"ꘖv!lR;fUhc5ub$Aͥ_ŅUc*J`HLhgDa?Rm7nYQA fJ/OYg>*gˁhux6.K$lߛ:OKouVoc+[z&7C nnt  GtƪP3:^ځܛtV3oa(T`23t$Z:NY3 F*u“l\Y.)l-*Q~wH | oS鸵4N۵(Z:j '43 t{q0!NR+W{y?(Ȉ]0d),"#ٶ KsbBAZmeP!0([ٮ  ;r캌ʼnS`Nk9,h.4:٦y2 3Y eYİe6]gVzlݝ,L{'T,?aF[x-T˝3n7`"f2W KحW) 袬#f|I8p5> +q -_G 0W+>՝r͔&WqgQgIqC_E_]]}֣ JM\;%r; Rkm+783C |k=88n.<"!5ÙaS8>e(N 06D=6.)X-Wcze`_;6] Z5v@A [:;I-bDwฤ" c}Ol3EŧCMXSd6qŵ$\T+uH2u6l|c&ќws :'n7r] Fن]sH1t&Ƚ; 6,wЂ~ZRˢ\ ((ѝ p'}AF89QR+!t0l - 7SN3l+tJn-jо9`ӕ/Up̥v&dǧ("]rټ FZѨ6)gtF_?*78Փѽ<| 9Im5k>DL|ijg7MppxOm:(85qM7F{`%G7,+,q(l. @[ >?b endstream endobj 3 0 obj<>stream x27P0Pw+Q F&@ }7c 6R +@ ,@L;;Ԓh7ԊX;;Ͷ% endstream endobj 4 0 obj<> endobj 5 0 obj<>stream xڕ[[s㸱~ۡ,$fM6SٙT<msG$5;LjF . pI_I*NMixlOwjm~6u\f̧?4YmDUOk?|Q%ߑ6elgN6{Z_|Q9Ӻ4ǻLMR[e([Wi۪5ג"NZf:"IDe^r1 Gܠ跪iXVP;7n3t&Ciɉ1kn<滌IW>.O5[f&#\ݞ #c|YzFR+8D)洜8K6w#C'qNJz9h=4rE|<<_XVԈsy0χ1CL-l,NjG8\ծ3m|6qʜB; +^idW`3$n Gt҅&v gL=u>n=t^D{#,"9U;8ilbi5[&g 9QIɹ|+f%b~jq]H 9 {E-n'H4h,953Iw(dm5aTt_Ii?nӢs7߀g3}rܔq\fqy"≦ åFOq^Zo]=oNNS:O$np >3ouBGŤMI=E.97G"JxygݟJӏz+IsS@՞h`'jȠ:Ispu:)ѽvэzߕf~.o5:zLr+HZL=KR!Ze9և-TBt¸ iNK騔ݜk,Ϸsk sb sk׆H⪸-E{Y>=ڂTe{ D7@rpH8jT6X`YoqDžm,l/S@f3.oHȣDwѨp¶ra!ܣgwU0irqPSo;|/s2:A"J닲o7/6m3{TΏSZIjؒwFa%*

ϻ]>9ei.HMIe:N˥ڷǞEg܉Q1%gumg9K"$71蔎,-8˜ۋmW*:Сk7td?v8K=%vF.a/ LQ5\@bR"leZq)ˎ ݤMgtXP./*2m!SRu7Qtz]S`a7c9NP\|0x Gvq,K=2~R*&sxEIJR{E*&\Ј"x0FwkĭerJ1w8 -_vWÀCkG(~So=:XV t >b8#ˍȢ h}XZ T hpLxTe[ W߸ݳI*2} XAkdkշ^| 3],<}H@Uh+y=/ڱ5b`G4BAԥ4LȲ*N \W QW(mG?|qP!7tTE$94ND|Pb^]MWY{҉ڋzO#ryާ}pLY*p0=T„Valy9o\ Er.PrUwrĦƣŕC@zև-RdjkQO%yQ2@0G9<5܊`i O~`kaaý L Ecl\hom[^n֛e/HiVA :h装>CA:AgQ rL}, S97m%Ҧtڔ3;Ts1 ,ʱ2p+NӖT\sC*sȻ~TI|U_z yUZ*S̹V9+:7qTWT5IWjw绢s{eFU/[N}EUf8+}ޝ DE'(7o{Qmf1|/ˠ&r 92̣HQOi->t_Hc%K]fD}ġ u𾀱n8D:["`y QͷPZ c*1GF&E!P( B1>nWÃRѬӣZ|QR=iK뚶9Jv9[r5<;6 :.Lu& H1KP{؅M>F'hrT6|;aA{L-6cF^Xo ,sDQP8v;gf^鳞CGa9rV;єf8/ѡRrt?͉''{`>˙B;!w&e*p1NkDtPF^M 8#J^ow3vAYDRD^Xp2+-aY^Kf|*@P5j]EB?sʭڣsT,Xv浕lǭcufJ^+pګEʛpBMzzsA /g80.)|ԨJ⒧V~xjq"o\^yDJMPu.h\ J9qF"t݇C_xP }O'1 {u{~S*p&fշ9)\/l 5rd&mL #O)7 XLi汵x똮r+Hf 1%my𶂱H … o| sV]-n73}T)hz2WPiWK߲y ZϝLhB5ҷL-+&l+/ixt5+lj.ε[C聊or X"|mÕ#PNpdoBee+B1nFb,KGslCiO| .+Wvdz/pnAL=Uc8#EmLy\~z2v`ɪP˅cҧ;=F> eq0{Jqw^'tı| ~,#cK/i^P5YkKMj l&?T+>CH&!ZXA=qZkعx:=Qm/+A><'EB '$?u_Q39tl[T("Mk=kLKp?S-R4n!>stream x27T0Pw+Q F&@ }7c 6R +@ , L!TȶSK\CR+Jb M endstream endobj 7 0 obj<> endobj 8 0 obj<>stream xڝْ}B'BףsTl'S\1 Iyv>}Ivڪ 6Fߍ՛ֹMbUf~7OZ v `HDxwnv3y;UCOvg#Oa=8۟HߣriVXYϱE9?h+cRyo>>^&l|ڊˬaf\˾6Y-_s-N6QcY̐}S=23̪[9\1'Kn~lTĀHཻk7}U^p~ibDa0] ՁU_?]83V6@qUe^z~i_m\_lBb}""*Gop` %f:1-OB[<7ʤy8~S]]/X7*vȘ=QO˿WTC55^*x*=_.""S{(?/::gxhʽ`CHGCi3IGBCu9LOyф7Z(i_Q6K/ŎG@!'OQfS2CJ XoR\3vUTLk҅2^es(b,N+0,31堞щ"ЉX8 ohc{CbO[Ƀo&9(U"J|q x69HAւ>9aGV7Axб*XxڷcVe~+17 Q )HQ _mn)d3pM1J]Oq8:8Jm8.7DФDkOO핷2w' I01S72pS@ƥS#Wjeڞ8QIoԨS?cLY,bNzaO<]b <97ʔ0#IV$CX#  (Y0YI%YA#X |yUM][ by8Tjy%HF_^ߥ{aPM/DZ <d$OO88f!⯇d<lc+ !`-Dy*K"2aXEsdM7We*0ih՘C=`lOg'5`>Z dggD剛W{V5ب|B}5̙V)uw6dckaΙT'JDLLsWhz.7>q[6g%V1,`vu&iL1dNhQ+ud̶l&ivy0ɠ=X #ҿi! "vg)+ZT:k 6#z y(P ȈDt^k$^,xN5δ1S(Gk==XWfA>]=7j*l7-3v\`E>+nNz.&N( .!+%\KG v Ĩum AXl,U7pueal6,e3K[c4MC%ecXy4_eV\EԲif,}ȏdZ~K(3vu~I'j;'3}bs<,/&2(32Z9 ͳ6'gcg}Aii=g{$5drrxGŝ)M3 פse! ]bΨbXU,l> @n1Fe6.ITOM3V9N$]:].wr, z^gji}|%1.{}!^΢_q% ?SV.NJD@;a¥z zFU](\u,z:$2! rXWD}S4i'MJ @0X*3/5NX &rC*4([f;4Ur˦~b@ӌ:ֻn Yb~Ky ZyPZy`F]bs<_)z,V"UI7 lSHF2EP%q*kpC@MW%b 0nߖ0j}ڏXk!K!vtGr]9ؽc*fv|fۄ]J7 0& < +$ y\J%o0]”dڒt W2'TXvE LEiS8 ~I.or '7LapI xڟ XPui *nSbdK3?^Ǝ $Ƕ;${W+)h8lKHq,=ZH3(hTT))Q{ c;ad}+5YNB8Wn I{R@Nr*g95$oRö?^DnTc`<+BJ2] PKԢF&!"Iˆi 䮡h/_;)SK50nJ sߴ"njَ"[ N% J7wd.B..ۤ#:{2ʵ vsA)], wk8ܸ2MʩJ3.W67Ӧn2#{A.\<ݜ@V%#?_I\Jζ69 eI$D#Umzm)ʼ 5,XɕWK6RӺ%E*Aȉ EV4HGHcDy $Nl~s)M&Hvk1cǚP#gŧ_pBۦʃ~`HI(\ zz5,=7tY{F-`&W֯(xK l.4LX ms5&$ͮM7?e endstream endobj 9 0 obj<>stream x410  )I$ʌ 1!VPq'0p DB|i8Ss$'u0;J"Ao XSnw`݋1gk.`8&U endstream endobj 10 0 obj<> endobj 11 0 obj<>stream x[IsWTe{c{k$R耄-+>oBٞkj [jT&dHy-V+'R2tY|u{ы\,n]KVI}Y**)כܺoؤ_|n~o^vǩM*OqW~5+) m)T/WJI۫MFd(65Bȡ,xS6(lR[K?\I'֋eun+̑ihA+uk+Ī)38ͥ;;u0B΄b.ELƳ9 X l59K_U{?b0 %?p,KŽS2I O(sE)7et{HU*RI'tH%KkmS~?$ǧ8ہR gGڔG?Qjஂs_$%AWlk瓢:t<bKУ *s#ҜU;$XH\nf 9pnVc%#PfŁYHk&Ū% B 4{Xa6FN.$gbgD< I[~ysJ^A:xG`iR7Ηp_iROҧdjayyʚ]y4xc%yv]r.Y-ry&"p?IeW1't23e{)u;!oBKy m y>0"ҖTd)˄TZ茕c5ZO[;g_phJ8 M[S rŚCYO%]u Hyu10)KH߂ avSYSIfH{aW\ Xg8aY: ٝ6_Q2Mmӕ|fLNa/ z\b'--f,vT9*ҝVZf7{KD';ɓQ/TrFX}Br2R!fOp*#μިٗT>g:G EҹKLCl0><!d4K^¿}x+ha}Pv o%*n]F=XPܑ~C]\ 5p0pxZqbPSQ['NéǗy;| vX%?#R|UwߒK܄UbFϝ8./d+〚 (K9u_QBtp>FU:rH$mJ>p 9XCHlX) 0Blh3.t.Q < g.=\3n:p E' cHlG=mU%&*+vx"q~B'Bk,"B)@X-J Y~XpMq *5A_~=).Cn~@ǕhPEj?&a$ 3'#p6"?(9ת0ptL6My:D*B޼v:#005iac5I`j~F&\w3!x.~Yz,7,;JB;/2n'mg&$ `5<֢zBO]Wo"$6RFb"dǪ0;2^ T@ZsT8}2 fALCǑP j'k- `c=@m~#)($\e8ǁ;Q>8t%QTk'm!d#6]\IѤ9%MJ?%oqAt*]x' !|h z Å? ]xvАޖ@S.ki8`fGs^@-f]fW2d+OЫJyy Gc{ǨAܷ0H>=y@nSVbŏUV]}RCC"20֩ST!Oφ,?p,=1d]i}UQUA\DlT +[Q#>}kO/1G5 !9T*_B/0 jh pLKH2rHt)H1R9]Eg G-ZJb eOPJXs[ mEJ/ODRAEaeڭ3Ȑ Ѱ 3H2 V(w/C xǴyRe|wHa] U(Z&<> q g\`>#g!|sкJ89;aUͩiiC!-<VQARROW aLE,rH<:ar;*Y "lLiVײNO@;_~},JA *c">stream x,1  $0u3NUЩ˵΀iT@~`b:{v4 9 DQ4\ ˵6y1keN緞1~ $ endstream endobj 13 0 obj<> endobj 14 0 obj<>stream xڕr]_Gj c.U&IV<8~H$\kkT% ===}&?Q*|$.|%#|˝w߼3zSEj6s4_[5۝Σ}ݩ:W:v۝16ji?yN'v}dM3_K6ǻ$6@IbsS*N|+{^q+63q+ýslbԒ4V J},:L*+\ұ#NT>B_`"8F@lN hqC8yʒeȩXL\`65H.#> auEִpn،KŲ_-$ѲQZ֡/!xj-bYh"vО[{ iLDTMdVU[]+,>}})iyu T'b m Ǟ49[*2o5羺tIQ캟K*TTx]qD3AH4x2,xHJi͍ndyKAr "oZԀјi РYIc;%n\nEkN07q S)Y P.mҸ,ld$$'m  ?/<t(Y-Y[C wvw0E'_ܟpӓ8y]i^c.3Tgͱ"BgXuln |3raLί NVUs={{2\R瞸C * [K%GXhpzY$ yZA2%>rjҎʑnm2TbdHX~H2/3XFƖ_ lM2c@vӑs3BG H8( bC hj#%I( O}n7מ_jyK~\l1P@ۼ\:V[EVn i)P0%ט#G h8>` 5P7|eTUn*uV$whQgTگVcg|FxYbϩ;O㦐"Y%/~(.F6N0 n-ZH;E [ʰ^\))WɱzGt\$Iaaq.as4$TXܛ6^9WN(:͹>UP1t<r_P%>W]n G#y PpkipK)uHU6gB۷`AMP \eqR-\<*/1UZ o[%y) PH2_3<,o{P FI>ϲZ 9ū:b,YvX;_TLH;ubS<"z}sK r x/ ݟ`#ߑ BZZ_:A ?:p=z or~C x ſ'}|*X,/a)Z!IʏvvI@#M:σ980?ܕJ"4&xьl{N}0q_-Ii䴥ו#r)=ĩ{r0~Aq{3/P/[s5PfוӅYpVxir4N$_td9FRYC?]OT;ܐ-rبR&0[bg琈lpJ:mSQ?T Mh]- `MUr3-Cޕ?,>Xb `BUDDz,YLY~`}P 5A?)jla+tx8n|K}f}QgB TpЫ} >[ endstream endobj 15 0 obj<>stream x,1 0 ն 8tF)8Ku|IŞF(T3(tV"ZZF#<[! endstream endobj 16 0 obj<> endobj 17 0 obj<>stream xڝZm6([HPA{%[܇4֫lm%97NpX,LQp8gҫJD@ioFˈ |wO&\*aJn~[j .l:':41v]=Y:_q_f͏wqW`N_zNF@a,ͻ/쥧F{IXgT3{qSdLl!nIQ4[+Q hڻ]44NAFD =(}ӏ';f'Ci ,ۏ(a@Fc?x񸋖)<@|AY nF{C>)4"2=JTg4A/yC2C- G;T_ -F0-(SA:R* xi ^^[K%Fh=eɱR!4JZM-'keHPY4{뭝fɋ'r) ݟb"JkResy"Owo"%^⬽%KxxފjM Rr XqCʒiQ޿Eo??? 1:Ma Bp<Đ7LF)U܋-ʂ:b?b:|-MCW'\v93:M =:摜D#&@?rXpIr]p5dwPOX6ajy i#.VyAL%we!>?*#ƌ X ‚Y$}ݝ3;#?N]=8u N!pHkMqj=cGwݱtW_Ν|8=gUU3#.<(ФR=:< z$'h‰_oH!#k eʢiAϦ!ILfuj^56*>J"'(Ӡ:O]+zg Qns4gG.W炸 Xn$pee7sH4\,>*-,%gD9U vLWJ?ݬi)ϻ8(x*&u你[ahÂcYdCN)BI8+;dyď"J'jش $glSfq}BU "PA3E0JT?bw5˘k N1̓k:U0a { *ERmNOrUOR7o~ͪ59L2>R[.[~^Pxx嫴z ZЎALE^$0Z%Vkz1p|Jŗh/Ch %MecSL8_gm%ifK9~I r/,* e q $`8!̝]M\GV/5o!7K) Ÿ]"spaZ']CnHg4U]Zy}ށ]yŅoN]7O$":c}ݢ(~;Ʌ0)ʛ]wwhqJo)5 $)L^M vN|^^0p]*x1Ds mqP{4QB9uR/&88NY9S> [gOxw)8"2μ(N t0=Ctb Lu%DI d,\X_R^:RwȉpJn/p}o;#_a $0`Yz*0J/w^ˑ%@ByFU#Ks}v_=v<1ZrbƝ,fcX [m@/էR͋-!E^#6[z'ZBR"_{sg־(l(E萆Jz-`OD#'D/yKִ!rB0X8ytTI{48}L!l6]B`xnn a+_\( 2NN<^6@s,/0a*˟!Ԧ /p2ftڛkP5X.\\ vDI2L# /82X@c B=4%b}>쿺q^Mxe(5~;Șie͹A*pWx5㻗;YJ:aǛEL4SR}eCR}探M׸x V.'΁?yWtOm{m-ğKPf+}ޒqPDn.IdU )XE͂hX+ ™{3$ KSAf"r~n.io̠hDDK2z> XIǕ>,0 ~裯ct)֤rp. _`Hb 3؃=|^3Q9RMe=w endstream endobj 18 0 obj<>stream xTy8{.{#e˱Wyd/X˒wxŌkcI$p+N'J-&gu:~_?<<׫qQ7S + "A}D PR2AX:L![`>遀uPG_SW_C)4?~%f$dKH Pp0D@fD"D @PD qtWKdV3B!Z1 p,)dbsq0Ht, &FB!3 !gA;{3H?wmX"3#!@D5+8c`:.z"6Io sU\׻,LFCo:Ɯhp8F y6K2^-mKa# - `2 pcLsdBC|@Y}-#́ ^Ej( yG l^ @[[f;͍ SFut֫8[I;&@P8C Qp Iі]!/%kNzr=t]̏]h{0ݧ;.svEGġŪC ̂]Žg3_ֽa:l @h>z<8Rj2kP/R2h–a>Qߛ+)JjPǂDqc g!I,OxiD[*#Ts~'}Mk7Ee߯ltk9EH)zfՃmUgJO+ v{tW*BD Y}'bHV~AMRuVѧ^hwOjXKkL|;/#OZ mp7nMn*7y,[jq-WIxo{f Ưun~0"$a z xxz +eÅ\s0{: Aw3 ֡/KNe>9ĝe.'++QĐ,{DnkկTP{?7tOLHy{UX.©]]91ʂOElC1W ɅH+F>7411TiL7ww8rk'~8fZs˞░#m.䞣7ԙk%SgGF2{LUgl74+'={έ9ucD=Y@OUӰY$*m>[ d5 5U xs6`U2O*2fYWy8h 0D/R~X/0T+̼I>stream xTn8>nv-( $qܦMlv> endobj 21 0 obj<>stream xڕr6_!ROCEʺp6 vf020c:D%YPHE9Dqr8h37%esQdAݾGF8 Ejdd!mA= f|Ɓ8׈tY |eĚfpܽ8N38;Ʌ~jtW&CupѥkeNT-(H5=H:4"8Ɠ2I'QdfYz1Y5y'V`7Rš 5yLƆ97)54y(P^p <gy@ZHZ yNuggׯ^Fx& H!\Lө Z6M`.ѽ{lISŻ*`5,eIY}pDLbp9mC]>:@\T_J^؃7q 6ۇƥhU0J`CSΟ'E=)r&Jl^xSQgy@і&ȭFٷM_L-ޯ͂+jz-ַ}%C>@;6#eA*H6Z: ;&`HnQvuv ڣ&;#6kIStQ o˹n] Np p(bE7!pMcQzrCp(jƛv9)6- 5c%Wg*YOBAU~]vn6W^[fA7ʮ !G/ [ON "(q)6S.z `=NhB>z2۞UrK "%b"|evXI* t+ުt%b;p\{h|9:"s4&͞q#p+cL΀j+xIKu8쮭ۮ_ť&:CfPsC6K: `A,pIBaO@Ϸ#@z8'FȬ!/bgC5Ay5q^`tyLt@O`14_ U|?jq:Fm2!,iTYP6bpD3z+WDŽiܥ!gې\o`2;l>lpyk!ң)P1#\=s N@ `b-cβ b8e`o)X5_IMĊ&VM˃TS1娟l):頢DA&!i\s(12`<.S99>k}$gC>ޭHArWgxr kr6.gծV"OL3x4ɝ P@ > jKJ@L\AkQW'|(Y`3攥ia(q E-;Tl5Oe- UB3 QQT!##(@鮲畍NSg1?l<]K &rHgM6yA#yfcuKE%<)S&˲+6$'N5C23v^Dۏ9<Ӗ|djD5@d8$=3!kZ0АYAp5p3c^ |jзTIO]Mޏm,֖riۉ$]DdG'% Zo*؋g2OR=zIc~sbjڡ;ʃ\ "4:hS^* C"nКʫ &y9?N=ĞV,EYtTBN5_(siB 'B.&8 Sڥs+3^F'ɺYsÿ+9}ܻ 1&p"n.blZmyd'09jhT+QY&+qM,+H>{,Icp͜XհPnutYWX]XxXąQf~ LBA.?jsmŨp`,k)dEhOspciEbf^ݔ>U <^cWaK!9_T%IhxHnϨXPn{J3>&_gP>#}Q҅5+*N452+˭Su$ ׫^W1~XZ5R|˄=*NwAv@dmQ \ŭ'$=WCmM&_Rºhjj9W 39Q 6(d9s4 nhw-6%dZLu_=ZvM7~tsd,:jV>H>L p N-7'hv9ym  h}ѹPġIYzU'V endstream endobj 22 0 obj<>stream x4 WlSIEz4msU lZ[0:%UavdD#3ةVQUe{w>Tvs-=`4X endstream endobj 23 0 obj<> endobj 24 0 obj<>stream xڥZ[ܶ~_E}Aĩw>yj3g{n(v0C|l-Cu&spSݩnOOPH S=-c,7PH뙦hv\8UÁd7-v@s&IqǪ,*&xKmjR$ V~`KRؒ7 zUO]ϥ>52dzvBg= +Ӥ42^.]2 mp7YC NeR6R |}:l/.6 AVEX/ mYf,ZBې';iح0lͬV'Z5i7AC'j(,8&1#xj'9tI ~ǵt"Weh"8 DLF pgk 9~+ΉNb ~%uM*N5m.Ii#T͵XQ+ ApFwUW7;$znhx3THb[K*̬*anUal<eEƤA=oy'Aw?OX'ʏ‰m}FձvLC%Eջ E5iYr$c.ߺG/[2/@>$~$G?{Y7+k KRqQ2*16bf-'㱒ذK¹qNxdE3k](GGǾɷdmWQpHtl9# F!s&*X.8WWs2)[@_  ݹμ6֫ i5  dz)Z2K!ǶCl|'|YtD$A8BhK-=Q dUsYDzW o URQʄiHvHA-\?4;Y>LV-7%A `i "iO#`.%.39j814}ˑZ}]"ύlvNy 8nda#M&be3F#™0W`bG& \Qb C`(1r뭰-pC\mtdQ㟯R'5=:%VP'1W/wpqȘ Hb_3ΝBG0% *ᄑ, YP5 q8%9Ŋrΐ _iYUI"ȋ#ga|OAb(t dbSzN~־NƀsocCru_pEٽ~`jɼpet9:G0}lƍ#/z]_pPwW4j1ͫ.8T"H64<4r˦KC`\j!0^$оZqr18#{KYI/`PAk *1\ .2Kd"X Xʫ"Rxh<.q1YذBY4N%#%,1 e6h`."Z1O< 1'!w׫0LUe`Adðش+ nuX11Dg R~ W'QN{yjfRLSw 'ASW'B;sTMWne dJh-{, Ц*5av5G{ln۝ tBM{<"JƁ{DVtIHZXjd-Pij_bC.82 l+ NbR& 8˱h3Wc 0KQ0j;hNPVk0gCA39]W8M3|W9>5˺++3ycCh$z q3Ąy:,PC<:.(rXt*f>21GibG$aǫ%ѿˁ_.QhʩMSFWO1`˔ӄ&Q*I1N`P0QC}r̋#R#3 m x 'j>='Ów;A/t|A(C%o:TPytNzFi܅F ڦB4:4i?铈&ZB% [+ aZh/^r'?] G-j~F]5qa24Ů:^.xk<7Epc(u^b-Ǚ^ Vg8˅VsԎ蜡2` 7 pm@DQ9^ k$3",lG{ضb=q/j“Elrprݱ8`y&9t_.,W/\~ MA.!g?##W0͊|Yr&K$&Sr٪rBϏdXs0'>kP,90-;q]STC^\E˶𮅸p}̎[䲐=Ίk™̏AywibյEM=r˖0YƏb2YOx۵!9洮cZtGʋo(]4\p%0;%7=0^7q3 q .3q:LU3cY  ܹ쫦dPsC%+9e ù//σ.k 4ƇH$V:fajk#LJ c3hri}9&v#N6'´ϜQ E,N@#sa<ݍ> c˃F\䃄^<]͠!$׺sp0GGqFWSyƔ&N D9T!R8tו3$ӷ<^}O: 儇o/>stream xڲ0P0Pw+QF @ }7 #6,† PaCK3N?(?98$Z?M?$$  endstream endobj 26 0 obj<> endobj 27 0 obj<>stream xZKϯPm*T !$ar<䐲}PD$5I*=9cJ@h4nHBɕU"Uq W{J:#ٌh;VȌ^.n ~l2]od`eMv: >uh|m* ﮾u""_Kڂ]B| e㕔PʸՇ,eFkID&R&R(Si,ŗH&,X$Re`Z +ّ`U5碫0_}j߾)\u^72\]YWHr!|H쎃 A AXU3; ㆿYdlwԏ$m"gؼs=Qf4Dzw]>7I9RV mdSRdjjpc1WD'ד'SیbwNl2с&TDs{4@]MhA hlSv9A8&i\C{83 @.3"#h /;-2G7w8ر0Ux`@e8ENG]k`: #vz8`l<Ԁ&(n@۴䳇'kF{qkyvzXD˳M/Xo")yPF4gq#UkHlRvOKJq"&ayeaȆH9GD- WW[flh{Řx^U&Eb^j _ksA7ĘZS6u1zXӲxlGV.>HBu%$`o*g`Po[~}XggFF@H: ^Úb)pcGeT G@U6Zp qHmLdy|֛v7lJLfʚAEl.G:tνjm ؼ#*մD8kq$ke)vܻ~/R˜Yt3ūXopDE='2(.zЄyC<bEj+:H&~uKtOH=xm𱍂 bnu"HN`-[Nfb:'UJ+b7,b@]j08N]_;c z:I#991B y f >t Zv{w Y8!+{&?ح#sx?`7}pDK7xM\AUw X>$ 'F{W7!^$ƶ'(7ų=Q4X{[A +yTM8=>:{׻yQړe1x'x33!xtn(=η, ޭҸix;NUa-WRTOS @q}jh{*BF#&gh_cޕXxrcr `Li /NP/`17*?b3r=.fd_VKGCuIB"hYon&Z:ܯCؐ@&%K<:\7' J{Z>;-gG* Iq&d3#6!jH\LSCc2e&Í >8KkLڽ'Gz_7}uQjLWaO׾:L~Ze[ܟVMK+b^>j}<lg_ P"4 ҇e;"~t=ɂbaWpC೬JWGvݛ?|ݷ՝- vV@i;]5yM! Ę&[{jl_L37[= BvՉ]+!b ƃ(\߾V)ouq#7Y$$:Y=.d[ fe-{+*嫝JsS )ls ",ͦ2i}&$9-.!W 'B)?`Lsj^*I.%+Jq x9b)65*4q@CovDr:;M7J't9DՉLj՛5磌 r^M=Q|=NTvNt.h ŜyT3  ({Mn8yK8bMEDcB^~I,T`R.Ay|Ky_1h˼`}Iב\ *Z)b3*,< 9tP~$V%Xɒn?;Q<aY w`#y L*3.\-muR"^H?A>i%ÿ; D, ~@W b- 3{ k ->uQ:v\ Wx3 *åphhi8ݯv];7 Mjp v8~эJXc$Q'_w R $g\uSMİ~dj1djM>-?Ho02L+)oRrTJk,M-?]Kcw&*:+TK8՗XOZZ/X5`~&Sa;SH :I5I9:8l vr6M=,4C}`ˏE=b WDTɔ[|'JP{ 2?.GȾz[6}p(l_AE~q;ݎtH=y.NP;"Dw#ա=Ndu|:7p|r269 -JͲw*{-^`@@ endstream endobj 28 0 obj<>stream x,ͱ 0 _HƆxiЩdM xW5q&GAHٳk"r#A$bP~tTDü=wlA&{ۻ# endstream endobj 29 0 obj<> endobj 30 0 obj<>stream xڵَ}B0@V/ټr뮢^OTR |TjXolpCB cqz[z$I|΢tu hܗ>t;DJY`_GFxtL sR`\.C4Bo7 Cx,c " A8x[X|n5xK"9u/tv1-@"D_?þ]:E?qoFrCoc#kAtC"^S\% !D'BP d4 $b&gɣ9@OX^wOߔ;;^6 U!O8 \UQA5cjc~pMQ]5Jy1-HQԽ 7^k|xt̀5Y@o sE%zXߺ ^ݹy$xSĦ'}Փ ί\Ym,c wok%Կ2ZpQTsah3ZEMqdcTB%UqU |*UEm+E=(jAMU"R'쏛Pa&ȉ+t J%,Rj{_95ȶ[;-ot:59/΅Ohٝ_u[}bcSdq!L dAny)""z y( ;9:1Tűc2##=nU&%4j[ܩ^ D:* 9Zy˚vPU`D$~D.c&I1&/˄<|FAWtbmb8Clrp(5W̶~%@r.^L&8<])?;)H6$K Cip szӱ,,kG uƖ0lv 8ys"GHd^q6h\8G,˶ %'HnSNn c,=~ߞ:OTKIG5%G>qnTJQI#fmbPn4&f^BR0P]<ȵػ ev$NJR78U`0?=>̣m/_CPݾ<ŪE%V'cBk8\&ps ŭ х[T{9ki|Ӱ MkhXwcС K6C[F :O cbɁOcZ@m'`l<=&9(b!fkj3i^w[0wVEM]S|ɲ`ǻC:*,>dښJ%v`},6EpBo +^wn$%.Ȟ(3u8qZM.)UOkeeQDC*MeJaY=C%YtJIG`lgqQh~ 6P3ŚEsT ?N`U/8%m<џ$ 㵛c5Wj,;x#zG8FCJ|[ˆ]6ero>1GCh 2/γZy6C ^ F6B(:ӲLc$Ņ}*r}V6;kV{őFa-9'_ A6^,w-I}p Rvr9#-ay l!$3 *Y_uCp_.nNf D W1)[u+?|?efvJ$O-i,J&7*2I`.ZߐJfă8J 28"dLzLPx|oAS&E`/i>j+j#vُڢMSŠ{K(@LI,ZF4A7Fe:Zt ue#z PvF60}&t ;tU[CL J/,_ZR8HLmD) UWxb3;¼=ᆞVjJX7-u=`HJ4i:&Z˶|s<;å_exN|T;nH/GIp~ r<+-3gi*vY wCMjy=7^E:vFz6,8q/xau (7\bb@/{>>ڧé;E?}1g YK|pXK cjq Lg}ƅD`%I(kI}3R'x`Y$Y|!dW}!ë5Jwߧp endstream endobj 31 0 obj<>stream x4; 0 @c-H',&N <)Kywn@UlH D쁉L3Ķ`Z0[4ǩun^~5G&M endstream endobj 32 0 obj<> endobj 33 0 obj<>stream xZK`Rl`F*>rؕK.l$ȅkf}O)8鞞~ &A/|;#(VA(~Fk4?{o[㵷0vxվ>бFQG7h𵌅Aw-(4o~5i~D(6c? S77nˈyGV4fzWqY)BnRlA꛰`Rv y+_x0.4C^Pu,hkK|ʿsa09gמ LB0n+qf{%-X^ :+mX&>&W+ȔDEIcqxM[=I!Ob<.r_u^n A]<kvOU0Hn?Ό_:$:W82wgfj_|44u{^anZ#hD[eJa.(F :pA)zV?fyD^1G7[ &DI$lUjYʬwt[ ,YXx7uS@K/I,/A{V{zj*X556~Wu'r*uNpNʵ/Ay\e;'m= tM(r2q%3@W@j>qU@xtz߯JE}xGH2>ru'QаXt tWvl6st|yt_Ya%#/ fFK~F>UW&߶~>,/gW^1B׿`41!yHV$gh62OSbA*y;ڟ0R)LLbz{@ԱjKEM;6hQ& C?#qp;nlsdlECPcxbA"L9+/la&grV8a!_Nz$N ɋiqڏ%XKj1OR-D~ƛb8Ͽtvd!+lN6a3nOa?O}\ĥ$~f{]<9VP86\ ?=˭ lW0Md ȹ{1 k4u qU _+mU)E.r²2?r,ե1Œcmhxn74+:VvnUJoy&q'&w͉:LuPuս(hg'UxPstGY0PiR3+~#VhpDFiI15㬉wEE|) eVyWnϕG66 e"Dح61!JWA<jԈ2/U?GSԣfFsN8%̵&W&rAqA$C0*)Q#@+NHIi}Π*Ll%$St-C)5T!9 e|{I2(U{,審)i֮Ȼdm W@ ~Tdkɣ5z1uYF(6qݕ]x v~879ݴtR |a,oxc|S6e-*O勗Ns녘RP3Ow]Y%o>A#6*펲O?ty]*x9Ptmlrg7Y7y)(BQ,}Uk,Qⓩ+Ef% ,.sSAd=םazJ"K6n,a v&dcdb̵(vK=A*EdƏh@~׽]&3׍bRmQ9TE CiQy &nڂMWIg.bVLs"jEV 8ťv)A,\j Uz-chiqRڞR #081ڼc}}lXᓫ+#CxI`x44ueIO!UЏѻz\ V0jׂ0RzXFi/ca !ϯFUؘXo-$f}\ K{{* B+l%Y㾢"412F[f{MA;Tɟtړ%t.,MCqzT5͒;_uZڥje4ZhO_v9G8ۅ7o{+ jɤ"jh9%?y8mQJZSv@u/z h/ruZjB/7Җ[ə6զ^ F307BX˖8>W'ڧ?Mg? az endstream endobj 34 0 obj<>stream x4= 0 FE[NYMUA:x|SǗ0Gy0pF|EGʭ@4-0iT,RY f+S?S:i/ }y˚## endstream endobj 35 0 obj<> endobj 36 0 obj<>stream xڭɎ>_0 iŒP,REr1hy[y[Q"vJa2EMo8Ȓw7|]޽<]>yܫ`Y"5SB 1@\2~htg"ZέEDv& pEQ`$nnpbW<ӕN|^}՝km;^{?x'\TM%O}n>1KAP;Xi@\oH NsEj8̌B!hi<2F4, AO$N@7!I6Dyɏ( YnXP|9s aF$@rcsیNkTŸ yzIU5rI;6c;_\v;|*BoOiIN,GYKĜK𮟖i7tA8!X$tQ?PSvdL1o8:&,  VC |s4}אD#3##||lʹEElP5mٙ9 e-Wj}Bz ˑGI)W͌if<_$j#<1(^,·I:;< 0Jcӿ_v|[I?ȉDX(X zc䎃́_XeevrěXȧ@w$&+d+OrMak)al)}+J"x+. 27"CNeDUp̏0%.%.|%EKu_OPr|#6BaX]R4e+Pzr/V `SEd͔~0J+N(\;\ۜei灉W0UoqП~#Q1P6L4һ$sg ngl8,;.3 !(qfC"H *Zqz\ͽ" Sr/@xqGcS% *I W1PN*>14C[sGʩu+'~GdSZ%`]r a\C.C%thV<t(D}yH(oz@0Wʹ@I,]OAF:]}ٝw=8"1 y޺G(0|&`p24OlNMf${E$IWb'U'> MG3 vIuK:ɥG([.˾a$(QE=.ROl9b֭KބYsrstYl~Ɉ`_H(Rd3'/{gt׵ nր)*_2ת㟑fY|߿R I>IXuؿm .<< C*Sf B8PQ*ⵊ4Yۨ 5OB 48<򎃷|XT(2^֞wjqqe5Ul.[96Δ){2/^e%5<kɖpGn=KЮLlK9uA7VQ ~/1 3f2ᕢʹy*SOf3 B&WI[J3qIyR yj7!iaj~^Q~b>x_%Љu1ާk^qQp)?Ts40 X+Lړi&i>:bK'n P(2f Vf8:_dE.e&lݳ=`igfY1(# дR3~"Rd" u@Ug{iOm)`^A~%f^gB q"#n7窹wU'4G1Q/>1\I&j]=8..t[NuА.sR?^׼U\7qB9aB/6K[Wsʻ%= $\U8 rZ3Wk^Q?6, DD OsR:G`;qzJp=|T1IFy>gֈsҒ?UFg[h352Q#%R2ʁUINBAU%#J81Һ%ebsKgzWX 0g*Q:9JԶhF-VگVDڒ9U&T zK7-t w48x[.Hx{u&E"°k|?'Ol-#W4$?xa ' 6 EWStz!aI%]9Wo11ĐsiZ W/ODG3WWA.B' ۧf;=[kKsAk4P$y$X>EY"+k0ʕhTn .lY V2Yp(K1H`Kaek y.3si9ye,udG Z !y<<1`~ f!C‹1j5I₪cJNA4Ei꜖1y'-'@5~EmőpFm&aMj#t:u͹G!̿M&OlR&Xڷ<9\py)5H!Tf}a#Z}m1uYc0~[Bb\)Mà} G2!up18Z.|^-xC J#- $aWMЌtW鹉X}"wM_HMZn'Ay 6 2 g#̨f[+6&$SXS o_pށU QS@Ps5/Nכ. endstream endobj 37 0 obj<>stream x4; @ Dc*lmtUpC"+Wz擜i1%Mڃk"8x 6!H*Rut#5 5uow;WMnW \-~nm^Z_6* endstream endobj 38 0 obj<> endobj 39 0 obj<>stream xi ( &sv[4Z֊z[3$ERXsH>y5R3 LLlZ)<-o/p<ƒ,z0ѳ\䉙]hWo빊Bg*rrn16x5wLKionM*l^y+g+ ) wk)Tn/Bo/^_uu$JG(;ʦ-M&B霶z/lFջ"%ʮx͢Dd~-{^6 Qe!֤[twMY]m Rܭ OA% hEC7FFjyT ['Z6"_n%3W Y]v]􈗅`u|9@pd=X,lUz9?o6X-bо6n7ނ"-\(IՄT`f1Zؓ|\9rsĦj2"Vȴ6T3G?jluB Q#w[)<-тD~QO*ixE>"GlO7;>nŔ*@LN^5p )N|o\ԶoRhSɘO i0F ftu$ mŠ.d*2T[rSX]$Vyza5\nHb=D[ OAV䙆~L]*gIy+7v:oAJmiLLD(,kz*+iM%&%QJPNefYfeV'',1ZJmPKIw64~a>*>Fn(,-oSXKGTgJ MVh pX)=%Wn1ԶeT.![;Pqfy{A $uHA/%}qCԆuTbmLdB,_X,PKk!8(Pl& g}mЏ`";%JoN()O}V 0 MAz.nArߜCW'X󶁝flIwԢq@2IlrI6k/ΛE&A_PE?)n/%/db+L j'mmCv6n{+oƝl(D @0WOU7!( ?t~#UD {*&9bmIHߖJsu]"_+X-8\z<:@0~r‖qFiW (Z<b bMS˱66qʹNv@,iYjIja$O\ӓWWI]ĮvU]W%RjxВ(yL- ڲ@:QܜRd/ImK@w0}=q&re5p7.E{G&*i"yt} |I9 n/~ `w'Ȗׄ}l]qcQNc#RP&rt8(-i޼/8\G6wr$%1u*XX#3*ė4-l&t7(ZH@\@:)21< :O+{Gxx8v~#C fkqzf2!F0d *)WSYtRɧv 2Ra?)ցϢD&e!v˜CG|x77njMk%k[z3*JlٔGi Y#+טD&{JaO4?e}HA\ wUA b_sgK?,nZ~`R<>X7AO"?cI5HT7?OseRLNǮ] oEqWT !%# _be )6 _z^y7V VtmZOA'AXLX帳7nMGփZ`G9\(MeQ'}nzwvoq>7qL+M>stream x,Ƚ @WopTpjpM?Eq aOi6 !9Qc&.JE{Oĸ> endobj 42 0 obj<>stream xڍZIϯ`rD.8reG$l0$H5ɪ4z}zOoBmR<6˃ڜ`-3v2e7{eMټ?os,ؗ۝C@שA{ħ }//Rl}ÿ& m?Th'hP (Vxw#^dSe?LY-lhl2JBtXQr*WakĔZHیE: ?  U+C+3Nv oQӹzq^tߵoaʇm {Pm9=Eo=a­Co"w{FK< e'Fr΃3.2 =* JZP(l8~+m/GY0^9?PȞ4 JpKbAYe@&YVD~<_X {bT=r%'CRTM] 6&+FJ˝`{)HfU8/eh 4'Y Ԉ:W< P 7 zfAIj{ud' L;RLꕂr;FSl"G ꄇ*nW&noТ)6,:7,lunAԥXB:OV/f?nna STT Sp4|>HtǁhC;~Ce jŒPP!2(T,y>hC j1~;aLh{K?2wn[b܃K:MI(DYl(,!>2o N#%Efa{p+.ƞ|7"V];P+ -XT66P-Iۄ o0/xn26t'$Q 35 &zqWHql~cȝ`'eӓo+hu3Y1TaRmR(1s~ձ Sl={)x8J3G PZG+kvœxVFOW1l7էC @.evΌh^)!5%Z,Uwc=!$I  ε+vD`LLL@bro1<3i Cjߗ^&? Z4v."$]{[(OAN'x掁@c;%"-`0εDƂc3[1x" 8f0|h)/ѡ.Ajġ,MP\( =ʲ708 >+ɢ6ž x7gL͉gEh pbRK .PT{(4SКd & ]O,01!N/1n d:$|2z;cln+X_V,@OA%{ R@҉y~ P];RM+|X8NgU #p#EIm&,io Kz Wnw"`3Nhps)-8o鎸Xf 8L-")+/#S!JqZF4#?禽2qd.3vh߂l% MrYRcCL…,^ܱ$p`^OZM T ] o^Z+ u;ֱ,qy`/Ə-& f'sd: 4,P)D}+:nX;>dS_WB !b=Cĉ+,"GCPՂ/>,CgL7rXԹ3kǝ#XQwE<5 @h$H~Ձ|s~p!O $L];_0XPt,a1MRFa$-/s"!c,!!J2֚<Θi@(u72oKZZ ^܌U6>ve}OQ@ѻRvIuO<,_ЕD.oVgOdID4+:yG-ՍG6uQb냐bsMKgPNq'tʆ W&KCNep#Y|,BfuXq1`;&*3:#l.+%s;qIFK0錛͞K NU"r)stR.ZpU0a(xqB5̋~?@IV:֘=)~K* DEt8yդ~ n @N>b qa9QFPWR?XГ/4 ψLў+?Uhos2sO endstream endobj 43 0 obj<>stream xSU uLOJu+53Rp 44P03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<80s3s**s JKR|SRЕB盚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;|`ziC,WRY`P "P*ʬP6300*B+2׼̼t#S3ĢJ.` L 2RR+R+./jQMBZ~(Z OJL.I,qaz)ZRA hi-мTOS #KRJP0~Z&0pSS+Rn^Onɚme X9X&u3SjM*,y־% mHx֮"&4׻,^5+Åa3>_xV/'x楼pZkBZAo`(&^yeO;M~wgx[4;/ߞpŦ]%R쏮x#ۡԮH𲊯]uO_xݻk?'~Yw/n9H}̉NhMI7g̴YOB77l]jiݏesOuySU|PZ=m3"/}nQCa+7;e[۴}ş59s yL}žn 1q40aw>xO1OzV.񗱦EwZziiůvhܨyUD4:޴Iswgu]|zB0DgI˾̰.JR Xl,JoVJbL,_Y[>uCV>B2ǭEܸ8Ugن[˘d_ӻn}kԀaa@rNjbQI~nbQ6dPQ endstream endobj 44 0 obj<>stream xUr6[bd>|> 9)-('`l8#> endobj 46 0 obj<>stream xڕZ[o~0(:BoN1N-1.>ShUQdF U$=QDȝc"I^GUN2FQJR7M0 pg<&v-`y R1Tzpjux켏y(,aYiw0"cՌA{q qs #Fh<}р@1~f1DuN6;mv/,sF5'h 6"W#J61b 3 SHC\9p`vH 5eb'丙g|V%?\9Ga/ R2Y Pj,Q)NE{ \][|T w@ceHfZGڶ]-%Ι58;MǎSk I;dq5`:!"p::2)a!q^ @._* 8 .CU!ԡ/'&4}D{&2jV}`r"$q"a-(ZC7y:C _- DŽ4]*IDB2/_ʔv?<ҷ{hbʂ;I81mdHfny#[ɇvE{h|\@T.~h;WvT+*0%-!Ɲtgd$p<'-ct`$X5IK9G].:p{-PSx:񲄖u=76M5ZĝOBwLKNEJ99mM'[Z-~iۘT:(d-E$4%BǿrP]Kl+ZGRKOtrwQ:d Gd:yU&ZCMGl'Cx> "wL(kȼ3d Ln3ͫ]3?Bۤ=!?;O2q-gwݑEbf\nm4i?W8ؾH֠XM-%7غDz7`ej gyC?B;ޭУ" l8@LRCINou+u~`PnN8H/o^>}ՍPNl9 .9̲Ht]=Tk, rj`>""O1 8`# ~>0Izp+ӌ'tNQ)M:7tz)it6?ӉJ ,'W+o GʵdZ|?:JrHs+3:Gɍ¹f=} b J~ :8wOM Ɂ$N5fǪ%şԀW4c=Vu:e?qS ӒD.OũBҗxx^Uh`&R9c,q['9Z!~8%RDIخ*"KΕ>stream x,Ƚ @WopT;T[4kB8: BXGVLDvXhl?w)זi緞* endstream endobj 48 0 obj<> endobj 49 0 obj<>stream xڵZYs8~VU!gޒx&;);<-)#^Q'5~DRhR`h|}Bj"៚( MH<&͙,3e)BKz4o.~6z<1.oݹ Pg<UPW[Z1QP_\R?nߝt{X߱6Wo$}w&Y ͙RRhٿpdV$J+U~So6sZ EIP=ZvlW]q$\qiʪDDYEebnFM¿SXWۮ4FJdy[ͱ2ike,B*w3披z]oy(UǷki.cyf&=* z8/K~TqH 7Qԛ冃W V!eRtPS:'I FPzSzf\iXޒ[]fj>4HU{w3VRo]ç,xC ""c_9-hv~ݕ47L͐ A>9"a0XrC, g !T"#`VmpHH|FO &NA<;&>$~Wf_y MqTls6yb%URW =Jph&4d#K'NE8V>".c&Л!_y*EIˋ')ZKTe]^,-MO=v4b x2)ǁ0/J!e&n"$$உzIR WnÀC v%wkIȜ'zH pW;GSɪ[;/cDCvu6XmnFMA8m3-u-v3h!: dد[#c#mx F,Qt-$#ZM7\O~0:%aa*6fƭ!vÇI Ll((Dڥ {2i|:5Td&z(zT'0 ;LЅNf nKj+70 ?.m[#ґB!XjC$EtZeR$23J;#TPĦ-\SY895e `m5S DM5y%Lն@w`GLšWK"IS%#!c٘gfc]5 ec(9yDc٘#9+ Px pe)PwBfʵos 家6r85ڶ#p?Hbr7-f6Yçb_0'_(4͕n0ڱ+w6RyMNHb=cj-il89 dߥ&f61G+2I);.)ce˝c!~WPBH5Wfe,"o}Ky\WN m<V-.6j~Yޯ@wo=#%veoiz>,$>!w@Q|=5㡳Ktr  ^is7${RugSϗl\P1is0t=Jʏ6?>` xH&.` Vv鐗l I}thvD"xTQ(*[9}I(5$1 wCƣƫ(Ճ d ؈ȟ݄ѯML=f꽘:׀~E'0fUE{|/.ˎ'&t8wt4GCeQOc0f:+xvցϞu+XGti|qƪ5Zx>XH ' qAh%q:I[ڇ̸xXBF1U">PCW_4o2߱̚`,Ggbر=c(އ%ߴ]F7.LvGx~V+\#^ pedMOy d'twފOm=gpT8ӭq$zUGHK]GzDc9t*>!y a)PW[,vD%JQ g %Z}YaAjk?nVX>hŎKGQ4dlKS \,zj+?tPӽK{bpYb;Ἒ۷}cOs՚SIeOsmYq]rKZr;K|5ǓY6>R>CW.QUP>j\Z?c7.BB=x ?jWnL*Ed1ids=PQr=fGM j5Ě`nxO_SL>stream xڲ4T0Pw+QF @ }7 #H44W040 *XvvE%.n!%vv:1 endstream endobj 51 0 obj<> endobj 52 0 obj<>stream xڅSn0+a-*0aU$"ڡɌ"99)O!,$4$oNp!3"!s+IREZ&+aO#iüˢ0H){o\ч6d/V &mL)i!8&_.rTsc(X&Drkt߼͐IqL7L=;r԰&X]8C<)in@Ok0c䔫EnBf*S'o\M;*pJ_=V||Я`P-/y]v#.=b 7rl tw2 Rë9O5[o7@a=\\CB( "F5\LLBK1_53ŏXJ=~V#k$3fqB!iQgB{ endstream endobj 53 0 obj<>stream xڲ4R0Pw+QF @ }7 #H4T41SK\CR+Jb  endstream endobj 54 0 obj<>stream xi<}mAD e 3&j2{f1Cd %,-ɾ$d͚=suu\y||s~}q 6xk:ޑ(@a`, P"見 n` (Iܐݐ$UNRH$E(Iax$EtBX@}3@ Fa8te ۸8;"8LH&$6xG;e '"90Oqu,)G`U9Q o"8eq3ID`1H3qVǸlt1D$h:~Q64B/P#]ꯤ.H4pwBAWbL4@`R!?SsDm0";$zGFr,!'Zxmz](ab?BRr@G(4(A|I&PEdd*I@/#uMׁH^( RoH:J%lCo( qK8$)o( ^_wIK^J{# JS4*HV^WB Ғm1BPHh_r03wbN`oCPYgQBg|y{LSB [ gL"h|'$W䚹%EWZG #.5lywRkÙ"l&cc'>}3t 6qZ(/k_'͓YN'8[> ;L1$ʇA)'* ƱգNR6IM_G)< /!͗Tw]7xֺRR ED BʍwvBLbo?eZ *|WpKtIF>z~Gn0MfMG&N.ۥxZE7*Q!EpQ~㜉.T K*%=NƝհoc+M[t;kY^RvƑ%dgAIGm>;kY-oSUὫ!=Cmw :a-nư@6>67Q%"J%im>~K0P4;13rrɬ6(qBA\)fp'oέCZf\w}`r6Gk17ڴc36=M_i~Q*cg| dx nLByЍ{ -M'ufZ|{?3@"Lʝ[1p=|*ޏ]r׀ 5Dživ[dJn-_8(ȿjfXim1yݠbFUseƷy>hB^J,xV_qd0J= /d}udm M&=[UtT[ z^dSzܝ0kx0LW2u2tl{!uR9?#znfUb+#761-r2R>\aWS U-*yR蓯קAǬ^%*d7!|%i^~ - S<~AyqǒiH:f.'OD)`Ŵkr#vSٖ<0gFY1AmrkKCKK;h5)Gc4D T,|U]/Yִd5wc(12}:lSfԜ'rq~tOd䤅'aF5_w&Qmatiҕ1X8Y^J!b5[ǿq{<*,{Diwk Xx{F{jMpx!.86wr)DU òϜ[ffU^:sKV“u ~Vu"xm!S^{! w9 K~l3Im溽 i)rj scTKLlG&&mbeoQ9hӏj4[;)M~xٛduM_(MH0a?LWfl;>@[%oP \{4GнRU'(!RZp/{N7G+/C6+&-ZWRVVq`'T/y7}rFw^Gf;QY*9RT˜]izbh2kr zJ*0^Tg߃[eI 'O:7ezj] m!W ӵF`zp^ҼGD] zJw0{u&k~$&ѥ%ָnT FgHe;IUQK:eRkO17]ۛCk;YfQ\E.WH_`-j"tۻ3?vO }? *vc~p9so܀N53E UេhQ=3[1k|4,Wv}h\l9E\?& h?YB$wZ1K6*?3kGr .󀊎{%KФ7g_1k땞%@vɅ|{6xt@qnqqFG^0LYFxUSoג0^:"=Ǧ0OC0Hc꽅znxϥ(@<Ȗז}x@bs7:钌ÍX7r'#˯".JM>?tX(Br6JPr1>\6!h"~KIdNVy%B#*=ո& LSe='0ޠXo CQ_U;ʯ6}\ڃm􄁘Z+ r?~&~o|nRGKQKޙ?Buv?ɸm(Z8,aZu-O? TZmN^ɴܑPVB4U5źp+&_W~sP.)ގL,]S}QI7ꏥe)I?!Ģ" 8 %T endstream endobj 55 0 obj<>stream xUX\˺qw h58נ5]w|kIڗ\\~UQc4, S C `eg@M\AR&.@A'@ p rsB~Qh GO ^I|q{ dbafbY]lo:V]/K->:SG\wk ӑɰ PJs*_sJN[gi'Sғԭ‡ N/6",DkRkP l4սZhB6e$VGp>EAW;nT²u e,"H~r d +L+mz~0LքJq:0.\&t!ի|#?@CB (K*ޝKc{W=~<7G6h!kft)EH#,39eɲyȖ]^Qf7*cz `C2PG#7$4Ʉ]~*q\22-Lnas@Ӵ-{szj~izsãR8:o+lE5aǼ*qc5@_O8 ڼSz*i胭߿$8;@> m7J,gڋ=/ Z;*G\}XmcW)`,&si{!!\.GzOB^6AVFJS .*zn庅^\蹫7`וq5J4(aٿ/ i},kdF,EʳaҪV*7C>FbIu?o7%i?{}+d,jҰRUwe}\,K9%X;לw: n&븸*d`a宮mc6BOC? _?{7\)8* #Y*VEbM-!@PLK.Xh}t''_=_ mKcW݆ͦ~6%!]ylè0Zt_D T]Yy~-d2@-zӢ>SHC6ea:h@^J1مN!?&Y/-eԠXOa@ۘҝۖodm>!z Arͫ5ŝoP|3 }焾,̕ 6CjE.Vm"XSV42;yCLɹvy~xH㓁 g|TEשnZqC;m~Z&Zy.Wȓ}vyuQNTh~glGIC#"%ScP]qXu,~f׉#ʁ3F H@mdV43jT [=:1c [?2^\O*v^GV\l)>rY8|Æ5&$vaCb 'Yg.%14M2V[!1HW}QXŮf'E+WAh|og=JSe K5r+=Γx~]&a[03YtUk*0 ꅪ>wU0|(bRְ.U3)%(C)D>^ ~ح#+l7®XWXʸuԌt~?lFK?ft{BUkgRQu*s}fxfO3pzBn/m>--j&aSt +֓i9: զ; BGX 9Ҩt8c4:O\Tղc 'Sӻ%i!|!.rkЬnm.܀hBs!8:i$麐-Z7V޿k%ފWN0gY:6`4 LU(l/gO^8ɱo$K!4ZA]^>n'kqЅt6O~Pp~ߣbTnxx](^׫NOYU-lZSzDj ϰMr-~DoQ D~AXݗr jag  6zp[R$7"Z44Pdr^5.օjV2Jf \R4+VU.MhI0lcO+v/  +lEa17YFkѼ ן ~N+ݘ~$78^\s8 +R"9R!qam?&[ ՖHu_0iN8!J-zיWY} ĻyhOuV:h>;TP$oqSLXfUfwLYD1lQMǮtQoBnYX$V~3F T4ՙ2 u\0>,m&GsghS`3PByO[/F՘%噙BK MҡI ʎD Uc2D=ս(3A1aL& hȣgd6uWE'P.&ݩl!ǫ:%-#U%8Py@LjAꔜGdb[t WJ4#}t{Ca3Uf1G%&[(]2՗}J&[7Ƣ=)f[|It3pQ%,z_Po: e7d1§dw#XK&^N,ȹ-Xt:w.+bY-FRwxliBo~F ~L3EL䍨8Seݐ9'*M {q7we"ݰ6%HlE[ q/\9'ot]WCCm_y5^.!ÈOu#?.[&ȝ 4ٿhoC]l֩f}^!6R( rYC'î+/ЉIn:NE^1l m14CO]Mˡ k[ Ě `8rX6/lޝa|;\нsioS<Ի # N{PҪ'"-9vknPG*u 9K u5#A}nJ/nlUsGb&r\b[oFXn T<ȶz2>?Id \d٤Ⱦ;v&JԑLF-5\95?=zI>arE H{kM9*|cc3OOt\rR f 2:yF ӏ)(n&zet^w0:q҅<~h i1-K``)S{:Arz̅q )&|5C/8iRЙS',[lw?P5X>Y[Ev0/g؍պj$/Ne`O zQ"P}Q$)]6y952|eIY (ht6ZWl^?%yufw (0jHO/!F<+G c(!j#\;G QEvMްUyR[6FpƷYMx'E8bOZ?9_hڔd=Y`=)ֶ[jkn4m Y׍ ;w*Uw7yHս>̯=r\u&}SXK0i³ >UZըct1p"@J_NAb(hbawDN(NO pqkCH B˓~4^#%U^6WsUq{ K-mmзNMGi_ va畜v?pr, W"k~QgVȹ{JDLd"a-/+R H]эןrʄ;S8!V&dʘ2Ts`q)\x&kœ%<.r){7o=UɚQd$ڝ41\ ͲS*ZchSz?*-?tʏMnE BN家 { iP-#傝+Hz04jʩg?rzٱd{iQ-PsP8Xv1jBWU}aPY7m5jSsyq oȗ//~䷨uK7uzΘO@7׃sdgԍFUCs3\9EgqUD0ݨ5)d&UfE0[0y鄓 uVeڗvC'52(X:If;YŬp3[?( 3^WQK_5?̟!گ^(ZܭT̴$7t2!vJ_%H[!NAmRʦ?䎰lM5̬ E+7~ ߋ=dНy6.eqimQ~@" I-0Mln͓GWX.>;.D/J1%_QX%&c~ `k?afK ^:Q{.ej[%u]h+.`(PcpT׫xFh1wt 054ъQ[B%֤xg3zB@CBҀaJʈ,"zyp@9 *P{}1$Kiexٖeo˛W0:s2Ñ)*`W> 7iWa^\Ox rS}ꤵ8˶qٟ^svƼD$L>?W>  yBA8^K""&۳GȡTCU0.k_&V9CGruRXJF@jkƊ;:&L"AÈ`p[', ?3$Ugj3f-Ώ~G;u0M%GCwBLl|9oN՝;Toa'ga}\6w*+ qI`n/iB. N.x+2o r3/ªwy i)EkG{qsZ+RC'w0ʓ=HAA <=UՑ@<es@V` 3h[W# ڨoO*x_xB2ě{52eKhF 4qIZ&k *ߎ$V3Aم'mj\k[7~Ll<1_r{ JgŚkFmߤvwsAsTH@MSSCdc^/ :JvB9 3 (5] *f`vW2U}D=@T"|7]J6~h|Yp[wGJXԽ<6u>%ICVdA.ҕٞUGi@4ЊigE8?˜cSI}ep-Uⱗ)paIqO%N/[yM\N:N{Vh򽲡_R~ȍib1m b|a]=u_YE~ՕQڼo9:?[bru3/0tYf~8VY4027oSZ4VQ_j_v9GI~ڈ4-v0 QY!WѮ Gu"j>Sk坝kT2:D-Q i?QEJeɗqD3ϛS}xtJv4 ({iLQEaGoϻjGD.-gR˲1Gp85JqI;KߵU aSmsVHZkP*{dznr Q]_%OYސגA-H&U`xKn)tg!j5ouY7X:iAߓ$ yֱ6 EaoU=2./Vt>+ZXFJ}ݦ//2zg };$]I±ǪǝWUw+VCץyܓwsx 爺Y>hnF?[妤!C*% Lp5\I1\"oqK[:y;ܒ4Щ>9, IP#**r;ٟ݀6H%0MkC q.au ܇4Br'8$>Htʤk0l.[=C1ط^8bz/*1#K&H〺9v Yg~w0^Q] uҒEEp4ws'bΤ+zA'X{H*ÑH2;{6ǰ;ןƘtinjFXN3BLKꍎRo=d- ~g^ÏZcbܖ X޸[+Epd8̦T OxXAA%~Ӎ!v1p Zh9KN^R *()gq-%?~ uFR>uEhWHx"52#2}⻻?C?ƕXYVz 7OKNsQ &Ǖ$p=mƸhudj$̴kǰK 3"~m:IA?;.vAC'_yEFz}ͨ̈́v9(|>j7xP>h ܐ֡-̷8r,s%#~;XmoO+6 WcJI&gs\uav iagjz2tVivH9O1`\}̽$5QGH;=ՂԒXX,RTh lMc{1'^?t\}gJzVu/5Y<"~fEVdis+HhĖpXٰܚc9JmcxuHZFW M"1aW&`0.|vz{viI仦 (/MInaM\;N@먴FklT}K?aتIR#ƷT 핂P~7KR3Ev m *SKA~d9Cõ3kfW=G1sA#+gvT,sit{5NoAzNX>YA6Prdm+,@byߜ)X??! ]K$~RqoR;.HZ$Ӎ\N]@ˇ'dA[f +}1Gm}imAġq1kЧ3 RxOƸ7xt;@{bYc(λa\=x}鹼%bU0cHͱԒ ;ٲs M. {-}@d endstream endobj 56 0 obj<>stream xUX\Ͷ;iƵq n \a}{u.+è8f'P#yC}9d?Z/(oܻaky Ϣ`ʗ^m&"S"u(n%?::gb}@S^~Fd؞Dbϲ%[]tN2꾤[Z܏Ab3gO~# {}RɃ`,xfj)GvAw84!c},»Z?sQ$ᄆQͩgJcv?EV_#6GZդb3TT<^ldA&4464pa}@&ܾ9ꑼpMǀZ4 SJ$06.*s#&eVTrY0 a :d}țF5pw{&3F?o梆I:Uս?N[ܱmNVC 0&E:di%QGټdH(EH9`ʎdˁԠH¡VG9^wl,(} 2ΏC:'Ϥun5F{Qm<,bwki|iUs/V_Rԟ`QxMw((*24]I ;$C7ذ:Zl<}JͦGOi#/TH'%SoXMH60Jc;ډP}.z-a|"r(V;=7k~"t2:湢M0mgї"'|lrnJKװ8'S~(ܭ¢fY B7t e{ W #U%!IX2ҘWΧ',B+otv?"dH\]"E#7a홲cmj2'.cd^&Ym +SkPɅ$Ko>i&3PLKW]+\#^iX&֝}4x`/tơ]XhILr,[q3* y@˥ ۆP<ÄQ@-߭>+eIL:C뙶NCXLj0^,i.i@$P\5pqsCVH-)ʜ]mk<&0 J8JդC"t/^7 (^o5 zR# tLJB3m1MX m0N}ߔJKq~~%l5czJ|ghڦh^:K)%͹Joĵ@}^[V:w؇WuJ`)_ԴK%[XUj< tz}5 q&zvQ 10w# <>w?T@!N7j@|ݬMz074dg Sv".lgz*P[?Nz93g_`{ōy? ߤL!mXo݄XGZ~TU垯Ej*|ftb)ePL'ʲ>ViOg!Xm-VwC?@qX\K(F=jS{pp.&%A h?KΤ~۶$~C93ZG͠)*)r`t|C=\np7u%:a٫{95|#:*EˌH8kXni&IEh,^TJ -ush8 *+b]5^< ZvuSoZ{,Zv\ўt4M0k< GA8,#RU>fx0٘tF|$ٴ{rʨne5,, 22-}?̼PN yu)UWAuCbބrp<$vDOL`.qͣScj媳vr7& M9BY|6,ӣ1ևI<ҧbQ7KT=<\7'Frmy:./qǚ&n57a\ȥQ\3w,-!i=on&g%@mjO.U G'&D'(9귖PGڝ鬱#YwSzT ;R!r`8]C5S3p$ Ý5>kr<4}϶U~k֑hhRtX"OqWNa&d 7ƙ<}>B _^;^^#$jF+N"O_{2\'BY;Ա3M?MAlB2ieQ[}]ƼZ#$m) g Yf;\RNx̘ i3ϵ[:b}YC[Z԰G aiD|f$+WI*˖E}p?[MhBNCb4v %`=Lz}$_^ ! ?J8a'w\E20Aq2A s`c&b@rQ?za (wWoӣ%pPЮ Jl9"غQ9I -0Ua&lO"{=KzJ`gx.3sN2V:4JZQR3C`)I7r92!)!> 3sW5r DB_KqEf Pѹ,/u)*{[`trf_ rQ;i2$dEs3de=C@S_dPW UE/a (KƆJm^3./sqGf&5VF(U:R\b KΨJVzWݥȴ|3p3}9hTfLJ.ͣ\}Z'TBzA{qH%; j*b5@~"j]Z_1Y*`'H-Y(9{-qa'X陞454i#Ѭ D:wQ=g!J1;SeHjVq4X8J{WW|#}jb!.VHZ.č*~Z` Gۀ.J卭 '< ql][[c)όJ~4LⱙLOSyp5|Uc@]xM~CkAJw]C$MЖ[ Q agKX^؂{= Y[{յȝJުSuX[S=4N)٫Z0w8"s"[\vP.##?TtQ]_˹aZ˵m{N3ҹRY>uZu*;g ٵqkb9mAk͎^y0wn5NKZ)SgyYi3E>?mLE!R|^orڪ=J`M%gat ܌YR![Y<4ͅ| hդ S;sضK:Wv*F2Npo򋾏 Zj+bgu:U i8falu7c,)vg} #섙5|&& mfeoxո&{ڶ)C jVWSvJc7\}L4:*t6o(Vw+T]uvm!Sm` "ݧtCVbSJh-\9Cl٦%7S1W1V1_7Bkg/Jij M }x#7؍i^sA׋UӀ Y`/TzS'"dyfХD\1C%)#ݼѽݞRX{3; (dBy5P&[T%Rnn~c<@хP5x QYy U|tk )}Jz"gda  NXy˵} Zo+Έim33NpQ ~j*NYܽ%pst PTWIIx; -6_ 9݄[cˈJf\,XJiT⭣j%D\6Ӫ .Vtʭ$dh+5![QwļTt]Ȗ+0CaW^ERR0Jt#o|R%6]|b6l i,%y6.Q`c>o7<׵G,&֢} S9Oymm*qCY/32 +<'CׯckU$ѻwƉ&xuQG(oЩcD\8΢KKn~3Z4h'yUȨuyS:7p(>:~I3yMHHZL?Pg*O"}({iBe/բ9ǂN=n]zza}AڬڰzA^Rd_>Z_Q`xM#Y|o갟mԐ sQeS+0GZ,?/A;w멦CD` -.V8.n$_ƪoqYU>W~Do) ˽Q-Wr!?94ADdB fvm*q@ ap6?Q0Anfa4&?"q$աo6]RnM:g6Ѷ{kJfk̻1zOI^jybY@,Im&L݌aO mǦӥG77'$/{0OS,iy$H`#&9v`7|3낞;wyF4td!mCYEmRld~ړ$i (XűcKs\fLqk9FE޵\,uI/k1h˗pm=A8Uވɰ@6% }[cfb_׮i*db3Vvf#P<)IӂH+!+Ըd:LO&XY3|k1J^?Q&Qw=1}$ѱB67[+CFl7fr˗%ǔ=|aR>Gex^T|Kg kYBkeP !2K8Wv!*{7njdܢ3[5͈:G," n_x$4،0S%3o? Vhn,P =S V!DGa,C= X(?YWʎjyC 84pz딆q\O5%kgڝ?Du .Cl߭ .%RFhp0׈IcΤJ5B߾+fH߷x[Ipl #X吓yj~E)h\뱘rRZ ~֦BBY:^0An԰Q抦`nl>4m \SNF=_RwtK5bڜ]̥ϫ/ v`L?ik\ 3-0[2Rp6Ը|7d(T HngimDr^fXCڍdknD)Ke0;DBLOZ5ض\ dV?'DoJP+}7x6LkņQ-7ߦs=/4gvp1G㒫 2fz-gZQUdžkWT NŠS+"w8Uj{e3>| v71bR&.FRp}e[%>4B_klK^~Kgf %ww:^DDWyPJEnl6 ^E,Rwҟ#F$zq `L5m+MVg=L 7:~mz;%J\zhIr!=oFBU6F]r qg@0m%0 䏁< B_E-#G)*"nK;}dIp}{Z9KY!kwێGoЈM5\]gk^=3au]Tu)ELG>6`]_E7cc# |Y~}c͑Wm~&"k"i'' }>Wh|I6uP@Ǧp`}•Efz·Ӝ~ ZX{OKX"̌U38IukE8k*.|b-B| yuX:fv7u/߅%gA!5dDʩ{؃1zf֐^yVh(fEN=e¦|hQ`R[ }r6HC1)wvpY?텞s_+P[jq k6/ʄ*Q~k膁,edD~ʷVi /Y)gRr7QqE_}zL73cR#:l ))g+Nw6sj'%Yu3MkrnGUyMi]R_k w0,P5 7%S8 wq>? q~YqsW@ MeKZLjP&"LEwyTpSӯA":٩!3ySA7c"WlkNʾi&7L[5UeՓ_YRj;QA hdS_b|IȧɅ][Rme2ʥٙ+Z5/.XS /NRGONNfӎ7=n*\Rp~G.5& w$xW.=7Y5SPfUTiI2bT1!A*Fh̵ndtmm)߲O]pF nF=[3³aZbyJ#ؐj%d}*dM0s_M]kc"%xϞ&5FAFT**qLրEDװk3 A3ގCӉR}I%oc%LzVS8lawq~?}Jab3ҤS~P7GDeȉyKJ)-Oa c=mOzxGx_&@WE% (#.f\Ua}^_B4z<%97q,/g) mvt/-F=,b۹KPMCybSZڪKM^!?#3ܻ(󶚹L\>vUÍ OċzͿWV p 4|R[DR;arpi0J] JSJ8bW0wkHk@`^ry#t1lN I"IL9^ yӬ]3rs?,\MW+Y|@{ `A?&kDF`K{>~_ no27FP\3NaYd:ANeӹ뱜k4E Cn-GDe̴{4/RH.2dceq!Buf 2UD+EUpdfpTV4s( Y4آ ,Se8/ dvCFf3X}[xRAcܥ_W}"V벢".{fSyK!,K͇n'] ?V8H9~Ut /Cԁ.g wt[\7i(gF5-6=lN~Jz(8G "9bƊA⮖WU^ lf&(.ٙ? q1B|tqyUɭi6;)h |9"-+͈7L,Tt uouhRm_/)vagY_fw Xt>~d/wg:ds@u`,7h^X1 C Or^Hsv{:P@$?a: !X`B H`f2:ڛmH endstream endobj 57 0 obj<>stream xRi:\?<Ò@#2**L))OT/2E*/Hc$M}4#c 5X#;[0XyN 1T Ɠ81%ȀOKRiFHK&,T"3I~57Vh['NQA `IƂүR'g4KZ5xɛП>bmTC1gXгhS_'S}FINC[JySAsRګHkqL-حwQݦtz-+!^m3n(*,kZ[1Z5Q1{UOpQ3yˊJ΄$%{h)/=zskn;98(`VBe<nVCH2PRuQcⵢ>cUF$b,ڇѺCߗ X鹝TwӍwܱ+KYQ[ZYꪡimF2g$EngЯw,W{f {'w "͙DM:zTCV\9/7/MMC¯v~vv}!ּ+vJBuU饗}WVF̬v7%ƃNODtK Wכ39 ՞qL~K4[S*¼WP Gceza d#Vu5i^Ԛo(aRhw8E^]vK?mvFzCvOUwA˩" ǟԆ3OmgC%vAң'seI탖 %"Pg~_Qh;$k5rSd6ΑtS,S=hHPqeB^f!\Lq`8 qoVv$9ԡwǜ1YrCa"=XsO W{'_+pT-}mbs/B=JBM7ѹ#6MM%ㄴԣb~JQ]BfA*х!9杭gőG,EJZBf-tSxZ5c΍&փ+ׅk Gjh$:7 -w=nR:Q$Ϸ$s{UV E9ߦ ޔ97-oP=FژKo NjT*hB>qf,Ý،FهeY8P d뻶Y[Vt'vt~lzexV Wcis V@!yn y^ÈW}z`~t5Jm8B@HF_8m_5xqkiϛ@WԴ0Ggž,˝Ń{2Z`3$|Z3=4aPnv8sbSYf<25/i~@ xuM(6vuWmfC$@g326c!=)n6~L,e CT+dƑ;]sd4Xl'U'W1}7f W8) oCQ6eoLOޤZIGc6P4X>Krh_einlbCվۍmGbv:$ )\3z\NupgLpnivאqa<BӢfYg2It *۩.NpDWHF 9MF^Nf岆n˘adK ADPJ#u F[sB~}*%?*"F'A̔ꌷ{/t9%bAd2ã7Fwb~GuM>f eqw b􃽖団Qj3]PxZ9ViudI;pWN$bYu1GB$ &wVT8fku!%K؁vXaSF s7[{Q_q TkИ?vx!V9ABzS>stream xSi<"FY)3W";%c1,B#k(J,wQwg9|:<__u_?b'M̥4Px{P#Ia*IC!bbZABqa0 T"h]) :]h4 $'ЅD`s< (Ҁ }_A@"HpQ @$tD 2OEvP8=Ya) t{$P뒱X#w{zpAc)]\$Q D.VH,sĂ'&=A tX"q_C#e=#}Q2Aq$ 럦ߵ?0/L  XAP]He+BA Bt܂h @Oz^iD_[8 ÔWd@;Pd8OdH`tDI! 8Ʉ9:v'< CO@Ǡ;2?'{ޒR0WUڍ i**)`dđ~\ghADBH 4$W'+IAӱ,֨-p0力H͂$ambDi[lbLKk+IiS9^}]g5/zVstqmكNrVW\|Zg[^|gÝPdL]=mpo\NȨ˒Q_oo>N%Wz:6ק2+/5݇o㦦hoǔuuٛ&Si&=[h5<ְTSͷhԁnZrBĹ  K7|]Zχit*U"iB|iV&Mn>Y7^63Ԯk##Ӏ 0ctTC*c 'W&=ƅwQor_k8/Z4M3eM S,6i4fz?%{V>#*=_=/:s̅nyKq@YTVRX-zVmVߩう CH'ECGr;]YB=fY|Ɠwö>y!(ڙw, ;nvJu c` K=U)ZN!hN d|݉7}L>6^ԎC]/NZRpoNy7[$k*-/h Pqx db2bHF ds{c-\Tvnh:quX9z]R'T]rR1M3"6czw#ٟXovMEH[5ƙ)x兒Bf>EA2Nƴ#2g<o OY f,1M̎`~$Wq$^7j);/=+PlnSh>}(Y{ wB#5P/5~;-I儯);[W~e QTjVhKT&)L Ccy9U,tG_#yh 6 Xb/]$OٟRyzmo~ajPeAIkQ6F h몜N?U<0)EyGy.ixQgvoI6oC5#`|]Ҋ˹3pqi9󘥴c3N1-sO5Kj8Ϲ0qT gxܾ33re SH$ٮ `KE3.J͓_q؉e}[mY!Oㆾ]EΟHLv98kL9h647SzhEjK`F95iveS[CLn,J#G_䶦81o`u{TUzal*g ]?V;E"% ({p\%OnYm0z3쮕F %OiޯjLEguCS ~S>nnw5Y,u΃$@*KК7BM$ڮK߱ L) p_|bjـVcF8)T{v{51+bllm ]px{ȕ[r3,q[ =$ V~n5Mi)y%Z5:a (cs >~屢&%R{93W]Z;ϚМҺw)[Jr-{Ґ/)קZ rꉕ]d sua*EC&q `Z/1 9P|0DP\ZЈ"qnfSJ/0 Fe dicb-{2 d3!+ՠWg-6ROiqn&oQşO @» ΐ[ƶ endstream endobj 59 0 obj<>stream xUX\˶qq n44 4!8[N +;YIi(btmAPX+@ rH;8tz rz90+w% qG s#~7h aNG8b;/!7px8:wp:]A ?ɰn|N+'(;q9 up\ 4ܽ`+;<\ *I&X$Mjr HVX7(&roM,oM ?[o}, n`խ~;k% „l@' ?d¤@7rì@raV. Y0+?f¬<@ YNq{+x;s^!. e9؁׵` {aͿ@ o¬h]JCxi|D2+ 1^[;f|C jmy:66s6 'A.3۞}l9^6L_kN&ei1.uz~4RHwЏeyR/bY{&36G˽))Sc3sP[`TutAlFsme&oc|xf"P@rYa#y^웴!`SR>c!euG8~\Di@˷dqg>)]'rA/qn,$rt/(M:^/1"HxR|5$'IiO‹xZ%*GrO`$ C8}k rLwẗ́xKn̂4xYQl紮OGڐ qSJyp%tB=%YE$eӧo4$=}& Ү/ǽDvB'2P d^OL@=QmI= yoSZ*Eav^sӍaͭ6j |&vB4bcy_p,`QQ`^"Gzs}ak3F|O] lLYW:߮KN)!u)M5}W"1\ i}jVB5KA@WNSY&da/e8m͋Kq;:dj, ,]2,]LQ2v(^MecQgJx ?` kj6|'ȸd=SmVE OSލ2wp ̑xdރhg1/,^P3603O#['sf5|HhJo_` m,s٢іVKKۙ}no;DBT*)|SөqW8g5`0zp@&#UQaUj NcqG tw\tx iܘ3Uqf`(Cq ׵5<1;ѣ_pJ-엕6]Iά[yM7 vdCfn0 2mb76o^e@=[9*L,W n;gj3'k!+C^wQ #`x'3jIM`О+[OThl8;u~Te $/x1[݁|&1%|p?Я|@hЖZ@捙>`)[pC؏d{yn|Yf1ItZN+sk9af{pbԝ%]t҃1<83Y$[XrK{#N/HOO,#YgEFS)uF';VJ,*ƂL{l ):&F!8 y>z@C\K}g4] Sb%VGrzʯ|YU  B3f[|7u7* +?5ێlB[C0ty"3Z|ɤF֠Om~㺈ܞZ̀ 7z0TdKvӽ:/Jyϝmы|W _twmheOI|7D?F+CH.-=;pŎs)⹪ {枱|2יU- Ѿ=:*y⋷x?<=єAx{G$>gP.k 51}߾|:X TZXe:F7q3-qEy,1/NU~E/6 9BpLܩ'V+oI3g~>XȮ2(/{HM Ƅ98\ -+w^de5O * cyvH*tփW<ߝL3}\0wFVV. S܈*d0+>T9% p s8"D dŜd֞s1כI=3F2b%0j6eۅnjŷ]e0r\$FX>:k,,ˆ|i~mGM؃3Eks7Lӂ,"Duņv筶sog"mof:mWc@SQ&`_ܠ&+wZwfĈ]b.xpy{ .-umuҸOŋw޾bUdl9`}{%h(Ip>ݛSڌb1ivٍ,qAPnqg:Tv?jpu Mj:󺟉R 6ɤ&l.3iڳTph a&Ygܵ?F;-㼐{\2pT_7w|'#kT, 6CR;ڝPaIvqk#I(5(Nʓ~I 6-uVIi\t]#{L>+ YRov51Nh@ib7Ը3oك'&V(}?VUuC[磅%V @(AHs߂}c}BcHD4ԝ1a(*p+rv&vz;̥fKǕٽI"@c!ҚWB%BT@9j$ɐMr?q{}77?AC#2)q0*HB5'yd˪Eᮚ߄ݞ@>feS-ARa@8 i{Qv(2:ںvK[8.#.5U# GGDLLh#;1YJB뒵`ݯFzz bu#O@E$'NRInVE{E]S>a'9dzQ/oBOQr z}VIiCrN܋/ Ilɻ"Qњ|T7r,cb0b+5]4?O &E?hhMU𸯑q0DE-$r3H_Y%Q뼤%YP7ՏKԛt&ǑWbh7 RhGq7Z e,IhI,__r?JRYje *RQ={1 [ L)z墽ș~K'.#|HODww|+:!6+:kW=h!#7 5<)Qeh}T u@⍐+K:zæt۝LDTדG2KuRi7!cdyP?+Y]pw,"^.~HF-p'Rl?Ջlpך'0VͲS,oN 5>j$ML-t]0xޓ2<n^ l[˕8- &C '4u<*%fxU?s2ߙHS۩WW0\~aC۟[m̋{ӡ'&R DUzer[K-ܺE~?Ov~gUOvr|8OȘȉ}M-m|݀70 Ro}8QύáP4|xoCBjk\+|NV!(:u-xFS~iVh`PP$_䧎SCQB;uh }m)w[x:<;h<2V!"k;xj3ӜjZ>$7HZ7e e5{ YJsaERHuko 6lt ,AƥdpMQjlby-̪\[KE-WW?,X?'=,5UĀFlPÎ_Ҽ,a/9F2rQ{OW6GFz6,+Ѷ~Kdknx?B2G Ɂy:>`H QKto$umܗRp2`-V ;mī2OnG #+?L[B\䔉YҮ MÛGtv&ekCUbG{E&3@E".e8ˊO9Ҧ/ќppW]ۯ)!7t27Z#ܚjX|(@FhgE@ӺQ@aEՂb FCe+}BV]j2ۓFEQ\PJed# )HG($ܪ&~@tŹ` tv."KYv9؜k[a͌uYMwQR+*{\ -};8ԝ}8.h#|n!O2F} 2ԃVܴD'ހWr['Tel7~o!ezȎEX^B|~ D[l$w\ʷ+t/U,EY1y@jޕЛ"{Y0H&USITYؾqGOtaǕѤg Lq$beחB1/~)$_>~#=®Ee{6q|cx]ʻ!GȣeF4J_4H7Q$k; 4\ϹV9>;_MyRRDzȞ7z;Jy9y(Ru^/_fcyKu|hL1$5(u+׃ ڮ4°-Ty4pK%9e>xS RX}Kn 1W5 ,O+{]Ip|iyC9Bۚ,=D,*3<^hU5pIn(_c2f1P2mG4$QDHIPMY6v|aC6wܼK¯pZwquB/<j??%;xO$7{6/"PPS59k^o7ˆ8YqYKh jElގ%L Q투;A(nUKׂUPa4!7ДieK>\e{sVʄ8 OIY Ms)%Oy wֲ9+%j_y)9cxIjPuՉJ ꣪>.Pay{0~.&pP,M(Lb4]Ⱥw*w\EnL#kԘfu@h!$~E"b0a@SF61i|KBX;#z8ƦuzmibK79QnmQ4-`DlcRO }Z\Wیxd"%7̶VǦfk|?}S|rz %i4?A5UxS8mMaME,c/5 ԰.@R3 !Rh)/8}z{0p'H}{ ^T#23,صy ArO>q$m`ACKpcK8J:8o0Z5yYLgK(ڱr ͌1 򝳴_lrD艧GʪBF"Tބq 6յs䨏$U/$yD#a^?}!ՄÁ .J9󮦘Rw&Ixw=t:N؎ǕUZ䚪br!g`$%i%GN0hs;ING&bN]p8X "^u<{ lx-FZ 6C7f_@@uQܕ/z)Cq8Qi{⓶ &3ihz6NWr|qfC)}Tb`krFx=;;o+t`o$=&*A{bICQd&-]xz3;RCx*?M'")XXR|U VeV qBFB-%..txND@KZh7{a Hq_L}?öj n6&cLtmtZy6#tɟ_~ "&Pbw)F#f9_҃pDן {ƪG Tcz+RuFBɫ6}*L`^=UeY&"K(?6Wfuyy`tSruvX'$ <s:NcPmvO3/hDK"1qֵ>\K&뗥"3J5`*"ba@k"2`s\Ac-s!;~df.{&(wJ\۳wTqZb\~݅SCu(l%nFZUx9PQ B&2,M*K ~en(Y!1ß9gDWos9^cfK'V蜷i}SyT1u?.0W4gHŀxAsiζ-`C$>P4ђMZB?Y2J;yc/Fo0 4L^.;5QrG\'$#[ʪߴ D).~-qӍ:W_ߎq2Cc1Ć~~m@ÀwvxeT5|f]BSKKC -q?ӼK[ˮ^"2 >[<2goWX$୥r4B컉VI;H#VoKgItIjdUScRPm0G+zU dO8juVfU;\1vW[W{P"c<.|T>V^hHaA#?rv2~XC|6VKijSZMj`z5m|9l/V1sQhkF&B-SWb&4qH9GIx*maޔUU@a_}NFr|#LY-hRPVCVtg=7f%i4Z4MU}Ȟrhc<ǦPKחЁɑIɛ^%IC3g,^6?y׏z)Š/އ } >仱Y='x:z}b )vL #&u}()FH ֞w0ƽQ*c[\蠏Js޹0:MȚx5־L/',U@͈kmX]>^:?,([rB~L l+ȭc;ᢜ{Hm/}bOQp}懅+$6_ǟM`M駴dofňp;QB0VF,'8xKS} Qt>V J3 ؗ-un2#cue֝f؁O͜gz QxAgG;t*e9*Ov+թV- %U-pgd{5crwU©7SYWD^;:7Vk4 B{  ׶:gpɓGQc|z&>>e 7 IWb6&tFYK\=7%>*SZeALk:f 9[x;>|x.(a2[sFx ڍ*McxMv/vT`.!3'#_zנƍ0(MWIV^5OR7I%]/9UС4/\8!5%+!6mK~ w8;7d # nvIRS[WЭޖ9G M(u!j 78d`Cݓg_0Tt/Q&({cHau}"zU~"8YܘKG=pRmCk 0RW( ? (n ؀SoܨGȥ'ֲ7 ڳ8 ˄:ȮcFÎRU5c~x(֮4X3x7 PξjKZyA٪#s-< ^d~7g1td<5PːR!aW-5$\Jk2%]AX͹Tzo,1qz;ꏴ5B=KD5dZ*:HZd5 LFy(j6P6Z&}lEF voBPr#ncZf\şujD2_EFdGF=j6n?ȓ͇/h+% gO uP5܇N?aEhs6@ttdm4%ā8y-0ܘ}t`"rl~#~X&KʆQ芜)a}WGwbEͺeH|faNT oxiH6!H{N ZOxI&A5X TF.7mt$۞]Z粈J.N{ݞ#V{4KE6]=O˵vo#{K+'QV!"l6^|acZjh?LaTܦGTJdG4j@$U%B)<ƘZkcajR$ɁtфtժoH/m610Ss* LJIj|" O4&rfm sL-{Nmù?D+ t? endstream endobj 60 0 obj<>stream xe\kEK@zh[AfaCF@,BDn%N>}~ip5_k0,L:M sMDj27gHNILIMHb.?>3~\5!V$yxβ[:dv:*%ͣ3Xx9 G>HU5w9Gw+RF$]Y1LLۭ.Rs&gK99|,OcE}5 Kh/wFRy̑l ƦfS%7G;*v?4||˂;n'\-B+ȕD1WOw&J@%5ItJ}`HImk u$(|{[#4~ljHm׽*R ||LTͨw%u[p79u\G֭VBe澙g^FqBL}ոHt砧u"S wwzwB |[0I+Ye\v= 'n&z *xmz^휛41<lИ<Ȅ|KkbO:xLho4 \0[2v~$ ĝ0q2 u־]-uv6,Gj{#sR)Dm5c<2xaѯis/ӬMLn7 Q3xMVrL7Ѻ -+܉VP{Z}f[:=2' ڭ A|~[r܈GLk\8ڼ`:&j-ThtP/˰Abqϒ[)K-*6վ.齸NJJ 4Sڞ D-Stz'PG*!tYALxF5T-ٝ^.&rZ:DǤM{]{q>?R:3ѣ^6"ш\_"p\,?J50ЕdIzHȓ8zzPKT-Z-R~&a<ث9W. -㩜,oae(ݙv%l$n#u/9=Cp<㺝NDWs)l}|׊-2 87ŭj9S>>L<  :gPdZwyE>V/{9b^O(eTFvCyԶAZM>z͸PތI8,k[UpӑtM>R5=W \rûY\4RvKnWQ϶4 K֌Ozg_s1K 眱ް&2|,YJYHgӒsل9ϕI޷zSN jœ|o[vє5jN$1QYJG"'46~}kepbïro:V'+ӥzd3;+ ѵ,nkS`󩞼{RĈ8dpKg/}d^7RdjeCV[jgyxĥRm]ЉXy-(8-Ft)zMFzέ^DO;|B Ò0.llv"UPNo&6ɭka8|H?. S$*Mn;Qsi(F9Ob &u;GYM|M6*K3tld 5VC$[yoJҿQy܇sX[w_C^@8jX5V7[r,+[''d6P!۷b]XkޝS7y#RYP7YU2Wq+"4hRαR6So㸀L\T?2ԑ( ֓U0n_jP1副uCiPV~pZ)9_6+iHoXSUUZ!̯pWcF03n &J!G:iAͮӟ^Vn (UDD%25kn)d3T;ķWVTONDPQ* T!I }hu>Vc+0/̿B1 `E~jdSg,}UF6N o߮vI 36Z>tRYF!u~S|~^|Zd}g=&g:e2*:R\ j*9fGM7 "j~Mc&["]K-3] WN47w}rʼKXURE{zbޯS.!"<_>tA4$*Z#x`݊7&ݤ) _$210 5zjИq`WGODD?CdѼEݧ`괳OyJ{'Nq*6ŧ6b3}&(BJ}صg'IKm哼S!-;os#%~ATSlgBT3 W}:*Cct,<[{X'TYEe8+tMDǕyUoO+\$o49M5sn]"3;w@ŭOirF|s.{;޲Og%k9Vu~y%UM)ٱԭIͺ _IҜVpw\]NhFrk?7OY!hc>;!= ~96)'/QW#kyU.I7-^l/Q5?eL:9|\X,3PbT]F ՛ 4F`y*)Ѯ[/*5Zں]_xʱplac4Onj:pٰx ,6K3̺*)fF<{k&~n|n+V-/ qf>` #OAl+=n\KPxg]\.l߼=k[ǶY.CZ7#^3-S>a-O o9d^̌>V({EFuЎ+{wTIs)73=Ca [My ;g-$Kc%|G[c,l~Ojپ,TY_\դ`Q[!IרFBeO%xc++2UXGBܡA)kU'ř[c֚ؠ 7ǞXkAW`fku(L+3)RS"&"p(ju>kQzWU[f_l(c rﯺ@z-2!`DGc;-ۖ7d{6bwç M\(>bCNH2698uYWT=%ϵYLXy{HJPEOK쵶/@ӜxS+C(Q#$k]\3`C O$A(ҙE& endstream endobj 61 0 obj<>stream xg8\kƕhh!zYw23`hQ^"ANhQFNp}>\g/oY׵XtyA6P%$#+ (h VV5D(Z$$AG .05дFCnf> xGp8G+uC!  Ð* rޘ8nLr7!H @mA|Z-荓 SkY;1Eoik'? N(74DB.A ܜUE[aG;8+sUyB!:04BC:Y?}k(pta ]' 7Kyn o=YC1v(`b%("x 0 @=o "fa|[ =P.Pj#WT?b7J(7|Z&qAOoM7go$>IF؂7"ፊo(~,7unt.7EoxÛw ot=F!?(yy7#(G'? &_ `nPUE@_\P(f+~7_l 9P' CRjCK tK{R&Ż9+uwĥn4VJ^}2AEHΙ 4%sSV$2{whνBcC@,z;V偟TJ2"I# j>{,@NBi~Dv5I}q0M""G{xL"izz&ϑx{?*%ެXSىg<@`?EJʭj1fޚ6$=l, ~{@th+}+N4c*hCf#b3Vy.d))OMfhp;FR1ۿY2NyٴCCIhMŶ[MZq-s|o_'G؍[WdfGH}K_CCceߞl ,iޗ}/eXwq&jjZZS|d=}q5H1\7%9A;BEc\ԝ'a&ybJ&9I&Q/9G6y 4LW< (L*q =c'R }@)l.Fi"G]z q<8(ŒpϵQQ6D6u23$~vzXCXӝ@ر;tqfik5`AܔȖ"esr /f?|6Z^le$|4>1*ݛSoBy=tgnߔ_+ ^9D 6Y7Nv[P%Wo0~U0ql)bK% b 0h|ጢ#J UhBlJ:܂C-ۇOU.FU5VML(Ȣ1Hh;Mᗷ;O+ayT6nFX uecUMrs琥7,Jvh[[VJZj3;$O~l~×6KM1?}rYS;:%4 {/FƽXy{R:qaGN<$sWFN1 Z+9giN@J$v~m7݈PuquZ dor%'|&wY_A}4}#*,8/` olEB^V}IzЗz_j]3 .GH4[&!MĊ`GȐ?t("oE]%q ,y .6bM53aO7^渦ɛlGY&(3T2%}x,>|=R.\Þc{/QNg7 MޜsVa;r羹/UٴD0  ;<=M&!GO:%eơK6;Ԏ^u(ShB9?Pu{.b=9Q>W OOdHvk=ޘx@eAkC鼵0q'I5;pk$4 o#p«QrgI͒idwcRң[[Ʀ%XW|lm=7a<~`ӽ~ͥcA%Ks49ѷ:BdlGypʔIi0h]2f| 6{P޲͔*?n1Fb:~7BtԜ8)q Sa-9 xe~ٞF!?&Pf|yewTD >m()DJY2nVsjiJ "+R8ѾvAV_ٝi"5ڌ-9O~, \? g 'zu#kc.5Xp -VzWgau%}s''dCZY_C)IG˅Zy10E{"GR^ ;26 >$sN{ +gi^/˾S {ez 3Z\45;q$dR+Zѧzk̮k;I`=Zp`Fix/ )A/j N$YE{#:og8~Y6W"/@eoC.::뛟jۼDWT3ekH9C u\5OӁ5:ˇu|/Ǖ!תGL@9u@gW-|`Kxu'^zLJԚ1['@]@-3Jy҈y>ݎyg}ꣶpōP-2KvB㛳>QJr~~wW./_lSx@P>~$:eJykE7-Qip16;kIQ&̰u\`["lG< Ն_9H,k;goٻ`> LЗ8۳>ך%ۡ ç:j $MuTI65OKPXqi~I,\g5ƫB|bAu޽pS% *J@ΕQ{13ᓌ#^'U,q'Bb@ĩitqQ쵠g}(+F%ݞ21Ρ,~%ʁTH>[IJ8Du0G6@ M@AH߫)LgB =F R]LLZ U!+? EիOY]lθ,{ţMtncU5SSR&Wm;5E,WbgSgt7]z5{ }5hJX?H,ʜ`*ln23*)Q)~Wf@%K|ΫʈgkWέ9G+eWU%R^Dw"o锎2o"8EQLb}P'U4W̺w(uLIpWui6Sy(9Yu ϕoCpr{e54A}Τ E2ok.Zŭ[ÃUߒa㬰*8#v' ?&T(fyM0Gru|P>@`4D:*QMk=$FQsIe(Q3w0Y{F-B#w?6Ыwocl=1 86 q9s.C_0K+(sPPHtGlkoFBsZrծg8l/j ݳPrP֡h Qm*uYhbL%&TסӼ:B=6G1N8;)a_YaX\BSw7? iU`P$q[hjZ8Sbu1~",Iv;?9Z8ACrBSF]eqFĢhG%e,?jC]ÁTtd'z<+& KnϤ|@kkMÀd}^.Mk%-Pщ #K78e=.[aq6Cz{Z_+_w^#>{|}{6\ J0=^1iWxF)\=c"ԭ9bk6\gmRz.~-"r":l6uaX?h.ep̦kii$ֲ3,I Lj'\?P6ٰW ΤD,9< K?[~痔_!P2ZYvG$!D:`XZGD H4Hi{9FqÔ8g( NZV UAU9uԔ٘z5:ԡ_e]5ȺSV*E/ErW" ro׿vL6Uce\yF9kށ}KKL5L6m+%9"!4˂S[*!"JfSyeg.v]QأGǝ–`B4~] ]Kf?WBfK_u'uMeCHVGoaKn<YjןQqQ*h|3\䡴)OiK~&eGдR/(3%vlգ'ckѮFW [TH:^$?}XI^+K`Q%?U]I#W,һΈ mN0QNv g#CyX¢ɣ3V|ˊZ1Omy:8e-;^.Dˌcv_K^olL=q (` O+Aj\S8zS(E0J)bWc`jX0+ brOf-da*9Zdķh\E~nRaҤ?Z}g )Bn Љ|xr#^K(-~N ik  w…>:sdb$KUL*ڥ4- v\iu|yB[h>f)V4g$k/la6i:%Ы~SJHggaxx`5R#)&o ܵzHy¬Wh`vW#nl}fM~oV=aPq s>B=m54cb,#Yk ^{eYVǰ~7MIETVۮ"D; /(̢@e)2̑ dw}]3:ܝJ[[$rcleaQ0']S]KTaVSc:H3 +3HyJL5c`2Lw,)A5{aSݤQ8Z,F͚s&-ѯK>YtØFg6*p d+ endstream endobj 62 0 obj<>stream xRiTSGUZ[IAT,ML #FQPyxD6T.иQK nEP RKzzJz:gݹsp91<9F.a$A| ( !5 4N3PʀP*Y W&}Y\BLB~/k!P(Q:j 1  ߡP4YB!p d` =)5 |_˜A)=c x I$4&A5K0dN`0F3$>5?Vg!$)b054n*hTDpab8JjT8$N|fEQ<@3 :֤=P (!|2DfZ%:,PN$XPBM,1 N`q,$lL2@MRw @z}?5Ic:Gx"1#Lb$y*f1'@U=^jIB#TlHekKB.w7X}2?U.Ny^::;So&gȱ;cQu%,R7{6t&*|?%䰣7ڗ\Kl`:X%Bp׎K>s!fi>Fs3ӨnJh[W:+F6]ru~3{;c^x2B눶zOiԠX73N1ۡ17M@x15xjm qz]cR]l*vp<ޟAӧ͏rwT;#Cvyxwy^Dîrєmu6L XpxJ`5O≜ձ&{k\x2m F=lV7.gmEyYM$zB3EQroy=ԇ{rf,臂ȅ zZ{ +\wotkZٷ(fG8uZi[ը5[Od-I*Kt&\)YV^x+GOvS zS 9(pD2:Ə5н''jitwBGo|Hfi݄`叻qsf]][~j'ϵ^D|Ɉ-]ѸP87wƻ ]NGGFn{\ݶĒymA}ݖvӶz9pp/h{B@(EZJejW endstream endobj 63 0 obj<>stream xU\\qww!;4и[ݝ n O{$~[U{W֮MM,bfosafga)YؐŜ. {;qc j`ppp!Q<@.:1&DlN Sc;%jo xDll*= P:܀f,H3 hCbKHw܀N`)XV4͑Xk&7;_*6ll {[W@ dS5)@=*bl2%A@3%%0eyiƿ_cJ ;5O5_qytXO֒37ف`dn 0q>@vf@bg~. :ڻLl;`51v'`u0v]~G pX-=,vCE`o; `u1vzv{lbcV93r`YgҲc`U;П"|Jc (X;6:.?⯗[$> "" ,!M~8oTM ?Ω* \joH7sjC+O?;|6~o6f_?ށW;Y`)?leVv [9` ?~. Xk` z` ?4qF>z`Fiv GW8gcz4uu_7./as=HsAV)B|% &a E-뺦ۑ!mGj*ұ`ݟ#ڼ%Rg_܌ҽ D[}wFdzhp- ' FcYW;VM˗mX/p ?Bәٿ h/>=%W66\yQwq*̥HNZ&-ɸ/io&Yn'f}EҙIj1Ę)%3‘SV6Xl/MYLj<:Җ#=`(97J7K䬟0Xხ"sa:b87k_R#LPmf} [0:k֣!9)G&8]S`,!U 9![7ߕZ<(vD'R!~)8ZBC!D$ C\ː/ڱ#Iw͙?+#~Ul?I"N0uWzUm":}U~{{!*P^%{@k^!;ٞ1s yFSS'#RBb_S8AJ0=^Z.]ryGXcP:YTvF E#:S-0>שy_yA6;lM ںʛ2Z5@̢CH[Si.n()ENI쥀?m̬ن!j +G6GBc*t9sXdgAEkVWvj˨mtDt}/l/ B787Ҩ=u/p˥`>:v{˲5,K99ӛ}V Fe|`%Ӻ'j-:+ P6KṀs䤍rIwgX`nd8C= {LDxw?y#5ý2FmVx T>Pg{T)8@jɮ4I6:gHy\ }J/;c%4Ggq3)G'O>) _߱H$Y F p|Ѕ>am8U[s h,kVng&^J}<=?Y%ჵ5E!at\9L鉚t]d!]>ofstvn-mASL̐"m 31Sul]ݥq4nHb{l9j j~ *q"no/%e ĘEREE2B?xn9 F+nnb1p>[fmF,)O@+h3ݰcxX8DO,F!]RXQ"Bઘa ]Š%Ev3A  `~ {XwllR)f:IA=_c"|3؄<~I?C19vݭeRH,N+5@*/SP.pJYX&&ua~CLNX$J88I aW]3Z|vҹ4Sxr7LH{/I<4 $=~:JY/G.5*>\oZAYz-}W]^xW kA.ȈD(-=DeNMI6+̼dEX5dJX<ȀR$")?@hWE@.eRu6i^kVLQ9n< V Vrڑ)Gt#+eZS+jzX>6"8r4lBsVH{CnT||0 ?1 4??}5okhD2KB)͒I^s/MGWO/Q/Һ.+}jF K)cFOhSZs>bAssYKXKHS_8NP1X+tT(}M^fS*|=T4NRyqQS?ٯޒQr!cuǭ-w[8lv$FlX*Tf)|:ŻJQ=D)OqrMwd97r=B'Kw!jӨ8 8MDZwVTΖ/9+&v Km6ƚɯV|U61qR͸"Lz,U'H@{wu\Q!u"0HhW}Yvlؼ 'M,[H;G"Aqq*>b:)f(֛[-i[u!@cW*5wWRFL3$aφA'ϊǭ0 w?#?Xl -ZkCI5O!CMd-g5)ۿrY?N~,Fu!씧-"b}zD I4J/P&c}rpFgLT>WZǥ%Iyh|.J z*@h,<1HWAqCoՊ&',2$5֞nmk \?!N^B F 9LՖQjT6BkOzH&vt=c#N>١:ȷ]4n ;O uv6%qOczt2'~ޯjMCHt=l'|:C_WMFxu}iHm ;âTl+Lz;}ANqu)e5kȧW6+5jRj<.RUL׵vUb? \vY|4x>.>5hRL40Im-r4hOH:Y-0=46uT&`iiR|DF.&?R__K;.b7`T< #?sžۈUJ3/N{ 33p{n34cZaO_ou ٱkDk (`vA$Mx*domxgz_a:Mf,DNB5s2sUAH,?AB*C,gT.x'P(>APȻ#y U@V-*eq ߛJQs_0ӮeXendj)-[r[vV*- ݨg~gFq KJǼi,%Gw&53UҺB-<XR)CQ` )iψRMs4ɑzqOjÄ9MB[SήMa?O/2|SCk@#+5=jQK0-0+~]F9#EU6{mgBU c_衝S0/0#n5eV]n,$H"Mb?xP)V.ٳø͵KgndϨpI!#4r`٩52[u3ÌxvSУSekQl76D9X0=p7m-_ݥԓ {[qQY8 8{0/{!'J i¦.^GpيlO[N\G'TnFtE4qі#s]q~53av~蒀O'eEjc=?IW< ORY=e.*EVP@iR5Dzs| ^Ϡ'qOkם++Ĉp S=]C'$FI넶2k%J4J/cm=eid$K^ǠhDžȥOERˀ|P=n\2/"-2|"cV5MQ(ɇW(?EUբe#y2 xӰJD}is3H as􃨙3q l#lTM 3˴*?8#_뗭&Ѹ>R-ԈHn-{~z! TJ0HsI6gkNL9a aܵQ}zё#[xyjiRNcb=("zŽ_Vvօ9(MEtRh˸ރ#ߌk#[H<{=3:-IKIu.oE.0^}Veer^n)_r.0߲ 4]ԋxmY}15jXNnu48&_GU-xJ79I$ʐq[N񯓎&mYd]{W*_BaR=QUK6ޅKB&|9sqъ6IWvI= /c3_ڱEG. 4+!')5 /VϻɽYĈV*ut`1'`2^f;v#^K.42`tJ¬k_cMqL.H3^[Fk{@L]LLv*Ds+X%*N[G ;J*v/T[uty`|S|"pbiP]8@II(sw5JeK4 N) .Dh`(CAJk(Taƈ\VazIIEpZӊV\{huH1g֪&-a#~ zkzk%goXj# ?hlXrUfe7GEY |MBF4?qR}[ L#Be7c=d&%l+1Ք&<8}bܙQ>WL=Ȁpf3f.xծuh0 ?$; J_:h1PN݉95}.섥ə|:-3bfzAUT5NRqPĠyyoE1D ρEOv4hYzY2A|Я͐6d߾f&h D6;e+%i$Dh+Z|pb@ ]kI+S7i3n^!_W~Q[齞V͡#F7k'fZNA*]]mv 8Eq)yP0B(#-K`&m5VH 23;m{.LvzP]=IG '1.qLze(>t۸ODxD%=mAM$DAM.A:葨Xۣq2衲M{7$a<]v_mz6 'ã2ʜwVX>T0 v1iӫětk(hR5ﴶg5\ϣŋga^ aq],~.K$(o|YT=HPZۍ0"?+0KcMOΔ7y}M88Yp0JZHxZD'bv]⹄P!ķ;X岖 :@uL{Fo7Ԃ&WLkQS)8Y5v1l)agr1RE9^S6PHGZի􌣬p!)M}uή=~ۄN`WB$, ԕZS["z] M'Ȩuɕn@Tp8?|Y(fHU R=̌Ӵ&^ yD;aeOpNwKrWvW u zmGv@[:a+ҁ^kuU~'ot_%$: Uj%_2do #4`ΧByZ +TnIG5fcKt>{yyi'0EVۇJSeÖu̅-30p6:!}RFSYX*Dsga 9_1~YN6?"St.o py 9Ο3> .{\񔺙9B\pWDr젨>QF]m=fx@G(A]ԙTj/.hP \y)݉IHGΤd7V0S t ^+w!Gwت1 p-GTm73B#,*zvh  Ri._cbl?IIYBl/wFt&ZOvo)~#};? x+]}\d0xeټL^E~/ 8ȇWN`lqo楗=ny_4E@K.1d-=ŁIK7bWSgJW7rZ܀ϒscbv?e_bM^ȁMS K>+-? C{ri@Wvo('*Os" 1~7wT^X_7"|[tXgO/O_[O(Cl]q3XXMx)m,Vw!'9{W-(E%5`: xAjZݏXɂ)}3RXF7z:S#UN{-iY "qΓl'*V1[UG tЃMb _7YֶG- z&5j+F/m>"\nvJl@PE1mijwn5z89r/L>aup+e7fLS6%juZ.)C^>N:H:/,ڬU19)84ߨmwSݎrOxM)ZFMtҝ $K^Uwe}Ā :5\]c:tiFQ)H54\iL} f{E<@LKq1_umSӷZ㽤IaT4o2$0wz#̙z<}fTV}^MhKw$G? hkKmKXX}!2V)s{5BYEs.u f?%@ Ҟ#weDLhiY숚+7Ζ$}Fi2Qxjp4xt*QX]*_g8/FlSh2n'so5^A~l 2(z-V{صBۏA-F}: ?\ᢴ_s'>`H\}]r*9xP&,]JM7u=;R[Bjt eA]q2$ѱEtnŸIYyl{}to)ӳ,k2͡T We=B(iV mT>V r34"قp/d{ mMH>O+=y3Of?R]ZS뾛k8RѻOQQm ?d@% ۂOڝ{ IT DeD$qM/ iTA+^wl/se_2ƣEC$ɇ7w zW}vx&~it;yKr5TYNuum„g9 }-wsႹtIqj=n!_K؏xY{}Gc!Uw,cxZ+UcuZƿ_ #L2DF_? Κv %웶Ae~:P6B2Xz{=a kw+Uݞ!' 7B7C_Ü>Qu{F_q8q3~W*f8SªBrrna*4zM9dErDHU^9^M Gwqe*VG4,x/Sv|޲ ODS5Z>Y endstream endobj 64 0 obj<>stream xRkTTUf2By@P  h8]cgLCZf H헧Iwb"\b@pBNMqPL j),&T <}`ŌBP38+paxl#Dj9>4=/c J 7qG7]9dF VF8{-ey۝gEvӻͻ8J_ܝ7F5뺋>qE8=5Xםuη ʿ󸩧45$G5_o Ê_c3Vi6Wo_6leMv|R>+/tmז& '۱B%)jUȼRc0ol;ͦd 6-ZfLޖ/v# #޽,5" J۽PMr|lq2 *E;Co 8%̻( =\nkJ|?n:`:o[?ŨU/:epD!44Z5wj׼+V!{#*y74$q_ƏZf.}a w5ӕ?mݸ939"[f\ ,/[}jRRh֪2J/f-g*Ӊ8dR<8rdvpoz.Iȩqq/W+lv✳^ߌW*\lJGv/]8?$jcKs.4Xdngw>.mZݛfù. /i? DL[|iզXwQ}FTbRm>W~}(2`yBjύ,+U-QL3Ö O]Nu3jX;t+#IM#,_6XٞtgֶT- Nڸnь=OqG.7{g݋wɷy&t0LWn=2pLXuϫJvfdZ Ǿ_fJ~E~67`4|CcR_`%m=жmObށKY'N8V[4[JЄԿ$TyCkiX2=kC3O<0?pc1!]Ze8j>"vkJUK!.ېU9O;uA hV\:r,2p'O!H\ros]k endstream endobj 65 0 obj<>stream xZms8:7=ER3;IIlAi[[r%i@Yqs)$,`d,X(G1 51uYc3LZ!`pDB."$$ ÐR)"8@:&IAydH8g2L*};K"$y"=W=!Z$ nܳdjٿO.{_j*⡴a*6-((K$[i ǢPn B-F)nLA,0K s.4):!_Id\vuT/y [ Z-# >d겵 Mi1XLa1 %o٭ Z?3d0ul_ȊA _n\kժ4Z(eZzWH=˫1/)0SJa<&n/DC@#6 ~た+BxowmҧǫVبkXG_07Wvᯔ+ j0X6C`up; 96Xն5>uۮQgs}mcGOUG W* )wn/k 0J7+mxU Xc5uеl z߾s?;dhYG;ŝj@_aqL;2шabA'|rіrA\auyG5,s? Fbh*@nV<).1uhaIhF9ĠZ` 6qO# |i!vZ~C2.v:w09Kᦍ_,7Y`(7 z{GNbU YOw`Ib^wr)#:xFnkƀݬwxA߶O =Rt4"OuDFxm$.'}1Gz[ gE${HG[{+{N :gvu6Q>7W^tQ[ue'g\m3Eh]y%-.F!{ЕTBԻm-M2DX'߽b&kk2yr*SڕE8 F3lԏ a:Èt{az$3{q؜-Fu$> ~GNxMDY>^}r1OPh2tغ3G͛9% -)A, qB]^q$isDUfuC? Ng.3ujM4!k'j {fƯhklF]A]U4lǪF,I&SV5JUi Qe I( J9(6ost$Z@E(W;@*$ kuOQ.&5/i:Ա.>( JtI)Z7{gCg|oU]wE3Sy䢺9参3[rW*쾷%wX[y˛y_Ƿwb?//lV/ki}pztyt`>ʧͽO7P<;ܧH{VJS KW{7>ъS_~p%R>6zWc'O^C>o#+H  endstream endobj 66 0 obj<>stream xڔn1 EEeђ`J E$ yXv?,V22)3w%, aDXQĒL#T1bKU؟5RcRłHAB y&Vkn'‰`|Bq5Ϭ3̶ =VCxw{S%_X5 hю%%D;Dh-[[R%ڿo D}#v,#vì#vl#v\G5p"pe8b7(4b7(enP*u-#Cmġ^;?=Ṗ^fu/jњan€i&ڋe&V&4b&ZubjWuZ,SR>1T}͠ifO۸lA\1lOJ'6 51 ޳6@:2=Q\,ؕV@!&>-XW 8 '4FJ/nM5S-ٴȎ{X3\ۘFme1=!l# endstream endobj 67 0 obj<>stream endstream endobj 68 0 obj<>stream xڔPN059y"V*&. :rU{;8eg= PGHd9p>BXZ gm[Oa Ϭv+4e^ff)M Sk-9D:T{M=y2ޫzSl1#%1qc:CleiZuVhuxYњwL:piMِ9<` endstream endobj 69 0 obj<>/W[1 3 1]/Type/XRef/Index[0 164]>>stream xbb&FFƳ L s@D2EY"{j?ٗjH`9`>E)Le"EK#H*=x"jx5 p,{Ibn$wNgfFc=I^"E Hwze%"|@&KٗՃ̾DrN|S&c68H0N2ŧ<xp$㝡Z'd x2 endstream endobj startxref 116 %%EOF R.oo/inst/CITATION0000644000176200001440000000256013327450457013216 0ustar liggesuserscitHeader("Please cite R.oo/R.methodsS3 as"); citEntry( # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # BibTeX entry: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - entry="InProceedings", author = "Henrik Bengtsson", title = "The {R.oo} package - Object-Oriented Programming with References Using Standard {R} Code", booktitle = "Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003)", year = "2003", editor = "Kurt Hornik and Friedrich Leisch and Achim Zeileis", address = "Vienna, Austria", month = "March", issn = "1609-395X", url = "https://www.r-project.org/conferences/DSC-2003/Proceedings/Bengtsson.pdf", howpublished = "https://www.r-project.org/conferences/DSC-2003/Proceedings/", # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Plain-text citation: # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - textVersion = paste(sep="", "Bengtsson, H. ", "The R.oo package - Object-Oriented Programming with References Using Standard R Code, ", "Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), ", "ISSN 1609-395X, ", "Hornik, K.; Leisch, F. & Zeileis, A. (ed.), ", "2003" ) ); R.oo/inst/WORDLIST0000644000176200001440000000121513621315423013235 0ustar liggesusersAchim AppVeyor attachLocally BasicObject classinfo clearCache clearLookupCache CMD conditionCall conditionMessage conveniency cut'n'paste DSC finalizer Finalizer Friedrich getCall getCalls getEnvironment getFieldModifier getFieldModifiers getFields getInstantiationTime getLastException getMessage getStackTrace getStaticInstance getWhen hasField hashcode hashCode hashcoded Hornik HOWTOCITE http instantiation InternalErrorException Leisch macOS msg MyClass nonStructure objectSize oo PkgA POSIXct POSIXt pre Pre printStackTrace RCC RccViolationException RData Rdoc RdocException reentrant rethrows Rethrows simpleError subclasses th UseMethod Zeileis