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()9 standalone_service_registry::standalone_service_registry() :
10     m_service_instances()
11 {
12 
13 }
14 
~standalone_service_registry()15 standalone_service_registry::~standalone_service_registry()
16 {
17 
18 }
19 
instance()20 standalone_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)26 void 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)40 standalone_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)54 standalone_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) const68 bool 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 }