reactor-c
C Runtime for Lingua Franca
Loading...
Searching...
No Matches
python_action.c File Reference
#include <Python.h>
#include "python_action.h"

Functions

void py_action_capsule_dealloc (generic_action_capsule_struct *self)
 
PyObject * py_action_capsule_new (PyTypeObject *type, PyObject *args, PyObject *kwds)
 
int py_action_capsule_init (generic_action_capsule_struct *self, PyObject *args, PyObject *kwds)
 

Variables

PyTypeObject py_action_capsule_t
 
PyMemberDef py_action_capsule_members []
 
PyMethodDef py_action_capsule_methods []
 

Detailed Description

Author
Soroush Bateni (sorou.nosp@m.sh@u.nosp@m.tdall.nosp@m.as.e.nosp@m.du) @autohr Hou Seng Wong (house.nosp@m.ngw@.nosp@m.berke.nosp@m.ley..nosp@m.edu)

LICENSE

Copyright (c) 2022, The University of California at Berkeley. Copyright (c) 2021, The University of Texas at Dallas.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

DESCRIPTION

Implementation of functions defined in

See also
pythontarget.h

Function Documentation

◆ py_action_capsule_dealloc()

void py_action_capsule_dealloc ( generic_action_capsule_struct * self)

Called when an action in Python is deallocated (generally called by the Python grabage collector).

Parameters
self

◆ py_action_capsule_init()

int py_action_capsule_init ( generic_action_capsule_struct * self,
PyObject * args,
PyObject * kwds )

Initialize the action capsule "self" with the given optional values for action (void *), value (PyObject*), and is_present (bool). If any of these arguments are missing, the default values are assigned.

See also
port_intance_new
Parameters
selfThe port_instance PyObject that follows the generic_port_instance_struct* internal structure
argsThe optional arguments that are:
  • action: The void * pointer to a C action instance struct
  • value: value of the port
  • is_present: An indication of whether or not the value of the port is present at the current logical time.
  • num_destination: Used for reference-keeping inside the C runtime

◆ py_action_capsule_new()

PyObject * py_action_capsule_new ( PyTypeObject * type,
PyObject * args,
PyObject * kwds )

Called when an action in Python is to be created. Note that LinguaFranca.action_capsule follows the same structure as the

See also
generic_action_capsule_struct.

To initialize the action_capsule, this function first calls the tp_alloc method of type py_action_capsule_t and then assign default values of NULL, NULL, 0 to the members of the generic_action_capsule_struct.

Variable Documentation

◆ py_action_capsule_members

PyMemberDef py_action_capsule_members[]
Initial value:
= {
{"action", T_OBJECT, offsetof(generic_action_capsule_struct, action), 0, "The pointer to the C action struct"},
{"value", T_OBJECT, offsetof(generic_action_capsule_struct, value), 0, "Value of the action"},
{"is_present", T_BOOL, offsetof(generic_action_capsule_struct, is_present), 0,
"Check that shows if action is present"},
{NULL}
}
Definition python_action.h:85

◆ py_action_capsule_methods

PyMethodDef py_action_capsule_methods[]
Initial value:
= {
{"schedule", (PyCFunction)py_schedule, METH_VARARGS, "Schedule the action with the given offset"},
{NULL}
}
PyObject * py_schedule(PyObject *self, PyObject *args)
Definition pythontarget.c:77

The function members of action capsule

◆ py_action_capsule_t

PyTypeObject py_action_capsule_t
Initial value:
= {
PyVarObject_HEAD_INIT(NULL, 0).tp_name = "LinguaFranca.action_instance",
.tp_doc = "action_instance object",
.tp_basicsize = sizeof(generic_action_capsule_struct),
.tp_itemsize = 0,
.tp_flags = Py_TPFLAGS_DEFAULT,
.tp_init = (initproc)py_action_capsule_init,
.tp_dealloc = (destructor)py_action_capsule_dealloc,
}
PyMemberDef py_action_capsule_members[]
Definition python_action.c:115
PyObject * py_action_capsule_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Definition python_action.c:60
PyMethodDef py_action_capsule_methods[]
Definition python_action.c:126
int py_action_capsule_init(generic_action_capsule_struct *self, PyObject *args, PyObject *kwds)
Definition python_action.c:86
void py_action_capsule_dealloc(generic_action_capsule_struct *self)
Definition python_action.c:46