SST 16.0.0
Structural Simulation Toolkit
subcomponent.h
1// Copyright 2009-2026 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2026, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_SUBCOMPONENT_H
13#define SST_CORE_SUBCOMPONENT_H
14
15#include "sst/core/baseComponent.h"
16#include "sst/core/eli/elementinfo.h"
17#include "sst/core/module.h"
18#include "sst/core/warnmacros.h"
19
20namespace SST {
21
22/**
23 SubComponent is a class loadable through the factory which allows
24 dynamic functionality to be added to a Component. The
25 SubComponent API is nearly identical to the Component API and all
26 the calls are proxied to the parent Component.
27*/
28class SubComponent : public BaseComponent
29{
30
31public:
32 SST_ELI_DECLARE_BASE(SubComponent)
33 // declare extern to limit compile times
34 SST_ELI_DECLARE_CTOR_EXTERN(ComponentId_t)
35 // These categories will print in sst-info in the order they are
36 // listed here
37 SST_ELI_DECLARE_INFO_EXTERN(
46
47 explicit SubComponent(ComponentId_t id);
48
49 virtual ~SubComponent() {};
50
51 /** Used during the init phase. The method will be called each phase of initialization.
52 Initialization ends when no components have sent any data. */
53 virtual void init(unsigned int UNUSED(phase)) override {}
54 /** Called after all components have been constructed and initialization has
55 completed, but before simulation time has begun. */
56 virtual void setup() override {}
57 /** Called after simulation completes, but before objects are
58 destroyed. A good place to print out statistics. */
59 virtual void finish() override {}
60
61protected:
62 SubComponent() = default; // For serialization only
63 void serialize_order(SST::Core::Serialization::serializer& ser) override;
64
65 friend class Component;
66 ImplementSerializable(SST::SubComponent);
67};
68
69} // namespace SST
70
71// New way to register subcomponents. Must register an interface
72// (API) first, then you can register a subcomponent that implements
73// it
74#define SST_ELI_REGISTER_SUBCOMPONENT_API(cls, ...) \
75 SST_ELI_DECLARE_NEW_BASE(SST::SubComponent,::cls) \
76 SST_ELI_NEW_BASE_CTOR(SST::ComponentId_t,SST::Params&,##__VA_ARGS__)
77
78#define SST_ELI_REGISTER_SUBCOMPONENT_DERIVED_API(cls, base, ...) \
79 SST_ELI_DECLARE_NEW_BASE(::base,::cls) \
80 SST_ELI_NEW_BASE_CTOR(SST::ComponentId_t,SST::Params&,##__VA_ARGS__)
81
82#define SST_ELI_REGISTER_SUBCOMPONENT(cls, lib, name, version, desc, interface) \
83 SST_ELI_REGISTER_DERIVED(::interface,cls,lib,name,ELI_FORWARD_AS_ONE(version),desc) \
84 SST_ELI_INTERFACE_INFO(#interface)
85
86#endif // SST_CORE_SUBCOMPONENT_H
Main component object for the simulation.
Definition component.h:32
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:43
Definition attributeInfo.h:42
Definition checkpointableInfo.h:41
Definition interfaceInfo.h:22
Definition paramsInfo.h:41
Definition portsInfo.h:41
Definition profilePointInfo.h:41
Definition statsInfo.h:41
Definition subcompSlotInfo.h:41
SubComponent is a class loadable through the factory which allows dynamic functionality to be added t...
Definition subcomponent.h:29
virtual void setup() override
Called after all components have been constructed and initialization has completed,...
Definition subcomponent.h:56
virtual void finish() override
Called after simulation completes, but before objects are destroyed.
Definition subcomponent.h:59
virtual void init(unsigned int UNUSED(phase)) override
Used during the init phase.
Definition subcomponent.h:53