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