xref: /OK3568_Linux_fs/kernel/tools/lib/perf/include/internal/xyarray.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __LIBPERF_INTERNAL_XYARRAY_H
3*4882a593Smuzhiyun #define __LIBPERF_INTERNAL_XYARRAY_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/compiler.h>
6*4882a593Smuzhiyun #include <sys/types.h>
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun struct xyarray {
9*4882a593Smuzhiyun 	size_t row_size;
10*4882a593Smuzhiyun 	size_t entry_size;
11*4882a593Smuzhiyun 	size_t entries;
12*4882a593Smuzhiyun 	size_t max_x;
13*4882a593Smuzhiyun 	size_t max_y;
14*4882a593Smuzhiyun 	char contents[] __aligned(8);
15*4882a593Smuzhiyun };
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun struct xyarray *xyarray__new(int xlen, int ylen, size_t entry_size);
18*4882a593Smuzhiyun void xyarray__delete(struct xyarray *xy);
19*4882a593Smuzhiyun void xyarray__reset(struct xyarray *xy);
20*4882a593Smuzhiyun 
xyarray__entry(struct xyarray * xy,int x,int y)21*4882a593Smuzhiyun static inline void *xyarray__entry(struct xyarray *xy, int x, int y)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun 	return &xy->contents[x * xy->row_size + y * xy->entry_size];
24*4882a593Smuzhiyun }
25*4882a593Smuzhiyun 
xyarray__max_y(struct xyarray * xy)26*4882a593Smuzhiyun static inline int xyarray__max_y(struct xyarray *xy)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun 	return xy->max_y;
29*4882a593Smuzhiyun }
30*4882a593Smuzhiyun 
xyarray__max_x(struct xyarray * xy)31*4882a593Smuzhiyun static inline int xyarray__max_x(struct xyarray *xy)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun 	return xy->max_x;
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #endif /* __LIBPERF_INTERNAL_XYARRAY_H */
37