38 if (column_data.
type().
is<
float>()) {
42 const float threshold = row_filter.
threshold;
44 column_data.
typed<
float>(),
45 [&](
const float cell) { return std::abs(cell - value) < threshold; },
51 column_data.
typed<
float>(),
52 [&](
const float cell) { return cell > value; },
58 column_data.
typed<
float>(),
59 [&](
const float cell) { return cell < value; },
65 else if (column_data.
type().
is<
bool>()) {
68 column_data.
typed<
bool>(),
69 [&](
const bool cell) { return cell == value; },
73 else if (column_data.
type().
is<int8_t>()) {
78 column_data.
typed<int8_t>(),
79 [&](
const int cell) { return cell == value; },
85 column_data.
typed<int8_t>(),
86 [value](
const int cell) { return cell > value; },
92 column_data.
typed<int8_t>(),
93 [&](
const int cell) { return cell < value; },
99 else if (column_data.
type().
is<
int>()) {
104 column_data.
typed<
int>(),
105 [&](
const int cell) { return cell == value; },
111 column_data.
typed<
int>(),
112 [value](
const int cell) { return cell > value; },
118 column_data.
typed<
int>(),
119 [&](
const int cell) { return cell < value; },
131 [&](
const int64_t cell) { return cell == value; },
138 [value](
const int64_t cell) { return cell > value; },
145 [&](
const int64_t cell) { return cell < value; },
157 [&](
const int2 cell) { return cell == value; },
164 [&](
const int2 cell) { return cell.x > value.x && cell.y > value.y; },
171 [&](
const int2 cell) { return cell.x < value.x && cell.y < value.y; },
183 [&](
const int3 cell) { return cell == value; },
190 [&](
const int3 cell) {
191 return cell.x > value.x && cell.y > value.y && cell.z > value.z;
199 [&](
const int3 cell) {
200 return cell.x < value.x && cell.y < value.y && cell.z < value.z;
213 [&](
const short2 cell) { return cell == value; },
220 [&](
const short2 cell) { return cell.x > value.x && cell.y > value.y; },
227 [&](
const short2 cell) { return cell.x < value.x && cell.y < value.y; },
240 [&](
const float2 cell) { return math::distance_squared(cell, value) <= threshold_sq; },
247 [&](
const float2 cell) { return cell.x > value.x && cell.y > value.y; },
254 [&](
const float2 cell) { return cell.x < value.x && cell.y < value.y; },
267 [&](
const float3 cell) { return math::distance_squared(cell, value) <= threshold_sq; },
275 return cell.x > value.x && cell.y > value.y && cell.z > value.z;
284 return cell.x < value.x && cell.y < value.y && cell.z < value.z;
299 return math::distance_squared(float4(cell), float4(value)) <= threshold_sq;
308 return cell.r > value.r && cell.g > value.g && cell.b > value.b && cell.a > value.a;
317 return cell.r < value.r && cell.g < value.g && cell.b < value.b && cell.a < value.a;
328 const float4 value_floats = {
334 const ColorGeometry4f cell = color::decode(cell_bytes);
335 const float4 cell_floats = {
336 float(cell.r), float(cell.g), float(cell.b), float(cell.a)};
346 const ColorGeometry4f cell = color::decode(cell_bytes);
347 return cell.r > value.r && cell.g > value.g && cell.b > value.b && cell.a > value.a;
356 const ColorGeometry4f cell = color::decode(cell_bytes);
357 return cell.r < value.r && cell.g < value.g && cell.b < value.b && cell.a < value.a;
365 const StringRef value = row_filter.value_string;
369 switch (cell.type()) {
370 case bke::InstanceReference::Type::Object: {
371 return value == (reinterpret_cast<ID &>(cell.object()).name + 2);
373 case bke::InstanceReference::Type::Collection: {
374 return value == (reinterpret_cast<ID &>(cell.collection()).name + 2);
376 case bke::InstanceReference::Type::GeometrySet: {
377 return value == cell.geometry_set().name;
379 case bke::InstanceReference::Type::None: {