Max OS 0.3
Loading...
Searching...
No Matches
MaxOS::processes::BaseResourceRegistry Class Reference

Manages the creation, retention and destruction of resources of a certain type. Should be subclassed for each resource type. More...

#include <resource.h>

Inheritance diagram for MaxOS::processes::BaseResourceRegistry:
MaxOS::processes::ResourceRegistry< MaxOS::processes::SharedMemory > MaxOS::processes::ResourceRegistry< MaxOS::processes::SharedMessageEndpoint > MaxOS::filesystem::VFSResourceRegistry MaxOS::processes::ResourceRegistry< Type >

Public Member Functions

 BaseResourceRegistry (resource_type_t type)
 Constructs a new BaseResourceRegistry object and registers it globally.
 
 ~BaseResourceRegistry ()
 Destructor for BaseResourceRegistry, removes it from the global list.
 
resource_type_t type ()
 Gets the type of resources this registry handles.
 
virtual Resourceget_resource (const string &name)
 Gets a resource from the registry by name.
 
virtual bool register_resource (Resource *resource)
 Registers a resource in the registry.
 
virtual void close_resource (Resource *resource, size_t flags)
 Close the resource provided, if it exists in this registry.
 
virtual Resourcecreate_resource (const string &name, size_t flags)
 Try to create a new resource with the specified name, will fail if the name is in use.
 

Protected Attributes

common::Map< string, Resource * > m_resources
 The map of resource names to resource instances.
 
common::Map< string, uint64_t > m_resource_uses
 The map of resource names to how many processes are using them.
 
resource_type_t m_type
 The resource type that this registry manages.
 

Detailed Description

Manages the creation, retention and destruction of resources of a certain type. Should be subclassed for each resource type.

Definition at line 54 of file resource.h.

Constructor & Destructor Documentation

◆ BaseResourceRegistry()

BaseResourceRegistry::BaseResourceRegistry ( resource_type_t  type)
explicit

Constructs a new BaseResourceRegistry object and registers it globally.

Parameters
typeThe type of resources this registry will handle

Definition at line 98 of file resource.cpp.

99: m_type(type)
100{
102}
resource_type_t m_type
The resource type that this registry manages.
Definition resource.h:60
resource_type_t type()
Gets the type of resources this registry handles.
Definition resource.cpp:117
static void add_registry(resource_type_t type, BaseResourceRegistry *registry)
Adds a registry to the global list if there is not already one for that type.
Definition resource.cpp:232

References MaxOS::processes::GlobalResourceRegistry::add_registry(), and type().

◆ ~BaseResourceRegistry()

BaseResourceRegistry::~BaseResourceRegistry ( )

Destructor for BaseResourceRegistry, removes it from the global list.

Definition at line 107 of file resource.cpp.

107 {
108
110}
static void remove_registry(BaseResourceRegistry *registry)
Adds a registry to the global list if there is not already one for that type.
Definition resource.cpp:246

References MaxOS::processes::GlobalResourceRegistry::remove_registry().

Member Function Documentation

◆ close_resource()

void BaseResourceRegistry::close_resource ( Resource resource,
size_t  flags 
)
virtual

Close the resource provided, if it exists in this registry.

Parameters
resourceThe resource to close
flagsOptional flags to pass (unused by default but registry type specific)

Definition at line 164 of file resource.cpp.

164 {
165
166 // Resource isn't stored in this registry
167 if(m_resources.find(resource->name()) == m_resources.end())
168 return;
169
170 m_resource_uses[resource->name()]--;
171
172 // Don't close a resource that has more processes using it
173 if(m_resource_uses[resource->name()])
174 return;
175
176 // Can safely close the resource
177 resource->close(flags);
178 m_resources.erase(resource->name());
179 m_resource_uses.erase(resource->name());
180 delete resource;
181}
void erase(Key)
Removes an element from the map.
Definition map.h:274
common::Map< string, uint64_t > m_resource_uses
The map of resource names to how many processes are using them.
Definition resource.h:58
common::Map< string, Resource * > m_resources
The map of resource names to resource instances.
Definition resource.h:57
virtual void close(size_t flags)
Closes the resource.
Definition resource.cpp:45
string name()
Gets the name of this resource.
Definition resource.cpp:79

References MaxOS::processes::Resource::close(), MaxOS::common::Map< Key, Value >::erase(), m_resource_uses, m_resources, and MaxOS::processes::Resource::name().

◆ create_resource()

Resource * BaseResourceRegistry::create_resource ( const string name,
size_t  flags 
)
virtual

Try to create a new resource with the specified name, will fail if the name is in use.

Parameters
nameThe name of the resource to create
flagsOptional flags to pass (unused by default but registry type specific)
Returns
The resource created or nullptr if failed to create the resource

Reimplemented in MaxOS::filesystem::VFSResourceRegistry, MaxOS::processes::ResourceRegistry< Type >, MaxOS::processes::ResourceRegistry< MaxOS::processes::SharedMemory >, and MaxOS::processes::ResourceRegistry< MaxOS::processes::SharedMessageEndpoint >.

Definition at line 190 of file resource.cpp.

190 {
191 return nullptr;
192}

◆ get_resource()

Resource * BaseResourceRegistry::get_resource ( const string name)
virtual

Gets a resource from the registry by name.

Parameters
nameThe name of the resource to find
Returns
The resource or nullptr if the resource was not found

Reimplemented in MaxOS::filesystem::VFSResourceRegistry.

Definition at line 128 of file resource.cpp.

128 {
129
130 // Resource isn't stored in this registry
131 if(m_resources.find(name) == m_resources.end())
132 return nullptr;
133
134 // Increment the use count of the resource and return it
135 m_resource_uses[name]++;
136 return m_resources[name];
137
138}

References m_resource_uses, and m_resources.

Referenced by MaxOS::filesystem::VFSResourceRegistry::create_resource(), and MaxOS::filesystem::VFSResourceRegistry::get_resource().

◆ register_resource()

bool BaseResourceRegistry::register_resource ( Resource resource)
virtual

Registers a resource in the registry.

Parameters
resourceThe resource to store
Returns
True if the register was successful, false if not

Definition at line 146 of file resource.cpp.

146 {
147
148 // Resource name is already stored in this registry
149 if(m_resources.find(resource->name()) != m_resources.end())
150 return false;
151
152 m_resources.insert(resource->name(), resource);
153 m_resource_uses.insert(resource->name(), 0);
154 return true;
155}
void insert(Key, Value)
Updates the value of an element, or adds a new element if it does not exist.
Definition map.h:253

References MaxOS::common::Map< Key, Value >::insert(), m_resource_uses, m_resources, and MaxOS::processes::Resource::name().

Referenced by MaxOS::processes::ResourceRegistry< Type >::create_resource().

◆ type()

resource_type_t BaseResourceRegistry::type ( )

Gets the type of resources this registry handles.

Returns
The type

Definition at line 117 of file resource.cpp.

117 {
118
119 return m_type;
120}

References m_type.

Referenced by BaseResourceRegistry(), MaxOS::processes::ResourceRegistry< Type >::create_resource(), and MaxOS::processes::GlobalResourceRegistry::remove_registry().

Member Data Documentation

◆ m_resource_uses

common::Map<string, uint64_t> MaxOS::processes::BaseResourceRegistry::m_resource_uses
protected

The map of resource names to how many processes are using them.

Definition at line 58 of file resource.h.

Referenced by close_resource(), get_resource(), and register_resource().

◆ m_resources

common::Map<string, Resource*> MaxOS::processes::BaseResourceRegistry::m_resources
protected

The map of resource names to resource instances.

Definition at line 57 of file resource.h.

Referenced by close_resource(), get_resource(), and register_resource().

◆ m_type

resource_type_t MaxOS::processes::BaseResourceRegistry::m_type
protected

The resource type that this registry manages.

Definition at line 60 of file resource.h.

Referenced by type().


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