ae2f_docs
MMap.auto.h
Go to the documentation of this file.
1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
3#ifndef ae2f_MMap_h
4#define ae2f_MMap_h
5
6#include <ae2f/Call.h>
7#undef __ae2f_MACRO_GENERATED
8#define __ae2f_MACRO_GENERATED 1
9#include <ae2f/Cast.h>
10#undef __ae2f_MACRO_GENERATED
11#define __ae2f_MACRO_GENERATED 1
12#include <ae2f/Float.h>
13#undef __ae2f_MACRO_GENERATED
14#define __ae2f_MACRO_GENERATED 1
15#include <ae2f/errGlob.h>
16#undef __ae2f_MACRO_GENERATED
17#define __ae2f_MACRO_GENERATED 1
18#include <ae2f/Cmp.h>
19#undef __ae2f_MACRO_GENERATED
20#define __ae2f_MACRO_GENERATED 1
21
22#include <ae2f/Pack/Beg.h>
23#undef __ae2f_MACRO_GENERATED
24#define __ae2f_MACRO_GENERATED 1
25#include <ae2f/Macro.h>
26#undef __ae2f_MACRO_GENERATED
27#define __ae2f_MACRO_GENERATED 1
28#include <ae2f/Guide.h>
29#undef __ae2f_MACRO_GENERATED
30#define __ae2f_MACRO_GENERATED 1
31
32#include <assert.h>
33#undef __ae2f_MACRO_GENERATED
34#define __ae2f_MACRO_GENERATED 1
35
36/** @brief
37 * Multilinear map, or tensor.
38 *
39 *
40 * */
41ae2f_structdef_v(struct, ae2f_mMMap, ae2f_mMMap)
42{
43 /** @brief aka dimension count */
44 size_t m_dim;
45};
46
47ae2f_structdef(struct, ae2f_MMap) {
48 ae2f_mMMap mmap;
49};
50
51ae2f_extern ae2f_SHAREDCALL
53 ae2f_mMMap* const mmap
54 , const size_t dim
55 , const size_t* const lens
56 , ae2f_err_t* const opt_ret_err
57 , size_t* const opt_ret_sz
58 ) noexcept;
59
60
61ae2f_extern ae2f_SHAREDCALL
63 const size_t dim,
64 const size_t* const lens,
65 ae2f_err_t* const opt_ret_err,
66 ae2f_FREE(free, ae2f_mMMapDel) ae2f_mMMap** const ret_mmap
67 ) noexcept;
68
69ae2f_extern ae2f_SHAREDCALL
71 const ae2f_mMMap* const mmap,
72 const size_t dim,
73 const size_t* const idxs,
74 size_t* const ret
75 );
76
77ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapSz(
78 const size_t dim, const size_t* const lens
79 , size_t* const ret);
80
81ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapDel(
82 ae2f_mMMap* mmap
83 );
84
86
87#define ae2f_mMMapInit __ae2f_mMMapInit
88#define ae2f_mMMapMk __ae2f_mMMapMk
89#define ae2f_mMMapDel __ae2f_mMMapDel
90#define ae2f_mMMapSz __ae2f_mMMapSz
91#define ae2f_mMMapFieldIdx __ae2f_mMMapFieldIdx
92
93#include <string.h>
94#undef __ae2f_MACRO_GENERATED
95#define __ae2f_MACRO_GENERATED 1
96#include <stdlib.h>
97#undef __ae2f_MACRO_GENERATED
98#define __ae2f_MACRO_GENERATED 1
99
100#endif /** Function declarations */
101
102
103/** @brief Length vector for every dimension index. */
104#define ae2f_mMMapDimLen(mmap, ...)
105 ae2f_reinterpret_cast(__VA_ARGS__ size_t*, ((mmap) + 1))
106
107/** @breif Memory field. Indexer needed. */
108#define ae2f_mMMapField(mmap, ...)
109 ae2f_reinterpret_cast(__VA_ARGS__ ae2f_float_t*, ae2f_mMMapDimLen(mmap, __VA_ARGS__) + (mmap)->m_dim)
110
111
112ae2f_structdef(struct, ae2f_mMMapSz_t) {
113 /** @brief output */
114 size_t m_ret;
115 size_t m_dim;
116};
117
118ae2f_structdef(struct, ae2f_mMMapFieldIdx_t) {
119 size_t m_ret;
120 size_t m_i;
121 size_t m_dim;
122
123 size_t m_L, m_I;
124};
125
126ae2f_structdef(struct, ae2f_mMMapInit_t) {
127 size_t m_i, m_ret;
128};
129
130ae2f_structdef(struct, ae2f_mMMapMk_t) {
131 ae2f_mMMap* m_ptr;
132 ae2f_mMMapInit_t m_initstack;
133};
134
135#include <ae2f/Pack/End.h>
136#undef __ae2f_MACRO_GENERATED
137#define __ae2f_MACRO_GENERATED 1
138
139#endif
140
141
142#ifndef ae2f_MMap_c
143
145#include <ae2f/MMap/MMap.h>
146#undef __ae2f_MACRO_GENERATED
147#define __ae2f_MACRO_GENERATED 1
148#endif
149
150#define ae2f_MMap_c
151
152
153#define __ae2f_mMMapSz_imp(
154 /** tparam */
155
156
157 /** param */
158 /* , ae2f_mMMapSz_t */ v_mapsz,
159 /* const size_t */ dim,
160 /* constsize_t* const */ lens \
161)\
162{
163 assert(dim);
164 assert(lens);
165
166 v_mapsz.m_ret = 1;
167 v_mapsz.m_dim = (dim);
168
169 while(v_mapsz.m_dim--) {
170 v_mapsz.m_ret *= (lens)[(v_mapsz).m_dim];
171 }
172
173 assert(v_mapsz.m_dim == -1);
174
175 v_mapsz.m_ret =
176 v_mapsz.m_ret * sizeof(ae2f_float_t)
177 + ((dim)) * sizeof(size_t)
178 + sizeof(ae2f_MMap);
179
180 \
181}
182
183#define __ae2f_mMMapSz(
184 /** tparam */
185
186
187 /** param */
188 /* , const size_t */ dim,
189 /* constsize_t* const */ lens,
190 /* size_t* const */ ret \
191)\
192{
193 unless(lens) {
194 assert(0 && "lens is not good");
195 (ret) && (*(ret) = -1);
196 } else {
197 ae2f_mMMapSz_t v_sz;
198 __ae2f_mMMapSz_imp(v_sz, dim, lens);
199 (ret) && (*(ret) = v_sz.m_ret);
200 } \
201}
202
203#if ae2f_WhenCXX(!)0
204/**
205 * @brief
206 * Calculates the memory length needed in bytes.
207 *
208 * @param dim
209 * Dimension, aka length of lens.
210 *
211 * @param lens
212 * Length vector.
213 *
214 * */
215constextendedfun size_t _ae2f_mMMapSz(
216 size_t dim,
217 const size_t* lens
218 ) noexcept
219{
220 if(!(lens)) {
221 return -1;
222 }
223
224 ae2f_mMMapSz_t v_sz;
225 __ae2f_mMMapSz_imp(v_sz, dim, lens);
226 return v_sz.m_ret;
227}
228
229#endif
230
231
232#define __ae2f_mMMapFieldIdx_imp(
233 /** tparam */
234
235
236 /** param */
237 /* , ae2f_mMMapFieldIdx_t */ v_fidx,
238 /* constae2f_mMMap* const */ mmap,
239 /* const size_t */ dim,
240 /* constsize_t* const */ idxs \
241)\
242{
243 assert((mmap) && "mmap is null");
244 assert((idxs));
245
246 v_fidx.m_L = 1;
247 v_fidx.m_dim = ae2f_CmpGetLs(dim, (mmap)->m_dim);
248 v_fidx.m_ret = 0;
249
250 for(v_fidx.m_i = 0; v_fidx.m_i < v_fidx.m_dim - 1 && v_fidx.m_L; v_fidx.m_i++) {
251 v_fidx.m_L = ae2f_mMMapDimLen(mmap)[v_fidx.m_dim - v_fidx.m_i - 1];
252 v_fidx.m_I = (idxs)[v_fidx.m_dim - 1 - v_fidx.m_i] % v_fidx.m_L;
253 v_fidx.m_ret += v_fidx.m_I;
254 v_fidx.m_ret *= v_fidx.m_L;
255 }
256
257 if(v_fidx.m_i < v_fidx.m_dim - 1)
258 {
259 assert(0 && "who are you");
260 v_fidx.m_ret = -1;
261 }
262
263 else {
264 v_fidx.m_ret += (idxs)[(dim) - 1 - v_fidx.m_i] % ae2f_mMMapDimLen(mmap)[
265 v_fidx.m_dim
266 - v_fidx.m_i
267 - 1
268 ];
269
270 v_fidx.m_dim = (mmap)->m_dim;
271
272 for(; v_fidx.m_i < v_fidx.m_dim - 1; v_fidx.m_i++) {
273 v_fidx.m_ret *= ae2f_mMMapDimLen(mmap)[v_fidx.m_dim - 1 - v_fidx.m_i];
274 }
275 } \
276}
277
278#define __ae2f_mMMapFieldIdx(
279 /** tparam */
280
281
282 /** param */
283 /* , constae2f_mMMap* const */ mmap,
284 /* const size_t */ dim,
285 /* constsize_t* const */ idxs,
286 /* size_t* const */ ret \
287)\
288{
289 unless(ret)
290 ;
291 unless((idxs) && (mmap)) {
292 assert(0 && "nullptr from __ae2f_mMMapFieldIdx");
293 *(ret) = -1;
294 }
295 else {
296 ae2f_mMMapFieldIdx_t v_idx;
297 __ae2f_mMMapFieldIdx_imp(v_idx, mmap, dim, idxs);
298 *(ret) = v_idx.m_ret;
299 } \
300}
301
302
303#if ae2f_WhenCXX(!)0
304
305// 1, 2, ..... n
306constextendedfun size_t _ae2f_mMMapFieldIdx(
307 const ae2f_mMMap* mmap,
308 size_t dim,
309 const size_t* idxs
310 ) noexcept
311{
312 if(!idxs) return -1;
313 if(!mmap) return -1;
314
315 ae2f_mMMapFieldIdx_t v_idx;
316 __ae2f_mMMapFieldIdx_imp(v_idx, mmap, dim, idxs);
317
318 return v_idx.m_ret; // / lens[i - 1];
319}
320
321#endif
322
323#define __ae2f_mMMapInit_imp(
324 /** tparam */
325
326
327 /** param */
328 /* , ae2f_mMMapInit_t */ v_init,
329 /* structae2f_mMMap* const */ mmap,
330 /* const size_t */ dim,
331 /* constsize_t* const */ lens \
332)\
333{
334 (mmap)->m_dim = (dim);
335 for(v_init.m_i = 0; v_init.m_i < (dim); v_init.m_i++)
336 ae2f_mMMapDimLen(mmap)[v_init.m_i] = (lens)[v_init.m_i];
337
338 memcpy(ae2f_mMMapDimLen(mmap), lens, (dim) * sizeof(size_t));
339 __ae2f_mMMapSz((dim), lens, &v_init.m_ret); \
340}
341
342#define __ae2f_mMMapInit(
343 /** tparam */
344
345
346 /** param */
347 /* , structae2f_mMMap* const */ mmap,
348 /* const size_t */ dim,
349 /* constsize_t* const */ lens,
350 /* ae2f_err_t* const */ ret_e,
351 /* size_t* const */ opt_sz \
352)\
353{
354 if((ret_e) && *(ret_e))
355 ;
356 else unless((mmap) && (lens))
357 (ret_e) && (*(ret_e) |= ae2f_errGlob_PTR_IS_NULL);
358 else {
359 ae2f_mMMapInit_t v_init;
360 __ae2f_mMMapInit_imp(v_init, mmap, dim, lens);
361 (opt_sz) && (*(opt_sz) = v_init.m_ret);
362 } \
363}
364
365#define __ae2f_mMMapMk_imp(
366 /** tparam */
367
368
369 /** param */
370 /* , ae2f_mMMapMk_t */ v_mk,
371 /* const size_t */ dim,
372 /* constsize_t* const */ lens \
373){
374 assert((lens) && "lens is null");
375 __ae2f_mMMapSz((dim), (lens), (&v_mk.m_initstack.m_ret));
376
377 assert((v_mk.m_initstack.m_ret != -1) && "Sz has failed.");
378 assert((v_mk.m_initstack.m_ret > sizeof(ae2f_mMMap)) && "Sz is fishy.");
379
380
381 if((v_mk.m_ptr = calloc(1, v_mk.m_initstack.m_ret))) {
382 __ae2f_mMMapInit_imp(v_mk.m_initstack, (v_mk.m_ptr), dim, lens);
383 } else {
384 assert(0 && "allocation has failed");
385 } \
386}
387
388#define __ae2f_mMMapMk(
389 /** tparam */
390
391
392 /** param */
393 /* , const size_t */ dim,
394 /* constsize_t* const */ lens,
395 /* ae2f_err_t* const */ opt_ret_err,
396 /* ae2f_mMMap** const */ ret_mmap \
397)\
398{
399 if(opt_ret_err && *(opt_ret_err));
400 else unless((lens) && (ret_mmap))
401 (opt_ret_err) && (*(opt_ret_err) |= ae2f_errGlob_PTR_IS_NULL);
402 else {
403 ae2f_mMMapMk_t v_mk;
404 __ae2f_mMMapMk_imp(v_mk, dim, lens);
405
406 assert(v_mk.m_ptr);
407 unless(v_mk.m_ptr) {
408 (opt_ret_err) && (*(opt_ret_err) |= ae2f_errGlob_ALLOC_FAILED);
409 }
410
411 *(ret_mmap) = v_mk.m_ptr;
412 } \
413}
414
415#define __ae2f_mMMapDel(
416 /** tparam */
417
418
419 /** param */
420 /* ,void* */ a \
421){
422 free(a); \
423}
424
425#endif
426
427#undef __ae2f_MACRO_GENERATED
428
429#define __ae2f_MACRO_GENERATED 0
#define ON
Definition cmake.hpp:5
#define ae2f_IS_SHARED
Is a library shared.
Definition Call.auto.h:12
#define ae2f_structdef(key, name)
Definition Cast.h:110
#define ae2f_structdef_v(key, name,...)
Definition Cast.h:105
#define ae2f_reinterpret_cast(t, v)
Definition Cast.h:52
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
#define ae2f_extern
Suggests the existence of external variable or function, in naming of C. [non-mangling].
Definition Cast.h:88
#define ae2f_CmpGetGt(a, b)
Definition Cmp.h:20
#define ae2f_CmpGetLs(a, b)
Definition Cmp.h:26
#define constexprmethod
Definition Constexpr.hpp:50
ae2f_eAnnCnnPool
Pooling type. See ae2f_AnnCnnPool.
Definition Conv.h:48
@ ae2f_eAnnCnnPool_MIDDLE
Middle. respect the output vector's value.
Definition Conv.h:65
@ ae2f_eAnnCnnPool_MAX
Max.
Definition Conv.h:51
@ ae2f_eAnnCnnPool_MIN
Min.
Definition Conv.h:54
@ ae2f_eAnnCnnPool_ADD
Add.
Definition Conv.h:57
@ ae2f_eAnnCnnPool_AVG
Average.
Definition Conv.h:60
ae2f_extern ae2f_SHAREDEXPORT ae2f_err_t ae2f_AnnCnnPool1d(const ae2f_float_t *inv, const size_t inc, ae2f_float_t *outv, size_t *opt_outc, const size_t window, const size_t stride, ae2f_eAnnCnnPool type) noexcept
Definition Conv.imp.c:124
ae2f_extern ae2f_SHAREDEXPORT ae2f_err_t ae2f_AnnCnnPool_imp(size_t dim, const ae2f_float_t *inv, const size_t *inc, size_t incc, ae2f_float_t *outv, size_t *opt_outc, size_t outcc, const size_t *window_opt, const size_t *stride_opt, ae2f_eAnnCnnPool type)
Definition Conv.imp.c:267
ae2f_extern ae2f_SHAREDEXPORT ae2f_err_t ae2f_AnnCnnPool(size_t dim, const ae2f_float_t *inv, const size_t *inc, size_t incc, ae2f_float_t *outv, size_t *opt_outc, size_t outcc, const size_t *window_opt, size_t windowcc, const size_t *stride_opt, ae2f_eAnnCnnPool type)
Definition Conv.imp.c:350
ae2f_SHAREDEXPORT ae2f_err_t ae2f_AnnCnnConv1d(const ae2f_float_t *infv, size_t infc, const ae2f_float_t *ingv, size_t ingc, ae2f_float_t *outv, size_t *opt_outc, size_t stride, size_t pad)
all vectors are suggested initiated as 0.
Definition Conv.imp.c:69
ae2f_SHAREDEXPORT ae2f_err_t ae2f_AnnCnnConv(size_t dim, const ae2f_float_t *infv, const size_t *infc, size_t infcc, const ae2f_float_t *ingv, const size_t *ingc, size_t ingcc, ae2f_float_t *outv, size_t *outc_opt, size_t outcc, const size_t *stride_opt, const size_t *pad_opt)
dim must be the dimension of mmaps, lengths of lists. This function is meant to be recursive....
Definition Conv.imp.c:210
#define ae2f_WhenC(...)
Appears when the current language is C++.
Definition Cxx.h:30
#define ae2f_WhenCXX(...)
Appears when the current language is C.
Definition Cxx.h:34
#define ae2f_NONE
Literally nothing.
Definition Cxx.h:13
#define ae2f_is_cxx
Definition Cxx.h:40
ae2f_float ae2f_float_t
Definition Float.h:38
int ae2f_CmpFunRet_t
A predefined returning data type for ae2f_fpCmp_t.
Definition Fun.h:19
#define ae2f_FREE(...)
Use this marker to show the desired functions to effectively free the resources.
Definition Guide.h:33
#define ae2f_LangVer_C
Definition LangVer.auto.h:2
#define __ae2f_lvcheck_cc(v)
#define ae2f_LangVer_CC
#define ae2f_stdcc_v
Definition LangVer.h:9
#define __ae2f_stdcheck_CC(v)
Definition LangVer.h:72
#define ae2f_stdc_v
Definition LangVer.h:44
#define ae2f_MAC_BUILD
Definition Util.h:4
#define __ae2f_mMMapSz_imp(v_mapsz, dim, lens)
Definition MMap.auto.h:153
#define ae2f_mMMapDimLen(mmap,...)
Length vector for every dimension index.
Definition MMap.auto.h:104
#define __ae2f_mMMapMk_imp(v_mk, dim, lens)
Definition MMap.auto.h:365
#define __ae2f_mMMapSz(dim, lens, ret)
Definition MMap.auto.h:183
#define __ae2f_mMMapInit_imp(v_init, mmap, dim, lens)
Definition MMap.auto.h:323
#define __ae2f_mMMapFieldIdx_imp(v_fidx, mmap, dim, idxs)
Definition MMap.auto.h:232
ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapMk(const size_t dim, const size_t *const lens, ae2f_err_t *const opt_ret_err, ae2f_FREE(free, ae2f_mMMapDel) ae2f_mMMap **const ret_mmap) noexcept
ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapSz(const size_t dim, const size_t *const lens, size_t *const ret)
Definition MMap.imp.c:9
ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapDel(ae2f_mMMap *mmap)
Definition MMap.imp.c:46
ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapInit(ae2f_mMMap *const mmap, const size_t dim, const size_t *const lens, ae2f_err_t *const opt_ret_err, size_t *const opt_ret_sz) noexcept
Definition MMap.imp.c:23
ae2f_extern ae2f_SHAREDCALL void ae2f_mMMapFieldIdx(const ae2f_mMMap *const mmap, const size_t dim, const size_t *const idxs, size_t *const ret)
Definition MMap.imp.c:14
#define ae2f_IS_APPLE
Definition Platform.h:19
#define ae2f_IS_WIN
Definition Platform.h:7
#define ae2f_IS_LINUX
Definition Platform.h:13
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
Definition errGlob.h:23
#define ae2f_errGlob_ALLOC_FAILED
stdlib allocating functions (malloc, calloc, realloc) has been failed.
Definition errGlob.h:40
#define ae2f_errGlob_WRONG_OPERATION
Found that parameter sent by programmer is invalid. The operation may have been ceased while the midd...
Definition errGlob.h:45
uint8_t ae2f_err_t
Informs that this number represents the error.
Definition errGlob.h:19
#define ae2f_errGlob_PTR_IS_NULL
Failed to refer the pointer either l-value inside the function.
Definition errGlob.h:32
#define ae2f_errGlob_IMP_NOT_FOUND
Failed to find the function on preprocessor which is callable for some reason No operation has beed d...
Definition errGlob.h:28
#define __ae2f_MACRO_GENERATED
Definition Mlp.auto.h:2