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

Manages the open resources for a process. More...

#include <resource.h>

Public Member Functions

 ~ResourceManager ()
 Destructor for ResourceManager, closes all open resources.
 
common::Map< uint64_t, Resource * > resources ()
 Get the resources currently open.
 
uint64_t open_resource (resource_type_t type, const string &name, size_t flags)
 Registers a resource with the resource manager and then opens it.
 
void close_resource (uint64_t handle, size_t flags)
 Un registers the resource and then closes it.
 
Resourceget_resource (uint64_t handle)
 Gets a resource based on the handle id.
 
Resourceget_resource (const string &name)
 Finds a resource by name.
 

Detailed Description

Manages the open resources for a process.

Definition at line 141 of file resource.h.

Constructor & Destructor Documentation

◆ ~ResourceManager()

ResourceManager::~ResourceManager ( )

Destructor for ResourceManager, closes all open resources.

Definition at line 261 of file resource.cpp.

261 {
262
263 // Collect all resources (as closing will break iteration)
264 common::Vector<uint64_t> handles;
265 for (const auto& kv : m_resources)
266 handles.push_back(kv.first);
267
268 // Close the resources
269 for (auto h : handles)
270 close_resource(h, 0);
271
272}
void close_resource(uint64_t handle, size_t flags)
Un registers the resource and then closes it.
Definition resource.cpp:313

References close_resource().

Member Function Documentation

◆ close_resource()

void ResourceManager::close_resource ( uint64_t  handle,
size_t  flags 
)

Un registers the resource and then closes it.

Parameters
handleThe handle number of the resource
flagsFlags to pass to the closing

Definition at line 313 of file resource.cpp.

313 {
314
315 auto it = m_resources.find(handle);
316 if(it == m_resources.end())
317 return;
318
319 // Remove it
320 Resource* resource = it->second;
321 m_resources.erase(handle);
322
323 // Close it
324 GlobalResourceRegistry::get_registry(resource->type()) -> close_resource(resource, flags);
325}
static BaseResourceRegistry * get_registry(resource_type_t type)
Gets a registry of a type.
Definition resource.cpp:217
Represents a generic resource that can be opened, closed, read from and written to.
Definition resource.h:29
resource_type_t type()
Gets the type of this resource.
Definition resource.cpp:88

References close_resource(), MaxOS::processes::GlobalResourceRegistry::get_registry(), and MaxOS::processes::Resource::type().

Referenced by close_resource(), and ~ResourceManager().

◆ get_resource() [1/2]

Resource * ResourceManager::get_resource ( const string name)

Finds a resource by name.

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

Definition at line 347 of file resource.cpp.

347 {
348
349 for(const auto& resource : m_resources)
350 if(resource.second->name() == name)
351 return resource.second;
352
353 return nullptr;
354}

◆ get_resource() [2/2]

Resource * ResourceManager::get_resource ( uint64_t  handle)

Gets a resource based on the handle id.

Parameters
handleThe handle number of the resource
Returns
The resource or nullptr if not found

Definition at line 333 of file resource.cpp.

333 {
334
335 if(m_resources.find(handle) == m_resources.end())
336 return nullptr;
337
338 return m_resources[handle];
339}

Referenced by open_resource().

◆ open_resource()

uint64_t ResourceManager::open_resource ( resource_type_t  type,
const string name,
size_t  flags 
)

Registers a resource with the resource manager and then opens it.

Parameters
typeThe type of resource to register
nameThe name of the resource
flagsPer resource flags for opening
Returns
The handle id of the resource or 0 if failed

Definition at line 292 of file resource.cpp.

292 {
293
294 // Get the resource
295 auto resource = GlobalResourceRegistry::get_registry(type) -> get_resource(name);
296 if(!resource)
297 return 0;
298
299 // Store it
300 m_resources.insert(m_next_handle, resource);
301
302 // Open it
303 resource->open(flags);
304 return m_next_handle++;
305}
Resource * get_resource(uint64_t handle)
Gets a resource based on the handle id.
Definition resource.cpp:333

References MaxOS::processes::GlobalResourceRegistry::get_registry(), and get_resource().

◆ resources()

common::Map< uint64_t, Resource * > ResourceManager::resources ( )

Get the resources currently open.

Returns
The resources

Definition at line 279 of file resource.cpp.

279 {
280
281 return m_resources;
282}

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