5#ifndef SPA_POD_COMPARE_H
6#define SPA_POD_COMPARE_H
23#ifndef SPA_API_POD_COMPARE
25 #define SPA_API_POD_COMPARE SPA_API_IMPL
27 #define SPA_API_POD_COMPARE static inline
42 return SPA_CMP(!!*(int32_t *)r1, !!*(int32_t *)r2);
44 return SPA_CMP(*(uint32_t *)r1, *(uint32_t *)r2);
46 return SPA_CMP(*(int32_t *)r1, *(int32_t *)r2);
48 return SPA_CMP(*(int64_t *)r1, *(int64_t *)r2);
50 return SPA_CMP(*(
float *)r1, *(
float *)r2);
52 return SPA_CMP(*(
double *)r1, *(
double *)r2);
54 return strncmp((
char *)r1, (
char *)r2, size);
61 a2 = ((uint64_t) rec2->width) * rec2->height;
66 return SPA_CMP(rec1->width, rec2->width);
73 n1 = ((uint64_t) f1->
num) * f2->
denom;
74 n2 = ((uint64_t) f2->num) * f1->
denom;
78 return memcmp(r1, r2, size);
87 uint32_t n_vals1, n_vals2;
88 uint32_t choice1, choice2;
96 if (n_vals1 != n_vals2)
105 switch (pod1->
type) {
176 return ((*(int32_t *) r1) & (*(int32_t *) r2)) != 0;
178 return ((*(int64_t *) r1) & (*(int64_t *) r2)) != 0;
187 const void *r2, uint32_t size)
191 if (*(int32_t *)r2 < 1)
193 return *(int32_t *) r1 % *(int32_t *) r2 == 0;
195 if (*(int64_t *)r2 < 1)
197 return *(int64_t *) r1 % *(int64_t *) r2 == 0;
203 if (rec2->width < 1 || rec2->height < 1)
206 return (rec1->
width % rec2->width == 0 &&
207 rec1->
height % rec2->height == 0);
216 const void *min,
const void *max,
const void *step, uint32_t size
SPA_UNUSED)
227 const void *val,
const void *vals, uint32_t n_vals, uint32_t choice)
236 const void *next = vals;
237 for (uint32_t i = 1; i < n_vals; i++) {
#define SPA_API_POD_COMPARE
Definition compare.h:34
uint32_t int int res
Definition core.h:433
SPA_API_POD_COMPARE int spa_pod_compare_is_in_range(uint32_t type, const void *v, const void *min, const void *max, const void *step, uint32_t size 1)
Definition compare.h:222
SPA_API_POD_COMPARE int spa_pod_compare_is_step_of(uint32_t type, const void *r1, const void *r2, uint32_t size)
Definition compare.h:193
#define SPA_POD_BODY_CONST(pod)
Definition pod.h:46
SPA_API_POD_COMPARE int spa_pod_compare(const struct spa_pod *pod1, const struct spa_pod *pod2)
Definition compare.h:90
SPA_API_POD_ITER struct spa_pod * spa_pod_get_values(const struct spa_pod *pod, uint32_t *n_vals, uint32_t *choice)
Definition iter.h:229
SPA_API_POD_COMPARE int spa_pod_compare_is_valid_choice(uint32_t type, uint32_t size, const void *val, const void *vals, uint32_t n_vals, uint32_t choice)
Definition compare.h:233
SPA_API_POD_ITER const struct spa_pod_prop * spa_pod_object_find_prop(const struct spa_pod_object *pod, const struct spa_pod_prop *start, uint32_t key)
Definition iter.h:254
SPA_API_POD_COMPARE int spa_pod_compare_value(uint32_t type, const void *r1, const void *r2, uint32_t size)
Definition compare.h:43
#define SPA_POD_OBJECT_FOREACH(obj, iter)
Definition iter.h:118
#define SPA_POD_BODY(pod)
Definition pod.h:44
SPA_API_POD_ITER void * spa_pod_next(const void *iter)
Definition iter.h:46
#define SPA_POD_BODY_SIZE(pod)
Definition pod.h:31
SPA_API_POD_COMPARE int spa_pod_compare_is_compatible_flags(uint32_t type, const void *r1, const void *r2, uint32_t size 1)
Definition compare.h:178
SPA_API_POD_BODY uint32_t spa_pod_type_size(uint32_t type)
Definition body.h:45
SPA_API_POD_ITER bool spa_pod_is_inside(const void *pod, uint32_t size, const void *iter)
Definition iter.h:38
@ SPA_CHOICE_Step
range with step: default, min, max, step
Definition pod.h:163
@ SPA_CHOICE_None
no choice, first value is current
Definition pod.h:161
@ SPA_CHOICE_Flags
flags: first value is flags
Definition pod.h:165
@ SPA_CHOICE_Range
range: default, min, max
Definition pod.h:162
@ SPA_CHOICE_Enum
list: default, alternative,...
Definition pod.h:164
@ SPA_TYPE_Int
Definition type.h:45
@ SPA_TYPE_Rectangle
Definition type.h:51
@ SPA_TYPE_Long
Definition type.h:46
@ SPA_TYPE_Bool
Definition type.h:43
@ SPA_TYPE_Object
Definition type.h:56
@ SPA_TYPE_Float
Definition type.h:47
@ SPA_TYPE_Fraction
Definition type.h:52
@ SPA_TYPE_None
Definition type.h:42
@ SPA_TYPE_Double
Definition type.h:48
@ SPA_TYPE_Id
Definition type.h:44
@ SPA_TYPE_Array
Definition type.h:54
@ SPA_TYPE_String
Definition type.h:49
@ SPA_TYPE_Struct
Definition type.h:55
#define SPA_UNUSED
Definition defs.h:309
#define spa_return_val_if_fail(expr, val)
Definition defs.h:460
#define SPA_CMP(a, b)
3-way comparison.
Definition defs.h:209
#define SPA_PTROFF(ptr_, offset_, type_)
Return the address (buffer + offset) as pointer of type.
Definition defs.h:222
uint32_t num
Definition defs.h:138
uint32_t denom
Definition defs.h:139
uint32_t key
key of property, list of valid keys depends on the object type
Definition pod.h:228
struct spa_pod value
Definition pod.h:249
uint32_t type
Definition pod.h:59
uint32_t size
Definition pod.h:58
uint32_t width
Definition defs.h:117
uint32_t height
Definition defs.h:118