CallByRef

The pyTooling.CallByRef package contains auxiliary classes to implement call-by-reference emulation for function parameter handover. The callee gets enabled to return out-parameters for simple types like bool and int to the caller.

By implementing a wrapper-class CallByRefParam, any type’s value can be passed by-reference. In addition, standard types like int or bool can be handled by derived wrapper-classes.

Python Background

Python does not allow a user to distinguish between call-by-value and call-by-reference parameter passing. Python’s standard types are passed by-value to a function or method. Instances of a class are passed by-reference (pointer) to a function or method.

Inheritance diagram:

Inheritance diagram of pyTooling.CallByRef

Example

from pyTooling.CallByRef import CallByRefIntParam

# define a call-by-reference parameter for integer values
myInt = CallByRefIntParam(3)

# a function using a call-by-reference parameter
def func(param : CallByRefIntParam):
  param <<= param * 4

# call the function and pass the wrapper object
func(myInt)

print(myInt.value)

CallByRefParam

CallByRefParam implements a wrapper class for an arbitrary call-by-reference parameter that can be passed to a function or method.

The parameter can be initialized via the constructor. If no init-value was given, the init value will be None. The wrappers internal value can be updated by using the inplace shift-left operator <=.

In addition, operators = and != are also implemented for any call-by-reference wrapper. Calls to __repr__ and __str__ are passed to the internal value.

The internal value can be used via obj.value.

Type-Specific call-by-reference Classes

CallByRefBoolParam

The class CallByRefBoolParam implements call-by-ref behavior for the boolean type (bool).

Implemented operators:

  • Binary comparison operators: ==, !=

  • Type conversions: bool(), int()

CallByRefIntParam

The class CallByRefIntParam implements call-by-ref behavior for the integer type (int).

Implemented operators:

  • Unary operators: +, -, ~

  • Binary boolean operators: &, |, ^

  • Binary arithmetic operators: +, -, *, /, //, %, **

  • Binary comparison operators: ==, !=, <, <=, >, >=

  • Inplace boolean operators: &=, |=, ^=

  • Inplace arithmetic operators: +=, -=, *=, /=, //=, %=, **=

  • Type conversions: bool(), int()