Enrollment 28.2.0
Loading...
Searching...
No Matches
ModalitiesICSTemplate.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include "enrollment/Export.h"
22#include <vector>
23
24namespace inno
25{
26 extern "C"
27 {
28 using inno_ICSTemplateBuilder = void (*)(void*, const inno_Template&, ErrorCallbacks);
29 INNO_ENROLLMENT_API void inno_local_DeserializeModalitiesICSTemplate(const unsigned char* serializedData,
30 size_t serializedDataSize,
31 inno_ICSTemplateBuilder printFactory,
32 void* printContainer,
33 inno_ICSTemplateBuilder faceFactory,
34 void* faceContainer,
35 inno_ICSTemplateBuilder irisFactory,
36 void* irisContainer,
37 ErrorCallbacks errorCallbacks);
38 }
42 */
43 class ModalitiesICSTemplate : public Serializable
44 {
45 public:
49 */
50 [[nodiscard]] std::vector<std::shared_ptr<FaceTemplate>> GetFaceTemplates() const
51 {
52 return fs;
53 }
57 */
58 [[nodiscard]] std::vector<std::shared_ptr<IrisTemplate>> GetIrisTemplates() const
59 {
60 return is;
61 }
65 */
66 [[nodiscard]] std::vector<std::shared_ptr<ICSTemplate>> GetICSTemplates() const
67 {
68 return ps;
69 }
73 */
74 [[nodiscard]] std::vector<uint8_t> GetModalitiesICSTemplateData() const
75 {
76 auto ft = inno_Template::FromTemplates(fs);
77 auto it = inno_Template::FromTemplates(is);
78 auto pt = inno_Template::FromTemplates(ps);
79
80 std::vector<uint8_t> userRecord;
81 auto userRecordAllocator = +[](void* container, size_t length) -> uint8_t*
82 {
83 // It is "safe" cast because we forward pointer to vector created in "user cpp space"
84 // (the space where this header is compiled) and the "own cpp space" (out compiled shared library)
85 // wil provide it back for us to the same "user cpp space". We have all spaces under control.
86 // It is used to do not have unecessary copy data from "own cpp space" into "user cpp space".
87 std::vector<uint8_t>& vec = *static_cast<std::vector<uint8_t>*>(container);
88 vec.resize(length);
89 return vec.data();
90 };
91
92 auto log = GlobalLogger::Get();
93 exec->CreateUserRecord(log,
94 pt.data(),
95 pt.size(),
96 ft.data(),
97 ft.size(),
98 it.data(),
99 it.size(),
100 userRecordAllocator,
101 &userRecord,
102 ThrowOnError{});
103 return userRecord;
104 }
105
111 */
112 explicit ModalitiesICSTemplate(std::vector<uint8_t> data)
113 : ModalitiesICSTemplate(std::move(data), GlobalMultiModalityExecutor::Get())
114 {
115 }
121 */
122 explicit ModalitiesICSTemplate(std::vector<uint8_t> data, std::shared_ptr<MultiModalityExecutor> executor)
123 : exec(std::move(executor))
124 {
125 auto printBuilder = +[](void* container, const inno_Template& tmpl, ErrorCallbacks err) -> void
126 {
127 ForwardExceptionToCallbacks(err,
128 [&]()
129 {
130 auto* printContainer =
131 static_cast<std::vector<std::shared_ptr<ICSTemplate>>*>(container);
132 printContainer->push_back(inno_Template::ToICSTemplate(tmpl));
133 });
134 };
135 auto faceBuilder = +[](void* container, const inno_Template& tmpl, ErrorCallbacks err) -> void
136 {
137 ForwardExceptionToCallbacks(err,
138 [&]()
139 {
140 auto* faceContainer =
141 static_cast<std::vector<std::shared_ptr<FaceTemplate>>*>(container);
142 faceContainer->push_back(inno_Template::ToFaceTemplate(tmpl));
143 });
144 };
145 auto irisBuilder = +[](void* container, const inno_Template& tmpl, ErrorCallbacks err) -> void
146 {
147 ForwardExceptionToCallbacks(err,
148 [&]()
149 {
150 auto* irisContainer =
151 static_cast<std::vector<std::shared_ptr<IrisTemplate>>*>(container);
152 irisContainer->push_back(inno_Template::ToIrisTemplate(tmpl));
153 });
154 };
155
156 inno_local_DeserializeModalitiesICSTemplate(
157 data.data(), data.size(), printBuilder, &ps, faceBuilder, &fs, irisBuilder, &is, ThrowOnError{});
158 }
159
166 */
167 ModalitiesICSTemplate(std::vector<std::shared_ptr<ICSTemplate>> icsTemplates,
168 std::vector<std::shared_ptr<FaceTemplate>> faceTemplates,
169 std::vector<std::shared_ptr<IrisTemplate>> irisTemplates)
170 : ModalitiesICSTemplate(std::move(icsTemplates),
171 std::move(faceTemplates),
172 std::move(irisTemplates),
174 {
175 }
176
183 */
184 ModalitiesICSTemplate(std::vector<std::shared_ptr<ICSTemplate>> icsTemplates,
185 std::vector<std::shared_ptr<FaceTemplate>> faceTemplates,
186 std::vector<std::shared_ptr<IrisTemplate>> irisTemplates,
187 std::shared_ptr<MultiModalityExecutor> executor)
188 : exec(std::move(executor))
189 , ps(std::move(icsTemplates))
190 , fs(std::move(faceTemplates))
191 , is(std::move(irisTemplates))
192 {
193 }
195 void WriteTo(Writer& w) const override
196 {
198 }
199
202 ModalitiesICSTemplate& operator=(const ModalitiesICSTemplate&) = default;
203 ModalitiesICSTemplate& operator=(ModalitiesICSTemplate&&) = default;
204 ModalitiesICSTemplate() = default;
205 virtual ~ModalitiesICSTemplate() = default;
206 bool operator==(const ModalitiesICSTemplate& right) const
207 {
208 return GetModalitiesICSTemplateData() == right.GetModalitiesICSTemplateData();
209 }
210 bool operator!=(const ModalitiesICSTemplate& right) const
211 {
212 return !((*this) == right);
213 }
214
215 private:
216 std::shared_ptr<MultiModalityExecutor> exec;
217 std::vector<std::shared_ptr<ICSTemplate>> ps;
218 std::vector<std::shared_ptr<FaceTemplate>> fs;
219 std::vector<std::shared_ptr<IrisTemplate>> is;
220 };
221} // namespace inno
static std::shared_ptr< Logger > Get()
Provides current logger.
Definition Logger.h:281
Holds instance of MultiModalityExecutor.
Definition MultiModalityExecutor.h:434
Applicant template in ICS format used for biometric operations.
Definition ModalitiesICSTemplate.h:43
ModalitiesICSTemplate(std::vector< uint8_t > data)
Create ModalitiesICSTemplate object It uses default executor.
Definition ModalitiesICSTemplate.h:111
std::vector< uint8_t > GetModalitiesICSTemplateData() const
It provides ICS template data.
Definition ModalitiesICSTemplate.h:73
ModalitiesICSTemplate(std::vector< uint8_t > data, std::shared_ptr< MultiModalityExecutor > executor)
Create ModalitiesICSTemplate object.
Definition ModalitiesICSTemplate.h:121
std::vector< std::shared_ptr< FaceTemplate > > GetFaceTemplates() const
Provides FaceTemplate objects.
Definition ModalitiesICSTemplate.h:49
ModalitiesICSTemplate(std::vector< std::shared_ptr< ICSTemplate > > icsTemplates, std::vector< std::shared_ptr< FaceTemplate > > faceTemplates, std::vector< std::shared_ptr< IrisTemplate > > irisTemplates, std::shared_ptr< MultiModalityExecutor > executor)
Create ModalitiesICSTemplate object.
Definition ModalitiesICSTemplate.h:183
ModalitiesICSTemplate(std::vector< std::shared_ptr< ICSTemplate > > icsTemplates, std::vector< std::shared_ptr< FaceTemplate > > faceTemplates, std::vector< std::shared_ptr< IrisTemplate > > irisTemplates)
Create ModalitiesICSTemplate object It uses default executor.
Definition ModalitiesICSTemplate.h:166
std::vector< std::shared_ptr< ICSTemplate > > GetICSTemplates() const
Provides PrintTemplate objects.
Definition ModalitiesICSTemplate.h:65
std::vector< std::shared_ptr< IrisTemplate > > GetIrisTemplates() const
Provides IrisTemplate objects.
Definition ModalitiesICSTemplate.h:57
void WriteTo(Writer &w) const override
Write itself into writer.
Definition ModalitiesICSTemplate.h:194
Provides interface for serialization of all classes.
Definition Writer.h:164
void WriteArray(const char *name, const std::vector< uint8_t > &value)
Serialize bytes from vector.
Definition Writer.h:233