1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <meta/interface/builtin_objects.h>
16 #include <meta/interface/intf_future.h>
17 #include <meta/interface/intf_object_registry.h>
18 #include <meta/interface/intf_task_queue.h>
19
20 #include "attachment_container.h"
21 #include "base_object.h"
22 #include "connector.h"
23 #include "container/object_container.h"
24 #include "container/object_flat_container.h"
25 #include "container_observer.h"
26 #include "engine/engine_input_property_manager.h"
27 #include "functions.h"
28 #include "loaders/class_content_loader.h"
29 #include "loaders/csv_string_resource_loader.h"
30 #include "loaders/json_content_loader.h"
31 #include "meta_object.h"
32 #include "model/composite_object_provider.h"
33 #include "model/container_data_model.h"
34 #include "model/content_loader_object_provider.h"
35 #include "model/instantiating_object_provider.h"
36 #include "number.h"
37 #include "object.h"
38 #include "object_context.h"
39 #include "object_hierarchy_observer.h"
40 #include "property/bind.h"
41 #include "proxy_object.h"
42 #include "serialization/backend/debug_output.h"
43 #include "serialization/backend/json_input.h"
44 #include "serialization/backend/json_output.h"
45 #include "serialization/exporter.h"
46 #include "serialization/importer.h"
47 #include "serialization/json_exporter.h"
48 #include "serialization/json_importer.h"
49 #include "serialization/ser_nodes.h"
50 #include "startable_object_controller.h"
51
52 META_BEGIN_NAMESPACE()
53
54 IObjectFactory::Ptr GetManualClockFactory();
55 IObjectFactory::Ptr GetSystemClockFactory();
56
57 namespace Internal {
58
59 IObjectFactory::Ptr GetPollingTaskQueueFactory();
60 IObjectFactory::Ptr GetThreadedTaskQueueFactory();
61 IObjectFactory::Ptr GetPromiseFactory();
62 IObjectFactory::Ptr GetContentObjectFactory();
63
64 static constexpr ObjectTypeInfo OBJECTS[] = { MetaObject::OBJECT_INFO, Object::OBJECT_INFO,
65 ObjectContainer::OBJECT_INFO, ObjectFlatContainer::OBJECT_INFO, ProxyObject::OBJECT_INFO,
66 ContainerObserver::OBJECT_INFO, SettableFunction::OBJECT_INFO, PropertyFunction::OBJECT_INFO,
67 ObjectContext::OBJECT_INFO, AttachmentContainer::OBJECT_INFO, ContainerDataModel::OBJECT_INFO,
68 CompositeObjectProvider::OBJECT_INFO, InstantiatingObjectProvider::OBJECT_INFO,
69 ContentLoaderObjectProvider::OBJECT_INFO, CsvStringResourceLoader::OBJECT_INFO, ClassContentLoader::OBJECT_INFO,
70 ObjectHierarchyObserver::OBJECT_INFO, StartableObjectController::OBJECT_INFO, Internal::Number::OBJECT_INFO,
71 Connector::OBJECT_INFO, JsonContentLoader::OBJECT_INFO, EngineValueManager::OBJECT_INFO,
72 EngineInputPropertyManager::OBJECT_INFO };
73
RegisterBuiltInObjects(IObjectRegistry & registry)74 void RegisterBuiltInObjects(IObjectRegistry& registry)
75 {
76 registry.RegisterObjectType<META_NS::BaseObject>();
77 for (auto& t : OBJECTS) {
78 registry.RegisterObjectType(t.GetFactory());
79 }
80 registry.RegisterObjectType(GetManualClockFactory());
81 registry.RegisterObjectType(GetSystemClockFactory());
82 registry.RegisterObjectType(GetPollingTaskQueueFactory());
83 registry.RegisterObjectType(GetThreadedTaskQueueFactory());
84 registry.RegisterObjectType(GetPromiseFactory());
85 registry.RegisterObjectType(GetContentObjectFactory());
86 registry.RegisterObjectType<Serialization::Exporter>();
87 registry.RegisterObjectType<Serialization::JsonExporter>();
88 registry.RegisterObjectType<Serialization::Importer>();
89 registry.RegisterObjectType<Serialization::JsonImporter>();
90 registry.RegisterObjectType<Serialization::DebugOutput>();
91 registry.RegisterObjectType<Serialization::JsonOutput>();
92 registry.RegisterObjectType<Serialization::JsonInput>();
93 registry.RegisterObjectType<Serialization::NilNode>();
94 registry.RegisterObjectType<Serialization::MapNode>();
95 registry.RegisterObjectType<Serialization::ArrayNode>();
96 registry.RegisterObjectType<Serialization::ObjectNode>();
97 registry.RegisterObjectType<Serialization::RootNode>();
98 registry.RegisterObjectType<Serialization::BoolNode>();
99 registry.RegisterObjectType<Serialization::IntNode>();
100 registry.RegisterObjectType<Serialization::UIntNode>();
101 registry.RegisterObjectType<Serialization::DoubleNode>();
102 registry.RegisterObjectType<Serialization::StringNode>();
103 registry.RegisterObjectType<Serialization::RefNode>();
104 registry.RegisterObjectType<Bind>();
105 }
106
UnRegisterBuiltInObjects(IObjectRegistry & registry)107 void UnRegisterBuiltInObjects(IObjectRegistry& registry)
108 {
109 registry.UnregisterObjectType<Bind>();
110 registry.UnregisterObjectType<Serialization::NilNode>();
111 registry.UnregisterObjectType<Serialization::MapNode>();
112 registry.UnregisterObjectType<Serialization::ArrayNode>();
113 registry.UnregisterObjectType<Serialization::ObjectNode>();
114 registry.UnregisterObjectType<Serialization::RootNode>();
115 registry.UnregisterObjectType<Serialization::BoolNode>();
116 registry.UnregisterObjectType<Serialization::IntNode>();
117 registry.UnregisterObjectType<Serialization::UIntNode>();
118 registry.UnregisterObjectType<Serialization::DoubleNode>();
119 registry.UnregisterObjectType<Serialization::StringNode>();
120 registry.UnregisterObjectType<Serialization::RefNode>();
121 registry.UnregisterObjectType<Serialization::NilNode>();
122 registry.UnregisterObjectType<Serialization::JsonInput>();
123 registry.UnregisterObjectType<Serialization::JsonOutput>();
124 registry.UnregisterObjectType<Serialization::DebugOutput>();
125 registry.UnregisterObjectType<Serialization::JsonImporter>();
126 registry.UnregisterObjectType<Serialization::Importer>();
127 registry.UnregisterObjectType<Serialization::JsonExporter>();
128 registry.UnregisterObjectType<Serialization::Exporter>();
129 registry.UnregisterObjectType(GetContentObjectFactory());
130 registry.UnregisterObjectType(GetManualClockFactory());
131 registry.UnregisterObjectType(GetSystemClockFactory());
132 registry.UnregisterObjectType(GetPollingTaskQueueFactory());
133 registry.UnregisterObjectType(GetThreadedTaskQueueFactory());
134 registry.UnregisterObjectType(GetPromiseFactory());
135 for (auto& t : OBJECTS) {
136 registry.UnregisterObjectType(t.GetFactory());
137 }
138 registry.UnregisterObjectType<META_NS::BaseObject>();
139 }
140 } // namespace Internal
141 META_END_NAMESPACE()
142