Loading...
Searching...
No Matches
by::instance Class Reference

Base class for all managed instances in memlite system. More...

#include <instance.hpp>

Inheritance diagram for by::instance:
by::typeProvidable by::clonable by::stela by::nulStela by::valStela by::verStela

Classes

class  vault
 

Public Member Functions

 instance (id newId)
 
 instance (const me &rhs)
 
meoperator= (const me &rhs)=default
 
voidoperator new (size_t sz) noexcept
 
void operator delete (void *pt, size_t sz) noexcept
 
virtual id getId () const
 
virtual nbool isHeap () const
 Checks if this instance is allocated on the heap.
 
const lifegetBindTag () const
 Returns a pointer to the associated life object for reference counting.
 
- Public Member Functions inherited from by::typeProvidable
nbool operator== (const me &rhs) const
 
nbool operator!= (const me &rhs) const
 
virtual const typegetType () const =0
 
nbool isSub (const type &it) const
 
nbool isSub (const type *it) const BY_SIDE_FUNC(isSub)
 
nbool isSub (const me &it) const
 
nbool isSub (const me *it) const BY_SIDE_FUNC(isSub)
 
nbool isSuper (const type &it) const
 
nbool isSuper (const type *it) const BY_SIDE_FUNC(isSuper)
 
nbool isSuper (const me &it) const
 
nbool isSuper (const me *it) const BY_SIDE_FUNC(isSuper)
 
template<typename T >
nint isSub () const
 
template<typename T >
nint isSuper () const
 
template<typename T >
Tcast ()
 
template<typename T >
const Tcast () const BY_CONST_FUNC(cast< T >()) virtual void *cast(const type &to)
 Safe cast to target type using type hierarchy information.
 
const voidcast (const type &to) const BY_CONST_FUNC(cast(to)) void *cast(const type *it) BY_SIDE_FUNC(cast)
 
- Public Member Functions inherited from by::clonable
virtual meclone () const =0
 
virtual mecloneDeep () const
 
virtual void onCloneDeep (const me &from)
 

Static Public Member Functions

static vaultgetVault ()
 

Protected Member Functions

nbool _setId (id new1)
 

Static Protected Member Functions

static instancer_getMgr ()
 

Friends

class memliteInternal
 

Detailed Description

Base class for all managed instances in memlite system.

Objects managed by memlite's custom memory pool must inherit from instance. Only by inheriting instance can objects be referenced through binder as weak or strong pointers. Instances are identified through id.

ID assignment algorithm

The weakest part of memlite is this id assignment algorithm. Instance creation is done by instancer which manages the memory pool. The instancer pushes the instance address and id to a map in the internal vault class. When instance::operator new() is called, it internally accesses vault using code like map[this] to retrieve the id value.

While seemingly fine, it has many disadvantages:

  1. Accessing vault during constructor phase is not truly safe
  2. It's slow

The initial implementation used only vector managed as FIFO, but when creating other objects inside a constructor, the order of added ids no longer follows FIFO, causing ID混乱 issues.

Remarks
Performance importance The most frequent operation in byeol is creating objects while assigning ids or performing binding. This needs improvement when time permits.

Member Function Documentation

◆ getBindTag()

const life * by::instance::getBindTag ( ) const

Returns a pointer to the associated life object for reference counting.

The life object is used by binder and watcher to manage the instance's lifecycle.

Returns
A const pointer to the life object, or nullptr if none is associated.

◆ isHeap()

virtual nbool by::instance::isHeap ( ) const
virtual

Checks if this instance is allocated on the heap.

Returns
true if the instance is heap-allocated, false otherwise.
Note
This check is typically related to how the instance is managed by the memory pool.

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