SST 16.0.0
Structural Simulation Toolkit
pymodel_comp.h
1// -*- c++ -*-
2
3// Copyright 2009-2026 NTESS. Under the terms
4// of Contract DE-NA0003525 with NTESS, the U.S.
5// Government retains certain rights in this software.
6//
7// Copyright (c) 2009-2026, NTESS
8// All rights reserved.
9//
10// This file is part of the SST software package. For license
11// information, see the LICENSE file in the top level directory of the
12// distribution.
13
14#ifndef SST_CORE_MODEL_PYTHON_PYMODEL_COMP_H
15#define SST_CORE_MODEL_PYTHON_PYMODEL_COMP_H
16
17#include "sst/core/sst_types.h"
18#include "sst/core/warnmacros.h"
19
20DISABLE_WARN_DEPRECATED_REGISTER
21#include <Python.h>
22#include <cstdint>
23REENABLE_WARNING
24
25#include <string>
26
27namespace SST {
28class ConfigComponent;
29}
30
31extern "C" {
32
33struct ComponentPy_t;
34struct PyComponent;
35
36struct ComponentHolder
37{
38 ComponentPy_t* pobj;
39 SST::ComponentId_t id;
40
41 ComponentHolder(ComponentPy_t* pobj, SST::ComponentId_t id) :
42 pobj(pobj),
43 id(id)
44 {}
45 virtual ~ComponentHolder() {}
46 virtual SST::ConfigComponent* getComp();
47 virtual int compare(ComponentHolder* other);
48 virtual std::string getName();
49 SST::ComponentId_t getID();
50 SST::ConfigComponent* getSubComp(const std::string& name, int slot_num);
51
52 ComponentHolder(const ComponentHolder&) = delete;
53 ComponentHolder& operator=(const ComponentHolder&) = delete;
54};
55
56struct PyComponent : ComponentHolder
57{
58 uint16_t subCompId;
59
60 PyComponent(ComponentPy_t* pobj, SST::ComponentId_t id) :
61 ComponentHolder(pobj, id),
62 subCompId(0)
63 {}
64 ~PyComponent() override = default;
65};
66
67struct PySubComponent : ComponentHolder
68{
69 PySubComponent(ComponentPy_t* pobj, SST::ComponentId_t id) :
70 ComponentHolder(pobj, id)
71 {}
72 ~PySubComponent() override = default;
73 int getSlot();
74};
75
77{
78 PyObject_HEAD ComponentHolder* obj;
79};
80
81extern PyTypeObject PyModel_ComponentType;
82extern PyTypeObject PyModel_SubComponentType;
83
84static inline SST::ConfigComponent*
85getComp(PyObject* pobj)
86{
87 SST::ConfigComponent* c = ((ComponentPy_t*)pobj)->obj->getComp();
88 if ( c == nullptr ) {
89 PyErr_SetString(PyExc_RuntimeError, "Failed to find ConfigComponent");
90 }
91 return c;
92}
93
94} /* extern C */
95
96#endif // SST_CORE_MODEL_PYTHON_PYMODEL_COMP_H
Represents the configuration of a generic component.
Definition configComponent.h:83
Definition pymodel_comp.h:37
Definition pymodel_comp.h:77
Definition pymodel_comp.h:57