Ginkgo  Generated from pipelines/164546034 branch based on develop. Ginkgo version 1.2.0
A numerical linear algebra library targeting many-core architectures
Public Member Functions | List of all members
gko::PolymorphicObject Class Referenceabstract

A PolymorphicObject is the abstract base for all "heavy" objects in Ginkgo that behave polymorphically. More...

#include <ginkgo/core/base/polymorphic_object.hpp>

Collaboration diagram for gko::PolymorphicObject:
[legend]

Public Member Functions

PolymorphicObjectoperator= (const PolymorphicObject &)
 
std::unique_ptr< PolymorphicObjectcreate_default (std::shared_ptr< const Executor > exec) const
 Creates a new "default" object of the same dynamic type as this object. More...
 
std::unique_ptr< PolymorphicObjectcreate_default () const
 Creates a new "default" object of the same dynamic type as this object. More...
 
std::unique_ptr< PolymorphicObjectclone (std::shared_ptr< const Executor > exec) const
 Creates a clone of the object. More...
 
std::unique_ptr< PolymorphicObjectclone () const
 Creates a clone of the object. More...
 
PolymorphicObjectcopy_from (const PolymorphicObject *other)
 Copies another object into this object. More...
 
PolymorphicObjectcopy_from (std::unique_ptr< PolymorphicObject > other)
 Moves another object into this object. More...
 
PolymorphicObjectclear ()
 Transforms the object into its default state. More...
 
std::shared_ptr< const Executorget_executor () const noexcept
 Returns the Executor of the object. More...
 
- Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject >
void add_logger (std::shared_ptr< const Logger > logger) override
 Adds a new logger to the list of subscribed loggers. More...
 
void remove_logger (const Logger *logger) override
 Removes a logger from the list of subscribed loggers. More...
 

Detailed Description

A PolymorphicObject is the abstract base for all "heavy" objects in Ginkgo that behave polymorphically.

It defines the basic utilities (copying moving, cloning, clearing the objects) for all such objects. It takes into account that these objects are dynamically allocated, managed by smart pointers, and used polymorphically. Additionally, it assumes their data can be allocated on different executors, and that they can be copied between those executors.

Note
Most of the public methods of this class should not be overridden directly, and are thus not virtual. Instead, there are equivalent protected methods (ending in <method_name>_impl) that should be overriden instead. This allows polymorphic objects to implement default behavior around virtual methods (parameter checking, type casting).
See also
EnablePolymorphicObject if you wish to implement a concrete polymorphic object and have sensible defaults generated automatically. EnableAbstractPolymorphicObject if you wish to implement a new abstract polymorphic object, and have the return types of the methods updated to your type (instead of having them return PolymorphicObject).

Member Function Documentation

◆ clear()

PolymorphicObject* gko::PolymorphicObject::clear ( )
inline

Transforms the object into its default state.

Equivalent to this->copy_from(this->create_default()).

See also
clear_impl() when implementing this method
Returns
this

◆ clone() [1/2]

std::unique_ptr<PolymorphicObject> gko::PolymorphicObject::clone ( ) const
inline

Creates a clone of the object.

This is a shorthand for clone(std::shared_ptr<const Executor>) that uses the executor of this object to construct the new object.

Returns
A clone of the LinOp.

◆ clone() [2/2]

std::unique_ptr<PolymorphicObject> gko::PolymorphicObject::clone ( std::shared_ptr< const Executor exec) const
inline

Creates a clone of the object.

This is the polymorphic equivalent of the executor copy constructor decltype(*this)(exec, this).

Parameters
execthe executor where the clone will be created
Returns
A clone of the LinOp.

References create_default().

◆ copy_from() [1/2]

PolymorphicObject* gko::PolymorphicObject::copy_from ( const PolymorphicObject other)
inline

Copies another object into this object.

This is the polymorphic equivalent of the copy assignment operator.

See also
copy_from_impl(const PolymorphicObject *)
Parameters
otherthe object to copy
Returns
this

◆ copy_from() [2/2]

PolymorphicObject* gko::PolymorphicObject::copy_from ( std::unique_ptr< PolymorphicObject other)
inline

Moves another object into this object.

This is the polymorphic equivalent of the move assignment operator.

See also
copy_from_impl(std::unique_ptr<PolymorphicObject>)
Parameters
otherthe object to move from
Returns
this

◆ create_default() [1/2]

std::unique_ptr<PolymorphicObject> gko::PolymorphicObject::create_default ( ) const
inline

Creates a new "default" object of the same dynamic type as this object.

This is a shorthand for create_default(std::shared_ptr<const Executor>) that uses the executor of this object to construct the new object.

Returns
a polymorphic object of the same type as this

Referenced by clone().

◆ create_default() [2/2]

std::unique_ptr<PolymorphicObject> gko::PolymorphicObject::create_default ( std::shared_ptr< const Executor exec) const
inline

Creates a new "default" object of the same dynamic type as this object.

This is the polymorphic equivalent of the executor default constructor decltype(*this)(exec);.

Parameters
execthe executor where the object will be created
Returns
a polymorphic object of the same type as this

◆ get_executor()

std::shared_ptr<const Executor> gko::PolymorphicObject::get_executor ( ) const
inlinenoexcept

The documentation for this class was generated from the following file: