1 /* 2 * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include "standalone_service_registry.h" 8 standalone_service_registry()9standalone_service_registry::standalone_service_registry() : 10 m_service_instances() 11 { 12 13 } 14 ~standalone_service_registry()15standalone_service_registry::~standalone_service_registry() 16 { 17 18 } 19 instance()20standalone_service_registry *standalone_service_registry::instance() 21 { 22 static standalone_service_registry singleton_instance; 23 return &singleton_instance; 24 } 25 regsiter_service_instance(standalone_service_context * service_context)26void standalone_service_registry::regsiter_service_instance(standalone_service_context *service_context) 27 { 28 size_t index; 29 30 if (find_context_index(service_context->get_service_name().c_str(), &index)) { 31 32 m_service_instances[index] = service_context; 33 } 34 else { 35 36 m_service_instances.push_back(service_context); 37 } 38 } 39 deregsiter_service_instance(const char * sn)40standalone_service_context *standalone_service_registry::deregsiter_service_instance(const char *sn) 41 { 42 size_t index; 43 standalone_service_context *context = NULL; 44 45 if (find_context_index(sn, &index)) { 46 47 context = m_service_instances[index]; 48 m_service_instances.erase(m_service_instances.begin() + index); 49 } 50 51 return context; 52 } 53 query(const char * sn)54standalone_service_context *standalone_service_registry::query(const char *sn) 55 { 56 size_t index; 57 standalone_service_context *context = NULL; 58 59 if (find_context_index(sn, &index)) { 60 61 context = m_service_instances[index]; 62 context->init(); 63 } 64 65 return context; 66 } 67 find_context_index(const char * sn,size_t * index) const68bool standalone_service_registry::find_context_index(const char *sn, size_t *index) const 69 { 70 bool found = false; 71 72 for (size_t i = 0; !found && i < m_service_instances.size(); i++) { 73 74 if (m_service_instances[i]->get_service_name().compare(sn) == 0) { 75 76 *index = i; 77 found = true; 78 } 79 } 80 81 return found; 82 }