R/with.R

Defines functions within.Message with.Message generateActiveBindings

Documented in within.Message with.Message

# S3 dispatch does not work for some reason

generateActiveBindings <- function(data){
	env <- new.env( parent = environment() )
	xp <- data@pointer
	names <- .Call( "Message__fieldNames", xp, PACKAGE = "RProtoBuf" )

	if( !is.null(names) && length(names) ){
		lapply( names, function(x ){
  		  makeActiveBinding( x, function(v){
  		    if( missing(v) ){
  		    	# get
  		      .Call( "getMessageField", xp, x, PACKAGE="RProtoBuf" )
  		    } else {
  		    	# set
  		      .Call( "setMessageField", xp, x, v, PACKAGE="RProtoBuf")
  		    }
  		  }, env )
  		} )
  	}
  	env
}

with.Message <- function( data, expr, ...){
	envir <- generateActiveBindings(data)
  	eval( substitute( expr ), envir = envir )
}

within.Message <- function(data, expr, ... ){
	envir <- generateActiveBindings(data)
  	eval( substitute( expr ), envir = envir )
  	data
}

Try the RProtoBuf package in your browser

Any scripts or data that you put into this service are public.

RProtoBuf documentation built on Nov. 3, 2022, 9:06 a.m.