Max OS 0.3
Loading...
Searching...
No Matches
MaxOS::processes::resources::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.
 
Resource * get_resource (uint64_t handle)
 Gets a resource based on the handle id.
 
Resource * get_resource (const string &name)
 Finds a resource by name.
 

Detailed Description

Manages the open resources for a process.

Definition at line 121 of file resource.h.

Constructor & Destructor Documentation

◆ ~ResourceManager()

ResourceManager::~ResourceManager ( )

Destructor for ResourceManager, closes all open resources.

Definition at line 205 of file resource.cpp.

205 {
206
207 // Collect all resources (as closing will break iteration)
208 common::Vector<uint64_t> handles;
209 for (const auto& kv : m_resources)
210 handles.push_back(kv.first);
211
212 // Close the resources
213 for (auto h : handles)
214 close_resource(h, 0);
215
216}
void close_resource(uint64_t handle, size_t flags)
Un registers the resource and then closes it.
Definition resource.cpp:262

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 262 of file resource.cpp.

262 {
263
264 auto it = m_resources.find(handle);
265 if(it == m_resources.end())
266 return;
267
268 // Remove it
269 Resource* resource = it->second;
270 m_resources.erase(handle);
271
272 // Close it
273 GlobalResourceRegistry::get_registry(resource->type()) -> close_resource(resource, flags);
274}
static BaseResourceRegistry * get_registry(resource_type_t type)
Gets a registry of a type.
Definition resource.cpp:161
KPI::Resource Resource
Alias to make the libsyscore Resource accessible here.
Definition resource.h:26

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

Referenced by close_resource(), MaxOS::memory::VirtualMemoryManager::free(), MaxOS::system::SyscallManager::syscall_resource_close(), 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 296 of file resource.cpp.

296 {
297
298 for(const auto& resource : m_resources)
299 if(resource.second->name() == name)
300 return resource.second;
301
302 return nullptr;
303}

◆ 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 282 of file resource.cpp.

282 {
283
284 if(m_resources.find(handle) == m_resources.end())
285 return nullptr;
286
287 return m_resources[handle];
288}

Referenced by MaxOS::memory::VirtualMemoryManager::load_shared_memory(), open_resource(), MaxOS::system::SyscallManager::syscall_resource_read(), and MaxOS::system::SyscallManager::syscall_resource_write().

◆ 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 236 of file resource.cpp.

236 {
237
238 // Make sure there is a registry of the requested type
239 auto registry = GlobalResourceRegistry::get_registry(type);
240 if(!registry)
241 return 0;
242
243 // Make sure the registry holds the requested resource
244 auto resource = registry -> get_resource(name);
245 if(!resource)
246 return 0;
247
248 // Store it
249 m_resources.insert(m_next_handle, resource);
250
251 // Open it
252 resource->open(flags);
253 return m_next_handle++;
254}
Resource * get_resource(uint64_t handle)
Gets a resource based on the handle id.
Definition resource.cpp:282

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

Referenced by MaxOS::system::SyscallManager::syscall_resource_open().

◆ resources()

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

Get the resources currently open.

Returns
The resources

Definition at line 223 of file resource.cpp.

223 {
224
225 return m_resources;
226}

Referenced by MaxOS::memory::VirtualMemoryManager::free(), and MaxOS::processes::resources::ProcessResource::read().


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